1
我有放置在用户控件,然后放置在SplitContainer的一个TableLayoutPanel。行以编程方式添加.TableLayoutPanel被锚定为Top | Left | Right,因此在添加行后,其高度将被重新计算并向下展开。
在TableLayoutPanel里面,有2列。第一列的大小是绝对的,第二列的大小是自动大小
在每个单元格中都有一个标签。在第二列的所有标签的定义如下:
Label vName = new Label();
vName.AutoSize = true;
vName.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
vName.Margin = new Padding(3);
vName.TextAlign = ContentAlignment.MiddleLeft;
vName.Name = "controlName";
vName.Text = "Some text here";
vName.DoubleClick += new EventHandler(vName_DoubleClick);
vName.Dock = DockStyle.None;
问题:
通常都工作的很好,标签调整和一切,除了一个奇怪的场景:
- 标签的文本类似于“固定设备 (33.33%)”,TableLauoutPanel第2列的宽度设置完全相同,因此所有 文本都显示在一行中。
- 由一个像素和用户控件被调整大小分配器距离的变化: 宽度减小时,标签应调整大小和在标签中的文本换行
- 标签未调整大小和文本的第二线未示出,它也可能不换行(会有在文本位置改变中的标签,如果是这样的话)
- 一个像素分配器距离的变化再次和用户控件被调整大小: 宽度进一步减小
- 标签调整大小所有权利和所有文本显示,包装
同样的事情发生在TableLayoutPanel的宽度增加时,但总是只有当一个像素有差别时(包装/不包装文本)。
此外,更改码头和/或锚和/或标签的边框样式属性不起作用(我大概尝试了所有可能的组合...)
该图展示的问题一点:
我注意到你设置'Anchor'和左'码头= DockStyle.None' ......有没有原因?码头应该帮助这一点。 – DonBoitnott
我在一开始就试过这个。没有区别。 – Arie
您正在给布局引擎冲突的说明。你说标签应该自动调整AutoSize = true。但是,也可以说它应该使用Anchor属性来观察容器的大小。这往往会导致双稳态布局,因为布局请求有两种解决方案。可能在你的情况下更多,因为你也使柱子自动调整大小。你需要摆脱这种模糊性。首先通过切换锚点。 –