版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Delicious_Life/article/details/84582117
分析需求
各位请看这个小窗体,我把这控件按阵型依次排开, 可当我让窗体全屏显示的时候,问题就出来了!如图
如何全屏显示窗体里的控件
采用Form_Resize()。思路是窗体变化时,直接重写这个变化函数。具体做法是要将原来窗体的属性以及各个控件的所占位置的比例存入Tag中(Tag可以存任何东西哦!)。
在public Form1窗体中代码(我的Form名称是FrmQueryBalance)
public FrmQueryBalance()
{
InitializeComponent();
//最大化窗体
this.WindowState = FormWindowState.Maximized;
//控件随窗体全屏显示
int count = this.Controls.Count * 2 + 2;
float[] factor = new float[count];
int i = 0;
factor[i++] = Size.Width;
factor[i++] = Size.Height;
foreach (Control ctrl in this.Controls)
{
factor[i++] = ctrl.Location.X / (float)Size.Width;
factor[i++] = ctrl.Location.Y / (float)Size.Height;
ctrl.Tag = ctrl.Size;//!!!
}
Tag = factor;
}
在控件所在窗体的Resize事件中写入如下代码
private void FrmQueryBalance_Resize(object sender, EventArgs e)
{
//控件随窗体全屏显示
float[] scale = (float[])Tag;
int i = 2;
foreach (Control ctrl in this.Controls)
{
ctrl.Left = (int)(Size.Width * scale[i++]);
ctrl.Top = (int)(Size.Height * scale[i++]);
ctrl.Width = (int)(Size.Width / (float)scale[0] * ((Size)ctrl.Tag).Width);//!!!
ctrl.Height = (int)(Size.Height / (float)scale[1] * ((Size)ctrl.Tag).Height);//!!!
//每次使用的都是最初始的控件大小,保证准确无误。
}
}
我们可以直接来看下效果,控件随窗体的变化而变化位置了
如何使窗体全屏显示时,不被系统任务栏所盖住
你以为这篇博客要结束了吗,当然不能够。现在我在窗体下面加两个label
全屏显示时,是这样的!那么有办法解决吗?当然有!
请在这个窗体的public事件中写上这一行代码
public FrmMain()
{
InitializeComponent();
//最大化窗体
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
//全屏窗体时内容不受任务栏影响
this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea;
}
解决问题~