显示父窗体 C# 的侧边/侧边或顶部/底部

Posted

技术标签:

【中文标题】显示父窗体 C# 的侧边/侧边或顶部/底部【英文标题】:Show A Form Side/Side Or Top/Bottom Of Parent Form C# 【发布时间】:2021-09-05 04:40:43 【问题描述】:

我需要将进度/状态窗口/表单放在父表单的下方或表单的左侧/右侧。

这是非常基本的事情,我知道该怎么做..(正式/基本方式)..

这是我的代码:

frmMain oTest;

oTest = new frmMain();
//oTest.FormBorderStyle = FormBorderStyle.None; (to make child form border/title bar less)
oTest.StartPosition = FormStartPosition.Manual;
oTest.Left = this.Left;
oTest.Top = this.Top + this.Height;
oTest.Width = this.Width;
oTest.ShowDialog();

但问题是它们之间有细微的差距..请检查屏幕截图..

如果我尝试将子窗体边框样式设置为无,那么外观会变得比上面更糟,但出于我的目的,我需要将子窗体边框样式设置为无。

这是该案例的屏幕截图:

据我所知,看起来 Windows 主题/样式改变了表单的可见外观,而原始尺寸比这大一点?

所以,我的问题是,无论操作系统主题如何,我如何才能使子表单与父表单大小相同?

提前致谢

【问题讨论】:

现代表单周围的阴影是表单大小的一部分。不知道该怎么办 原来的差距在我看来并不可怕。将两种形式都设置为无边框以使它们接吻。 @LarsTech,感谢您的回复先生,但出于我的需要,它看起来不太好......而且不可能减少父表单边框:( 但是如果没有无边框表单,您将无法控制边框的外观,Microsoft 会这样做,而且 Microsoft 会一直更改边框外观以及边框尺寸。 【参考方案1】:

根据我的测试,我重现了您的问题。我发现表单边框宽度会影响最终结果。

您可以使用以下代码获取窗口边框宽度。

 int windowBorder = (this.Width - this.ClientRectangle.Width) / 2;

完成的代码:

 private void btnProcess_Click(object sender, EventArgs e)
        
            Form1 oTest;


            oTest = new Form1();
            //oTest.FormBorderStyle = FormBorderStyle.None; (to make child form border/title bar less)
            oTest.StartPosition = FormStartPosition.Manual;
            int windowBorder = (this.Width - this.ClientRectangle.Width) / 2;
            oTest.Left = this.Left;
            oTest.Top = this.Top + this.Height-windowBorder;
            oTest.Width = this.Width;
            oTest.ShowDialog();

        

结果:

【讨论】:

以上是关于显示父窗体 C# 的侧边/侧边或顶部/底部的主要内容,如果未能解决你的问题,请参考以下文章

c#子窗体控制父窗体的显隐

c#如何实现在两个窗体(Form)间传输数据或变量

C# winform中父窗体显示问题

C#中子窗体操作父窗体的变量

c#如何把子窗体的值传给父窗体?

c#中怎么才能父窗体中保持子窗体大小不变