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