确定事件的来源



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

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

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

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

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

尝试比较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;
    }
}

如果您知道这些控件的id,您可以尝试这样做:

System.Web.UI.WebControls.WebControl webControl = (System.Web.UI.WebControls.WebControl) sender;
if( webControl.ID == <comboboxId>)
{
//Do something
}

我还没有试过,但我想它可能有效。

相关内容

  • 没有找到相关文章

最新更新