c#: Как динамически добавлять переключатели в два ряда с фиксированным размером окна - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь динамически добавлять переключатели в приложение Windows Forms в два ряда (в моем случае всегда есть четное количество переключателей). Я нашел этот вопрос , который помогает мне понять, как обычно добавлять переключатели.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test {
    public partial class Form1 : Form {
        FlowLayoutPanel pnl = new FlowLayoutPanel();

        public Form1() {
            InitializeComponent();
        }        

        void radioButtonHandler(object sender, EventArgs e)
        {
            MessageBox.Show("Radio Button", "Click");
        }

        private void Form1_Load(object sender, EventArgs e) {
            pnl.Dock = DockStyle.Fill;

            for (int i = 0; i < 16; i++)
            {
                pnl.Controls.Add(new RadioButton() { Text = "" + i });
                pnl.Controls[i].Click += new EventHandler(this.radioButtonHandler);
            }

            this.Controls.Add(pnl);
        }
    }
}

enter image description here

Проблема заключается в указанный вопрос не охватывает следующие вопросы:

  1. Как установить расстояние между переключателями?
  2. Как создать вторую строку с определенным расстоянием ниже первого строка?
  3. Как исправить кнопки и вставить горизонтальную полосу прокрутки, если для кнопок требуется больше места, чем у текущего окна?
  4. ДОПОЛНИТЕЛЬНО: В моем случае две радиокнопки вдоль вертикальной линии всегда принадлежат друг другу. Можно ли автоматически отменить выбор верхнего или нижнего, если выбран другой? На каждой вертикальной линии должна быть только одна выбранная радиокнопка. Может быть, с радиогруппой?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020
FlowLayoutPanel panel = new FlowLayoutPanel();
panel.AutoScroll = true;
panel.WrapContents= true;
for (int i = 0; i < 16; i++)
{
   panel .Controls.Add(new RadioButton()
        {
            Text = "" + i,
            Anchor = AnchorStyles.Top | AnchorStyles.Bottom
                   | AnchorStyles.Left | AnchorStyles.Right,
            AutoSize = true,
            Margin = //your styles,
        });
   panel .Controls[i].Click += new EventHandler(this.radioButtonHandler);
}

установка AnchorStyles поможет вам выровнять ваши элементы управления, и с помощью свойств, таких как отступы или размер, вы можете определить размер ваших элементов, если все радиокнопки имеют одинаковую ширину, вы можете использовать атрибут размера. Если они не имеют одинакового размера, то лучше использовать AnchorStyles.

1 голос
/ 23 апреля 2020
FlowLayoutPanel flp = new FlowLayoutPanel();
flp.Size = new Size(950, 100);
flp.BorderStyle = BorderStyle.FixedSingle;
flp.AutoScroll = true;

for (int i = 0; i < 20; i++)
{
    RadioButton rb = new RadioButton();
    rb.Text = i.ToString();
    rb.AutoSize = false;
    rb.Size = new Size(100, 25);
    flp.Controls.Add(rb);
}

this.Controls.Add(flp);
...