C#告诉我们,如果形式是最大化
题
确定继承人我的问题。我有一个表格,当没有被最大化了,它的最大尺寸必须在表单内的部件的总高度。为了实现这一点,我使用这样的:
private void resize_form(object sender, EventArgs e)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
这在表格的Resize事件触发。由于元件尺寸总是在变化这是有道理这样做在一个调整大小事件。如何过,如果我想最大限度的形式,形式只是去到this.MaximumSize定义的最高设置。所以我想知道有没有办法告诉当窗体将被最大化,其MAXIMUMSIZE设置在屏幕boundarys形式最大限度地提高了。
如果有更好的方法来更改,恕不resize事件MAXIMUMSIZE值,这也将是巨大的:)
解决方案 2
我发现适合我完美的答案。阿律的WndProc控制装置:d(我爱的WndProc现在)
protected override void WndProc(ref Message message)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
switch (message.Msg)
{
case WM_SYSCOMMAND:
int command = message.WParam.ToInt32() & 0xfff0;
if (command == SC_MAXIMIZE)
{
this.maximize = true;
this.MaximumSize = new System.Drawing.Size(0, 0);
}
break;
}
base.WndProc(ref message);
}
private void resize_form(object sender, EventArgs e)
{
if (!maximize)
{
this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin);
}
}
基本上,它设置this.maximize为true当它接收TEH SC_MAXIMIZE消息。如果this.maximize设置为false Resize事件将只设置一个新的MAXIMUMSIZE。漂亮的xD
其他提示
您仍然需要使用resize事件,但检查WindowState
:
if (this.WindowState == FormWindowState.Maximized)
{
// Do your stuff
}
由于yshuditelu指出,你可以设置你的窗体的最小尺寸属性太 - 这应该,当明智地使用锚值的耦合意味着它永远不会收缩得太厉害,当它成长的组件将移动和/或生长为必需的。
查看 System.Windows.Forms的。屏幕类。从相关点得到屏幕(来处理多纹的情况下),然后获取其分辨率。
此应结合工作与有关检查FormWindowState.Maximized其它评论。
如果用户点击在上部杆,它们可以调整窗口的大小,所以使用这样的:
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
}
不隶属于 StackOverflow