当ControlBox为false且Location为set时,窗体高度被切割

本文关键字:高度 窗体 set false ControlBox Location | 更新日期: 2023-09-27 18:08:02

我正在寻找一个工作围绕什么似乎是一个错误在WinForms或Win32。我有一个方法来定位一个表单之前,它显示,但当我显示它的高度与ControlBox设置为false的形式减少,切断一些控件。

复制这个的步骤是在设计器中创建一个窗体,将ControlBox设置为false(删除关闭/最小化/最大化按钮),并且文本是一个非空字符串(标题栏未被删除),然后在创建窗体后的代码中,在调用Show/ShowDialog之前将Location属性设置为某些东西。

问题似乎是,高度被改变,它将是什么,如果文本是空的(没有标题栏)。如果我手动编辑*.designer.cs并在设置文本后设置ControlBox 的值,问题就消失了。但是手动更改生成的代码似乎不实用,也不利于维护。

我尝试在更改位置之前将ControlBox设置为true,我尝试在设置位置之前保存高度(返回的高度是较短的值),我尝试在设置位置之前使表单无效,使其拾取文本填写的事实。这些似乎都没有纠正坏的高度值。在反射器中,我试图追踪正在发生的事情,在设置一些表单样式值后迅速消失在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);    
}

当ControlBox为false且Location为set时,窗体高度被切割

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

dialog.FormBorderStyle = FormBorderStyle.None;