2011-10-13 57 views
2

我有一个包含选项卡,包含一个用户控件,包含与复选框的列表视图的WinForform。Winforms ListView检查负载

private void lvwRoles_ItemCheck(object sender, System.Windows.Forms.ItemCheckEventArgs e) 
    { 
     if (!m_loading && m_locked) 
     { 
      e.NewValue = e.CurrentValue; 
      return; 
     } 

从父窗体调用的方法(在用户控件中)为listview分配它的项目(一些选中)。这是在父窗体加载时完成的。

我的问题是,当我第一次点击相应的选项卡时,发生了ItemCheck。 这导致m_loading状态变量很久以前是错误的。
因此,当用户控件是m_locked时,没有项目被检查。

有没有办法解决这个问题,而不改变如何填充列表视图?

+0

很不清楚。使用调试器,在这个方法上设置一个断点。调用堆栈会告诉你为什么事件被触发。 –

+0

@HansPassant当然,我已经尝试过。它显示[非用户代码],主要,[非用户代码],ItemCheck。这个事件显然被框架推迟直到gui被加载。我的问题很清楚。 –

回答

3

从父窗体调用的方法(在用户控件中的 )为listview分配它的项目(一些选中)。这是在父表单的 加载完成的。

即使您在选择该选项卡时有效触发的父级form_load中调用该方法。在加载用户控件后,将m_loading设置为false,直到您选择该选项卡后才会发生这种情况。