我的Windows窗体按钮应设置为全角时设置为宽度0

时间:2018-11-12 22:20:05

标签: c# .net excel winforms office-interop

我正在处理一个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);
    }

1 个答案:

答案 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;
}