我正在处理一个 Excel 加载项项目,该项目需要我在 Windows 任务 Pane 中按程序生成一些控件。在试验时,我遇到了一个问题,即此按钮的宽度一直设置为 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);
}
最佳答案
您不能在 FlowLayoutPanel
中那样锚定。相反,订阅 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;
}
关于c# - 我的 Windows 窗体按钮设置为宽度 0,而它应该是全宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53270925/