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