C#WinForm控件布局变乱问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#WinForm控件布局变乱问题相关的知识,希望对你有一定的参考价值。

事情是这样的:一个Form1面板上有很多控件,我用代码已经控制好了,控件可随窗体大小而自动缩放,但是当把该Form1缩小到任务栏的时候,再恢复到正常状态,控件的布局就乱了..不知诸位可碰过这情况?我的缩放代码如下:public static void AutoScale(MForm MF)

MF.Tag = MF.Width.ToString() + "," + MF.Height.ToString();
MF.SizeChanged += new EventHandler(MF.MForm_SizeChanged);


private void MForm_Resize(object sender, EventArgs e)

string[] tmp = new string[2];
try

tmp = ((Form)sender).Tag.ToString().Split(',');

catch

tmp = new string[2];
tmp[0] = "1244";
tmp[1] = "719";


float width = (float)((Form)sender).Width / (float)Convert.ToInt16(tmp[0]);
float heigth = (float)((Form)sender).Height / (float)Convert.ToInt16(tmp[1]);

((Form)sender).Tag = ((Form)sender).Width.ToString() + "," + ((Form)sender).Height;

foreach (Control control in ((Form)sender).Controls)

control.Scale(new SizeF(width, heigth));



就是想问问大家如何更改才可以使缩小到任务栏后再恢复原状不会变乱?
我这代码是正确的..点击右上角最小化和最大化控件缩放都是正常的,只是直接最小化到任务栏然后复原,控件就乱了..

这个是布局的问题,一般我们在窗体设计的时候都会对控件进行位置的设置。
比如说:
FORM1 为 600*600 那么你的的控件正确摆放位置也只限于这个范围内。如果你想在最大化为1024*768 那么控件的位置肯定会发生改变。以致最大化后的窗体一部分地方是空白的,
以600*600为列子
解决方案一:你可以在设计的时候把窗体的长宽定格在600*600,不让用户最大化,当然你想设计成1024*768也是可以的。
解决方案二:采用流布局:工具箱里边容器里有一个:FlowLayoutPanel的控件。你可以把这个控件Panel加进你的FORM,再在这个布局控件上面添加你的控件。这样,不管你的窗体初始大小是多大都可以使你的窗体在最大化的时候,或者改变窗体大小的时候,里边的控件也随着一起变大或者变小。不影响界面!

没有看懂继续提问
参考技术A 有两种方法:
1 先将你的代码删除,或者先注释,设定anchor属性,这样控件的边界就会跟窗体的边界始终保持一定的距离而不管窗体如何缩放

2 anchor可以做到固定缩放,但无法做到按比例缩放,如果能确定你上述的代码是正确的,那么就双击窗体的resize事件,然后在该事件中调用你的这个函数
参考技术B 我初学的时候也遇到过这个问题,其实控件都有anchor属性的 控制其与父容器的边距 你可以试下。 参考技术C 用panel控件,把控件进行分区,然后设置空间的Dock和Anchor属性。 参考技术D 问题解决了吗 没有我有源代码需要吗?

C# winform 控件大小布局适应窗口放大缩小?

缩小窗口后,右侧看不见了

在缩放窗口事件中,将右侧容器控件的 Width属性设置为窗体ClientRectange.Width - 左边容器的Width。 参考技术A 你好像用了某些三方控件?
有可能是控件问题,也有可能你用法问题,只有发demo调试

以上是关于C#WinForm控件布局变乱问题的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 控件大小布局适应窗口放大缩小?

C# WinForm 如何动态添加控件和设计控件布局

winform控件布局(sidebar)

winform 布局容器

WinForm组合布局属性

C# WinForm 如何动态添加控件和设计控件布局