C# 同时将窗体调整为两个方向
我有一个启动器应用程序,它包含无边界的完整表单大小的FlowLayoutPanel,并将快捷方式加载到它的子FlowLayoutPanel。表单应始终居中于屏幕中央,因此C# 同时将窗体调整为两个方向,c#,winforms,resize,C#,Winforms,Resize,我有一个启动器应用程序,它包含无边界的完整表单大小的FlowLayoutPanel,并将快捷方式加载到它的子FlowLayoutPanel。表单应始终居中于屏幕中央,因此ResizeEnd事件将其居中 我希望当用户从底部调整表单的大小时(this.bottom增加),表单也会从顶部自动调整更大的大小(this.top增加) 我尝试了以下方法(仅在调整较大的大小以在此处保存代码时有效)。是的,它工作,但它闪烁的方式太多,内容是跳上跳下 private void Form1_ResizeBegin(
ResizeEnd
事件将其居中
我希望当用户从底部调整表单的大小时(this.bottom
增加),表单也会从顶部自动调整更大的大小(this.top
增加)
我尝试了以下方法(仅在调整较大的大小以在此处保存代码时有效)。是的,它工作,但它闪烁的方式太多,内容是跳上跳下
private void Form1_ResizeBegin(object sender, EventArgs e)
{
resizeStarted = true;
top = this.Top;
bottom = this.Bottom;
height = this.Height;
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (resizeStarted)
{
// if resizing up, automatically resize form bigger so that bottom goes down
if (this.Top < top)
{
int change = top - this.Top;
this.Height = height + (2 * change);
}
// if resizing down, automatically resize form bigger and move up
else if (this.Bottom > bottom)
{
int change = this.Bottom - bottom;
this.Top = top - change;
this.Height = height + (2 * change);
}
}
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
resizeStarted = false;
centerForm();
}
private void Form1\u ResizeBegin(对象发送方,事件参数e)
{
resizeStarted=true;
top=这个,top;
底部=这个。底部;
高度=这个高度;
}
private void Form1\u SizeChanged(对象发送方,事件参数e)
{
如果(已开始调整大小)
{
//如果向上调整大小,则自动将窗体调整得更大,以便底部向下
如果(this.TopBottom)
{
int change=this.Bottom-Bottom;
this.Top=Top-change;
这个。高度=高度+(2*变化);
}
}
}
私有void Form1\u ResizeEnd(对象发送方,事件参数e)
{
resizeStarted=false;
中心形式();
}
是否有更聪明的方法来实现此行为?在开始调整大小之前,请尝试此.BeginUpdate(),在调整大小之后,请尝试此.EndUpdate()。它可能会减少闪烁。另外,请确保在窗体上启用了双缓冲。请尝试使用
form.CenterToScreen()
,但我怀疑您是否可以摆脱对答案的闪烁渴望,但窗体没有BeginUpdate()方法,只有控件有它。CenterToScreen()和我的示例一样闪烁,单独使用表单时,表单不再跟随鼠标光标。。。