C# - как создать текстовое поле программно, установив флажок?

У меня есть Form с одним Button. Когда я щелкаю Button, затем программно создаю Panel с одним CheckBox и TextBox; но для TextBoxVisible - это false. Если я проверил CheckBox, я хочу поменять свой TextBox на Visible = true. Любое тело может мне помочь?

public void CreateSlide(string name, string title, string desc) 
{
    var PanelOrder = new Panel() 
    { 
        Name = name,
        Size = new Size(395, 33),
        BorderStyle = BorderStyle.FixedSingle,
        Location = new Point(203, 157)
    };

    var ckOrder = new CheckBox()
    {
        Name = name,
        Text = "Order",
        Size = new Size(102, 21),
        Location = new Point(3, 5),
        FlatStyle = FlatStyle.Flat,
        Font = new Font("Segoe UI", 10, FontStyle.Bold)
    };

    ckOrder.CheckedChanged += new EventHandler(this.ckBoxOrder_CheckedChanged);

    var TxtQty = new TextBox
    {
        Name = name,
        Text = "1",
        Visible = false,
        BorderStyle = BorderStyle.FixedSingle,
        Size = new Size(100, 25),
        Location = new Point(290, 3)
    };

    PanelOrder.Controls.Add(ckOrder);
    PanelOrder.Controls.Add(TxtQty);
}

Соответствующий обработчик события -

private void ckBoxOrder_CheckedChanged(object sender, EventArgs e)
{
    if (((CheckBox)sender).Checked == true) 
    {
        // ??? TxtQty.Visible = true; // <- doesn't compile
    }
    else 
    {  
        // ??? TxtQty.Visible = false; // <- doesn't compile
    }
 }

В ckBoxOrder CheckedChanged вы, вероятно, захотите найти TextBox по имени. Тогда вы можете с этим работать.

Tomáš Filip 26.10.2018 09:02
3
1
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вам нужно объявить переменную (ссылку) для текстового поля вне области действия функции, которая его создает, тогда вы можете установить для нее значение visible true / false. в качестве альтернативы (медленнее) вы можете перечислить все элементы управления в форме (или на панели), найти свое текстовое поле и установить для него значение visible true / false.

вы можете привести мне простой пример?

Haru Zain 26.10.2018 09:08

что-то вроде this.Controls.Find("your textbox name").Visible = true

Z.. 26.10.2018 09:13
Ответ принят как подходящий

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

public void CreateSlide(string name, string title, string desc) {
  var PanelOrder = new Panel() { 
    Name = name,
    Size = new Size(395, 33),
    BorderStyle = BorderStyle.FixedSingle,
    Location = new Point(203, 157),
    Parent = this // <- Put PanelOrder panel on the form
  };

  var ckOrder = new CheckBox() {
    Name = name,
    Text = "Order",
    Size = new Size(102, 21),
    Location = new Point(3, 5),
    FlatStyle = FlatStyle.Flat,
    Font = new Font("Segoe UI", 10, FontStyle.Bold),
    Parent = PanelOrder // <- Put ckOrder on the PanelOrder panel
  };

  var TxtQty = new TextBox() {
    Name = name,
    Text = "1",
    Visible = false,
    BorderStyle = BorderStyle.FixedSingle,
    Size = new Size(100, 25),
    Location = new Point(290, 3),
    Parent = PanelOrder // <- Put TxtQty on the PanelOrder panel
  };

  // lambda function
  ckOrder.CheckedChanged += (s, e) => {
    TxtQty.Visible = ckOrder.Checked;
  };
}

Другие вопросы по теме