c# - 我的 Windows 窗体按钮设置为宽度 0,而它应该是全宽

标签 c# .net excel winforms office-interop

我正在处理一个 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/

相关文章:

c# - ITextSharp 添加页码到合并的 pdf 中

c# - linq-to-xml 的问题

c# - 检测缺失处置的工具

c# - 在不对字段或方向进行硬编码的情况下订购列表

vba - Worksheet_Change 事件中的 Excel VBA 静态时间戳

c# - 通过反射(reflection)将 Excel 读到类

c# - 根据通过 Internet 接收的 Windows Phone 数据显示图像

c# - 我应该如何从串行端口数据触发的 C# 事件更新我的 UI?

.net - 在另一个线程中使用 WPF 多边形

vba - 中断宏以处理击键以获得流畅的用户体验