проблема с флажком c # - PullRequest
1 голос
/ 24 июля 2011

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

private void checkYes1_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = true;
    checkNo1_cbx.Checked = false;
}

и когда флажок no установлен -

private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = false;
    checkYes1_cbx.Checked = false;
}

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

Это вопрос к форме, и на данный момент он содержит до 11 вопросов, и в будущем будет добавлено еще. Итак, мои 2 проблемы до сих пор -

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

  2. Можно ли улучшить этот код, чтобы минимизировать объем кода, который мне придется написать в будущем.

Ответы [ 4 ]

2 голосов
/ 24 июля 2011
private void checkYes1_CheckedChanged(object sender, EventArgs e)
{
    OnCheck(true);
}
private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
{
    OnCheck(false);
}

private void OnCheck(bool yes)
{
    textBox14.Enabled = yes;
    checkNo1_cbx.CheckedChanged -= checkNo1_cbx_CheckedChanged;
    checkNo2_cbx.CheckedChanged -= checkYes1_CheckedChanged;
    checkNo1_cbx.Checked = !yes;
    checkNo2_cbx.Checked = yes;
    checkNo1_cbx.CheckedChanged += checkNo1_cbx_CheckedChanged;
    checkNo2_cbx.CheckedChanged += checkYes1_CheckedChanged;
}

Однако рассмотрите возможность использования RadioBox вместо CheckBox, потому что вы хотите, чтобы при проверке одного снимать флажок с другого ..

Редактировать: В вашем предыдущем проекте вы ошиблись changed I have to press it again to check it из-за того, что у вас есть два обработчика событий, назначенных каждому из флажков. теперь в вашем коде, когда первый отмечен, вы отключаете текстовое поле, а другое отключаете, но когда вы вызываете другой непроверенный Checked = false, вы также вызываете обработчик события второго флажка, чтобы он включил первый отключить ... вы должны удалить обработчик события на -= при обновлении вашего кода, если вы не хотите, чтобы обработчик запускался снова ... И это то, что я делаю в приведенном примере кода.

2 голосов
/ 24 июля 2011

Почему вы используете 2 флажка? Одного флажка (check1) будет достаточно:

private void check1_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = check1.Checked;
}

EDIT: Предполагая, что каждый вопрос означает 1 текстовое поле, тогда вам нужно 1 флажок на текстовое поле ... это можно еще улучшить, если использовать более сложный подход

0 голосов
/ 24 июля 2011

, если нет причины, по которой вы совершаете поездку туда и обратно на сервер, чтобы отключить текстовое поле при изменении выбора флажка, почему бы вам просто не сделать все это на стороне клиента с помощью JavaScript?

0 голосов
/ 24 июля 2011

Я согласен с Яхией. Если вам действительно нужно явно указать две опции, то вам следует рассмотреть возможность использования RadioButtons.

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