我正在处理一个Excel加载项项目,这将需要我以程序方式在Windows任务窗格中生成一些控件。在进行实验时,我遇到了一个问题,该按钮的宽度一直设置为0,我不明白为什么。
如果我不使用任何锚定或停靠,则该按钮将显示,但使用其默认的宽度和高度。我试图使它跨越布局面板的宽度,并且据我了解,您可以通过使用AnchorStyles Left和Right或DockStyle Fill来实现此目的。但是,一旦添加这些属性,宽度就会设置为0(从调试器中可以看到)。我检查了根控件(this)和按钮的父控件FlowLayoutPanel的宽度,它们都是默认的非零大小。
我在做什么错了?
public MyUserControl()
{
FlowPanel = new FlowLayoutPanel
{
Name = "My Flow Panel",
TabIndex = 0,
FlowDirection = FlowDirection.TopDown,
};
Button button1 = new Button
{
Name = "button1",
Text = this.Width.ToString(),
FlatStyle = FlatStyle.Flat,
Padding = new Padding
{
Left = 10
},
Parent = FlowPanel,
Anchor = (AnchorStyles.Left | AnchorStyles.Right)
};
FlowPanel.Controls.Add(button1);
this.Controls.Add(FlowPanel);
}
答案 0 :(得分:1)
您无法在FlowLayoutPanel
s中像这样锚定。而是订阅SizeChanged
事件并在那里修改按钮的宽度。创建按钮时,您可能还需要设置宽度,因此在下面,我刚刚创建了可以在两个地方调用的方法。
FlowPanel.SizeChanged += new System.EventHandler(this.FlowPanel_SizeChanged);
private void FlowPanel_SizeChanged(object sender, EventArgs e)
{
SetButtonWidth();
}
void SetButtonWidth()
{
button1.Width = FlowPanel.Width - FlowPanel.Padding.Horizontal - button1.Margin.Horizontal;
}