Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同时将窗体调整为两个方向_C#_Winforms_Resize - Fatal编程技术网

C# 同时将窗体调整为两个方向

C# 同时将窗体调整为两个方向,c#,winforms,resize,C#,Winforms,Resize,我有一个启动器应用程序,它包含无边界的完整表单大小的FlowLayoutPanel,并将快捷方式加载到它的子FlowLayoutPanel。表单应始终居中于屏幕中央,因此ResizeEnd事件将其居中 我希望当用户从底部调整表单的大小时(this.bottom增加),表单也会从顶部自动调整更大的大小(this.top增加) 我尝试了以下方法(仅在调整较大的大小以在此处保存代码时有效)。是的,它工作,但它闪烁的方式太多,内容是跳上跳下 private void Form1_ResizeBegin(

我有一个启动器应用程序,它包含无边界的完整表单大小的FlowLayoutPanel,并将快捷方式加载到它的子FlowLayoutPanel。表单应始终居中于屏幕中央,因此
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()和我的示例一样闪烁,单独使用表单时,表单不再跟随鼠标光标。。。