我动态地将按钮添加到WinForm。正如我这样做,我重新定位现有的按钮,以防止重叠。正在使用AutoSize
属性自动设置Width
。
对于更长的文本(将按钮超出默认值Width
),下面的代码不起作用。
例如:
b.Width
是75AutoSize
之前被设置b.Width
是75AutoSize
被设定后- 当换档以外的其他键时,它通过
b.Width + buffer
= 83 - 然而后对其进行移位
addButton()
完成,AutoSize
将宽度设置为150,重叠下一个仅83像素的Button 158
AutoSize
出现改变控件的大小来不及为它是使用。我怎样才能立即做到这一点?
尝试1 - 代码
public void addButton(string text)
{
const int buffer = 8;
//Construct new button
Button b = new Button();
b.Text = text;
b.AutoSize = true;
b.Location = new Point(0, 0);
//Shift over all other buttons to prevent overlap
//b.Width is incorrect below, because b.AutoSize hasn't taken effect
for (int i = 0; i < Controls.Count; i++)
if (Controls[i] is Button)
Controls[i].Location = new Point(Controls[i].Location.X + b.Width + buffer, Controls[i].Location.Y);
Controls.add(b);
}
尝试2
搜查谷歌和StackOverflow的以下:
- C#自动调整立即
- C#自动调整快捷
- C#自动调整工作不
尝试3
这里问。
最后手段
如果没有别的办法,定时器可以设置为重新定位在每个tick按钮。然而这是非常草率的设计,并没有帮助学习AutoSize
的错综复杂。如果可能,我想避免这种解决方法。
我不知道这是最好的选择(我还没有找到一个更好的解决方案),但我做了什么在过去,通过在其中一个事件处理程序上放置一个事件处理程序并在Resize上更改它们的位置来重新定位我所有的自动大小按钮。 –
我在[Button.AutoResize设置后直接获取宽度]回答了这个问题(https://stackoverflow.com/questions/45784751/get-width-directly-after-button-autoresize-is-set/45786796#45786796) – TnTinMn
@TnTinMn如果您以前回答过相同的问题,那么您应该投票将其作为重复关闭。 –