C # - Как создать текстовое поле программно с помощью флажка? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть Form с одним Button.Когда я нажимаю Button, затем программно создаю Panel с одним CheckBox и TextBox;но для TextBox Visible составляет 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);
}

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

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
    }
 }

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Вы можете попробовать использовать лямбда , чтобы сохранить весь соответствующий код в пределах 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;
  };
}
0 голосов
/ 26 октября 2018

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

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