【问题标题】:SelectedValueChange() event firing during form load in a Windows Form application在 Windows 窗体应用程序中的窗体加载期间触发 SelectedValueChange() 事件
【发布时间】:2011-07-11 01:03:49
【问题描述】:

我遇到了一个问题,即在加载 Windows 窗体应用程序期间触发了 ComboBox 上的 SelectedValueChanged() 事件。目前,我还有一个 Form_Load() 事件,它使用 OleDbDataAdapters/DataTables/Fill() 等加载多个组合框,包括这个组合框。

我假设由于我的 Form_Load() 方法,SelectedValueChanged 事件由于 ComboBox 的数据被填充而被触发。

为什么会这样?

【问题讨论】:

  • 如果您不希望在初始化期间引发事件,为什么不在所有表单初始化完成后订阅该事件?

标签: c# .net winforms events


【解决方案1】:

在将项目加载到组合框之前,在表单加载事件中,取消订阅该事件。绑定数据后再次订阅事件。

Form_Load(..)
{
     _comboBoxName.SelectedValueChanged -= _comboBoxName_SelectedValueChanged;

    // Load data to the combo box... 

    _comboBoxName.SelectedValueChanged += _comboBoxName_SelectedValueChanged;
}

【讨论】:

  • @James Durman:太好了,别忘了为您的问题选择答案。
  • @James:如果这个答案解决了你的问题,别忘了把它标记为正确的
  • @Grace 谢谢 - 我在这里很新。刚刚开始掌握窍门。
【解决方案2】:

此事件可能会因为ComboBox 中首先填充的数据而被触发。最好的推荐修复方法是在控件初始化后订阅事件。

另一个简单的解决方法是在表单完全加载时分配一个布尔标志。在加载表单之前,此标志可用于忽略对您的事件的任何调用(例如 FormLoaded = true)。

【讨论】:

    【解决方案3】:
    rbtalldivision_CheckedChanged(sender, e);
    rbtAllSitecodes_CheckedChanged(sender, e);
    

    在 windows 应用程序中调用多个事件应该可以工作

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多