Автоматическая проверка флажка, когда текстовое поле получает текст в нем

1

Я хочу вызвать функцию при изменении текста в текстовом поле. Функция просто проверяет, содержит ли текстовое поле какой-либо текст, и, если он это делает, отметит флажок, как отмечено. У меня есть несколько текстовых полей и флажков для этого, поэтому я хочу функцию, которую я могу вызвать каждый раз, когда мне это нужно сделать

    private void autoCheckChkBoxes(CheckBox theChkBox, TextBox theTxtBox)
    {
        if (theTxtBox.Text != "")
        {
            theChkBox.Checked = true;
        }
        else
        {
            theChkBox.Checked = false;
        }
    }

Затем я в дизайнере подключил функцию до события TextChanged для флажка

this.txtBox.TextChanged += new System.EventHandler(this.autoCheckChkBoxes(thecheckbox, txtBox));

Но это дает мне следующую ошибку, которую я раньше не видел:

Method name expected

Я что-то пропустил?

Теги:
textbox
checkbox

3 ответа

2
Лучший ответ

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

textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1);
textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2);
// etc...

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

Параметры s и a являются параметрами "отправитель" и "eventArgs", которые вы обычно видите в методе обработчика событий. На самом деле вы могли бы направить "отправителя" в правильный TextBox, но он не спасет вас здесь...

textBox1.TextChanged += (sndr,args) => autoCheckChkBoxes(thecheckbox, (TextBox)sndr);
textBox2.TextChanged += (sndr,args) => autoCheckChkBoxes(theNextCheckbox, (TextBox)sndr);

Когда я сказал, что это в конструкторе, я имел в виду конструктор вашей Form, а не внутри метода InitializeComponent():

public class YourForm : Form
{
    public YourForm()
    {
        InitializeComponent();

        textBox1.TextChanged += (s,a) => autoCheckChkBoxes(thecheckbox, textBox1);
        textBox2.TextChanged += (s,a) => autoCheckChkBoxes(theNextCheckbox, textBox2);
        // etc...
    }

    ...
}
  • 0
    Это прекрасно работает. Я не хочу тратить ваше время, но просто для того, чтобы узнать, что означает (s,a) => ?
  • 0
    Я решил, что лучше объяснить это. :) Обновленный ответ.
Показать ещё 2 комментария
1

Метод autoCheckChkBoxes не является допустимым обработчиком событий. Подпись обработчика событий

void (object sender, EventArgs e)

Пример:

this.txtBox.TextChanged += txtBox_TextChanged;

private void txtBox_TextChanged(object sender, EventArgs e)
{
    thecheckbox.Checked = !String.IsNullOrEmpty(txtBox.Text);
}
0

Создайте EventHandler и в этом вызовите функцию

this.txtBox.TextChanged += new System.EventHandler(this.textBox1_Textchanged);


private void textBox1_TextChanged(object sender, EventArgs e)
{
       autochecBoxes(thechckbox, txtbox);
}
  • 0
    Не то, что мне нравится, так как у меня около 20 мест, это должно произойти, что выглядит не так хорошо
  • 0
    Если так, то не лучше ли расширить TextBox , добавить CheckBox в качестве собеседника и переопределить text Changed Обработчик изменения?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню