当ControlBox为false并且设置了Location时,将切割表单高度

时间:2011-09-09 18:12:57

标签: c# winforms

我正在寻找一个解决WinForms或Win32中的错误的方法。我有一个方法在显示之前定位一个表单,但是当我显示它时,ControlBox设置为false的表单的高度会减少,从而切断一些控件。

重现这一步的步骤是在设计器中创建一个表单,ControlBox设置为false(删除关闭/最小化/最大化按钮),Text是非空字符串(标题栏未删除)然后在代码中在创建表单之后,在调用Show / ShowDialog之前将Location属性设置为某些内容。

问题似乎是,如果Text为空(没有标题栏),高度将会改变。如果我手动编辑* .designer.cs并在设置文本后设置ControlBox 的值,则问题就消失了。但手动更改生成的代码似乎不实用或不适合维护。

我尝试在更改位置之前在代码中将ControlBox设置为true,我尝试在设置位置之前保存高度(返回的高度是较短的值)并且我在尝试设置位置之前尝试使表单无效拾取填写文本的事实。这些似乎都没有纠正坏的身高值。在Reflector中,在设置了一些表单样式值之后,我试图跟踪正在发生的事情很快消失在public static extern bool SetWindowPos(HandleRef hWnd, HandleRef hWndInsertAfter, int x, int y, int cx, int cy, int flags)中 - 我假设这里有一些魔法可以调整表单大小。

// Method is called after dialog is created but before Show() is called
public static void PlaceDialog(Form dialog)
{   
 dialog.Location = new Point(1, 1);    
}

关于我的工作的任何想法我可以在PlaceDialog中使用来解决这个问题?到目前为止,我发现的唯一一个工作非常难看并打破了许多形式的事件:

// Method is called after dialog is created but before Show() is called
public static void PlaceDialog(Form dialog)
{ 
 if (dialog.ControlBox == false)
 {
   dialog.ControlBox = true;
   dialog.Show();
   dialog.ControlBox = false;
   dialog.Hide();
 }  
 dialog.Location = new Point(1, 1);    
}

1 个答案:

答案 0 :(得分:3)

尝试更改或添加以下内容:

dialog.FormBorderStyle = FormBorderStyle.None;