【问题标题】:Prevent form from going into windowed mode防止表单进入窗口模式
【发布时间】:2013-07-04 07:47:57
【问题描述】:

我想创建一个设置为最大化的新表单。它应该显示标题栏和任务栏。到目前为止,这不是一个大问题。当我设置this.MaximizeBox = false; 时,标题栏上的按钮被禁用,但如果我拖动或双击标题栏,表单将进入窗口模式(在 Windows 7 上测试)。

MinimumSizeMaximumSize 设置为相同的值没有成功。

【问题讨论】:

  • 正如我提到的标题栏应该是可见的,它是导致问题的标题栏。
  • @officer 您希望您的表单最大化但禁用Maximize button?那很奇怪。你的表格是固定大小的吗?
  • 是的,我希望加载的表单最大化并保持该大小,因为我在此表单上绘制了一个图表,它需要几秒钟来呈现,并且每次调整窗口大小时都会进行呈现。我几乎尝试了每个FormBorderStyle,但它不起作用......

标签: c# .net winforms titlebar


【解决方案1】:
public class Form1 {
  public Form1(){
      InitializeComponent();
      WindowState = FormWindowState.Maximized;
      Load += (s,e) => {
         MaximizeBox = false;        
      };
  }
  bool hitControlButtons;
  protected override void WndProc(ref Message m)
  {
     if ((!hitControlButtons) && (m.Msg == 0xa3 || m.Msg == 0xa1))//WM_NCLBUTTONDBLCLK and WM_NCLBUTTONDOWN
     {                
        return;
     }
     if (m.Msg == 0xA0)//WM_NCMOUSEMOVE
     {
        int wp = m.WParam.ToInt32();                
        hitControlButtons = wp == 8 || wp == 20 || wp == 9;//Mouse over MinButton, CloseButton, MaxButton                               
     }
     base.WndProc(ref m);            
  }
}

【讨论】:

  • 这正是我得到的,但如果我拖动或双击标题栏,表单仍会进入窗口模式。
  • @officer 对不起,我没有注意到你的话的细节。我用一个可行的解决方案更新了我的答案。
  • 谢谢,现在几乎可以正常工作了。问题是表单现在位于任务栏后面,所以我的停靠控件出现了一些问题。为了解决这个问题,我将MaximumSize 设置为较小的高度,但这有点脏。有没有更好的方法来做到这一点?
  • @officer 我没有注意到这个问题。我不明白为什么会这样,但是MaximizeBox = false; 时可能没有加载表单,这里有问题。我在加载表单时更新了设置MaximizeBox = false。请看。
  • 现在一切正常 - 感谢您的宝贵时间。只是为了我的理解:MaximizeBox = false; 在 FormLoad 完成后执行?我不太习惯 lambda 表达式。
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 2011-04-28
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
相关资源
最近更新 更多