我正在寻找一个解决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);
}
答案 0 :(得分:3)
尝试更改或添加以下内容:
dialog.FormBorderStyle = FormBorderStyle.None;