обработка событий в c # .net winform приложении, которое использует sql server - PullRequest
1 голос
/ 08 марта 2011

У меня есть выпадающий список со списком пользователей SQL, которые имеют права, предоставленные заранее. таблица PERMISSION_DETAIL со столбцами username, permission_name содержит сведения о предоставленных или запрещенных разрешениях

теперь, когда пользователь выбирает SQLuser из выпадающего списка, разрешения отображаются в виде флажка, например, если разрешение уже предоставлено, появляется флажок и отмечается его флажок, в противном случае UNCHECKED.

для этого я использую:

if(permission is previously granted)

checkbox1.checked = true;   // here the Checkbox_CheckChanged event is called, but i dont want to call it.
checkbox1.enabled = false;

теперь, кроме флажка, есть кнопка, при ее нажатии включается флажок, то есть для изменения разрешения пользователь нажимает кнопку.

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

будет вызван, это было бы хорошо.

Я хочу, чтобы по мере появления флажка его галочка автоматически отмечалась, но при этом checkbox_Checkchanged событие, но я не хочу называть это событие.

Ответы [ 4 ]

2 голосов
/ 08 марта 2011

Я советую вам изменить событие Checkbox_CheckChanged на событие Checkbox_Click.

private void Checkbox_Click(object sender, EventArgs e)
        {
            if ((sender as CheckBox).Checked)
            {
                MessageBox.Show("checked");
                // add role to user
            }
            else
            {
                MessageBox.Show("un_checked");
                /remove role ffrom user
            }
        }
1 голос
/ 08 марта 2011

Вы можете проверить, включен ли флажок, прежде чем делать что-либо в EventHandler:

protected void Checkbox_CheckChanged (object sender, ..EventArgs e)
{
    //return if not enabled
    if(!((CheckBox)sender).IsEnabled) return;

    //DO THE REST
}

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

1 голос
/ 08 марта 2011

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

Например:

public void chkPermission_CheckChanged(object sender, EventArgs e)
{
    bool isChecked = chkPermission.Checked;
    if (this.user.HasPermission() == isChecked) { return; }
    // otherwise, we need to change some permissions!
}

Проанализируйте, нужно ли вам что-либо делать, и переходите оттуда. Не просто слепо предполагать, что что-то должно измениться, потому что произошло событие.

0 голосов
/ 08 марта 2011

Добавьте в форму логическую переменную IsCheckboxEventShouldFire. Сначала установите в значение true. В коде, который устанавливает флажок автоматически установленным, теперь также установите IsCheckboxEventShouldFire в false. В проверенном событии сначала проверьте, является ли IsCheckboxEventShouldFire истинным. Если это так, запустите ваш код. Если нет, то не надо. Установите IsCheckboxEventShouldFire в true в конце кода события.

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