Определить источник события - PullRequest
1 голос
/ 18 августа 2011

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

private void rbBlank_Checked(object sender, RoutedEventArgs e)
{
    // Verify source of event
    if (sender is RadioButton)
    {
        // Display
        comboBoxTitles.SelectedIndex = -1;
    }
}


private void comboBoxTitles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    // Verify source of event
    if (sender is ComboBox)
    {
        // Display
        rbBlank.IsChecked = false;
    }
}

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Если вы знаете идентификаторы этих элементов управления, вы можете попробовать что-то вроде этого:

System.Web.UI.WebControls.WebControl webControl = (System.Web.UI.WebControls.WebControl) sender;

if( webControl.ID == <comboboxId>)
{
//Do something
}

Я не пробовал это, но я думаю, это может сработать.

1 голос
/ 19 августа 2011

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

Это не дает прямого ответа на вопрос, но если вы сравните SelectedIndexcomboBoxTitles в обработчике событий SelectionChanged, ваша проблема должна быть решена

private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (comboBoxTitles.SelectedIndex != -1)
    {
        rbBlank.IsChecked = false;
    }
}
1 голос
/ 18 августа 2011

Попробуйте сравнить, если отправитель == экземпляр элемента управления вместо типа.

private void rbBlank_Checked(object sender, RoutedEventArgs e)
{
    // Verify source of event
    if (sender == rbBlank)
    {
        // Display
        comboBoxTitles.SelectedIndex = -1;
    }
}


private void comboBoxTitles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    // Verify source of event
    if (sender == comboBoxTitles)
    {
        // Display
        rbBlank.IsChecked = false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...