int rowIndex=1;
var lbx = new Label();
lbx.AutoSize = true; // default is false.
lbx.BackColor = Color.Green; // to see if it's aligning or not
lbx.Text = "Iam Autosize=true";
lbx.Anchor = AnchorStyles.Right;
tlPanel.Controls.Add(lbx, 0, rowIndex);
var dtp = new DateTimePicker();
dtp.Anchor = AnchorStyles.Left;
tlPanel.Controls.Add(dtp, 1, rowIndex);
//--- row 2 autosize false
rowIndex=2;
var lbx2 = new Label();
lbx2.AutoSize = false; // default is false.
lbx2.BackColor = Color.Green; // to see if it's aligning or not
lbx2.Text = "AutoSz=false";
lbx2.Anchor = AnchorStyles.Right;
tlPanel.Controls.Add(lbx2, 0, rowIndex);
var dtp = new DateTimePicker();
dtp.Anchor = AnchorStyles.Left;
tlPanel.Controls.Add(dtp, 1, rowIndex);
9 回答
一个简单的选项是禁用
AutoSize
(设置为false
)并使其超大,以便有空余空间 .或者,也许使用
Dock
而不是Anchor
,虽然这有不同的含义,所以你可能需要把它放在Panel
或类似的) . 最终,这就像第一个一样 - 首先是过度调整它;所以也许第一种选择更简单 .使用带有停靠标签的TableLayoutPanel是我发现在Winforms中放置右对齐标签的唯一可靠方法 . 关闭AutoSize并使用超大标签似乎会导致高DPI用户出现奇怪的异常 .
使用FlowLayoutPanel可以很好地完成它 .
然后,只需确保flowLayoutPanel足够大,以便标签扩展 .
这是在标准表格上对我有用的东西
将AutoSize属性设置为关闭,仅使标签右对齐
使用“布局”工具栏使所有字段的大小相同(可能并非真正需要)
多选标签并使用“布局”工具栏右对齐它们,将位置放在所需位置
将TextAlign属性设置为xxxRight设置之一,例如TopRight
那么Sphax注意到你必须:
将
AutoSize
设为false将
TextAlign
设置为右,例如MiddleRight
使用
MeasureString
将标签大小调整为实际大小码:
如果你设置表单属性RightToLeft = yes;所以你不应该使用Text Align属性来设置Anchor . 尝试这种方法:
要么
要么
对我来说最好的解决方案是:
将AutoSize属性标签设置为false . 设置TextAlign
属性标签右侧的东西 .
逐个手动调整标签大小,以便它们可以占用更多空间 .
将事件处理程序附加到标签的SizeChanged事件:
为了更加DPI友好,考虑使用一些其他控制作为锚点,即
对齐到dgv的RH侧 .
(顺便说一句:我尝试了Paint&TextChanged事件,但他们似乎有时会感到困惑 - 可能与事件顺序有关,特别是在打开新表格时 . )
动态创建标签的默认自动调整大小为false .
如果label的autosize为false . 它包含额外的空白空间 .
诱使你认为它没有正确对齐 . 为了诊断它,将标签的backColour设置为lightgreen