Кнопка формы моего окна установлена ​​на ширину 0, когда она должна быть полной ширины - PullRequest
0 голосов
/ 13 ноября 2018

Я работаю над проектом надстройки Excel, который потребует от меня процедурной генерации некоторых элементов управления на панели задач Windows. Во время экспериментов я столкнулся с проблемой, когда для этой кнопки по-прежнему задана ширина 0, и я не понимаю, почему.

Если я не использую привязку или закрепление, кнопка появляется, но с шириной и высотой по умолчанию. Я пытаюсь сделать так, чтобы он охватывал ширину панели макета, и я понял, что вы могли бы сделать это с помощью AnchorStyles Left и Right или с DockStyle Fill. Однако, как только я добавлю эти свойства, ширина будет установлена ​​в 0 (как видно из отладчика). Я проверил ширину корневого элемента управления (этого) и родительского элемента управления 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 голосов
/ 13 ноября 2018

Вы не можете закрепить подобное за 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;
}
...