Как динамически добавлять или удалять текстовые поля? - PullRequest
1 голос
/ 29 января 2020

Я хотел бы создать в своей форме инструмент, который позволял бы пользователю добавлять или удалять текстовые поля с помощью кнопок [+] и [-]. Это должно быть возможно только в том случае, если в ComboBox.

выбраны элементы "* .do c" или "* .docx". Я пробовал это для .do c thingy:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    switch (cmbExtension.Text)
    {
        case "Other...":
            string extensionName = Interaction.InputBox("Enter the new extension's name (for example *.txt): ", "New extension!");
            File.AppendAllText(strPath, "\n" + extensionName);
            // string extensionFunction =  Interaction.InputBox("Enter the type of file it's supposed to be (for example Microsoft Word 2016): ", "Give us an idea.");

            cmbExtension.Items.Clear();
            LoadLines();
            break;
        case "*.doc":
            btnPlus.Show();

            break;
        case "*.docx":
            btnPlus.Show();

            break;
        default:
            btnPlus.Hide();
            break;
    }

    // As well as using similar code in these things, now empty:

    if (cmbExtension.Text == "Other...")
    {
    }
    if (cmbExtension.Text == "*.doc" || cmbExtension.Text == "*.docx")
    {
    }
}

1 Ответ

2 голосов
/ 29 января 2020

Вы можете использовать FlowLayoutPanel, в который вы добавляете и удаляете текстовые поля.

Чтобы добавить TextBox к FlowLayoutPanel (или любому элементу управления контейнера), используйте:

TextBox textBox = new TextBox();
this.flowLayoutPanel1.Controls.Add(textBox);

Чтобы удалить последний добавленный TextBox из FlowLayoutPanel (или любого элемента управления контейнера), используйте:

int count = this.flowLayoutPanel1.Controls.Count;
if (count > 0)
{
    this.flowLayoutPanel1.Controls[count - 1].Dispose();
}

Слушайте - простой пример с:

  • A FlowLayoutPanel с FlowDirection, установленным на TopDown
  • Две кнопки с именами btnPlus и btnMinus
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        cmbExtension.Items.Add("*.doc");
        cmbExtension.Items.Add("*.docx");
        cmbExtension.Items.Add("Other...");

        btnPlus.Hide();
        btnMinus.Hide();
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        switch (cmbExtension.Text)
        {
            case "Other...":
                // ...
                btnPlus.Hide();
                btnMinus.Hide();
                break;
            case "*.doc":
                btnPlus.Show();
                btnMinus.Show();
                break;
            case "*.docx":
                btnPlus.Show();
                btnMinus.Show();
                break;
            default:
                btnPlus.Hide();
                btnMinus.Hide();
                break;
        }
    }

    private void btnPlus_Click(object sender, EventArgs e)
    {
        TextBox textBox = new TextBox();
        this.flowLayoutPanel1.Controls.Add(textBox);
    }

    private void btnMinus_Click(object sender, EventArgs e)
    {
        int count = this.flowLayoutPanel1.Controls.Count;
        if (count > 0)
        {
            this.flowLayoutPanel1.Controls[count - 1].Dispose();
        }
    }
}

Снимки:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...