0

C# WinForms:当我调用 TabPages 的 Clear() 方法时:

tabControl.TabPages.Clear();

它也在触发 SelectedIndexChanged 事件

tabControl_SelectedIndexChanged

. 但我不想那样。当我调用 Clear() 时,是否有一种正式的甚至是骇人听闻的方法来防止调用它?我仍然希望在用户单击选项卡时调用它,但我只是不希望在其他地方调用 Clear() 方法时自动调用它。

谢谢你。

4

2 回答 2

2

正如 Sani 评论的那样,这是一个简单的解决方法:

tabControl.SelectedIndexChanged -= tabControl_SelectedIndexChanged;
tabControl.TabPages.Clear();
tabControl.SelectedIndexChanged += tabControl_SelectedIndexChanged;
于 2012-04-11T16:11:35.480 回答
2

除了我所做的评论之外,您还可以将其设为扩展方法:

public static void ClearAllTabPages(this TabControl tc, EventHandler eh)
{
  tc.SelectedIndexChanged -= eh;
  tc.TabPages.Clear();
  tc.SelectedIndexChanged += eh;
}

现在,您无需记住在要清除 TabPages 的每个地方都取消钩子并重新钩子事件处理程序。你只需调用:

tabControl.ClearAllTabPages(tabControl_SelectedIndexChanged);

注意:
我没有尝试过这段代码,但它应该可以工作。

于 2012-04-11T16:25:45.183 回答