确定事件来源

时间:2011-08-18 18:06:03

标签: c# wpf event-handling

我有一个下拉列表和单选按钮。如果用户从下拉列表中选择了某些内容,我希望清除单选按钮。如果选择单选按钮,我希望选择下拉列表清除。不幸的是,这会产生相互抵消的事件。我尝试使用如下所示的发件人来确定代码或用户是否更改了值,但这不起作用。如果用户是操作的来源,如何才能使这些事件起作用?

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 个答案:

答案 0 :(得分:1)

尝试比较sender ==控件实例而不是类型。

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

答案 1 :(得分:1)

如果你知道这些控件的ID,你可以尝试这样的事情:

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

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

我没试过这个,但我想它可能会有用。

答案 2 :(得分:1)

您将无法区分两者之间的区别,因为两种情况下的源都是相同的实例。

这不会直接回答问题,但是如果你比较SelectedIndex事件处理程序中的SelectionChanged comboBoxTitles,那么你的问题就应该解决了

private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (comboBoxTitles.SelectedIndex != -1)
    {
        rbBlank.IsChecked = false;
    }
}