我在WinForms TabControl的Deselecting事件中处理标签更改。但是,在某些情况下,我会删除我在切换之前单击的选项卡。
场景
我有标签1和标签2 目前我在标签1中 我点击标签2 选项卡1取消选择事件从选项卡集合中删除选项卡2 在OnPaint崩溃,因为它试图转到不再存在的选项卡。 (ArgumentOutOfRangeException)。它在击中选择事件之前崩溃。
我不想在取消选择时查看tabcount是否发生了变化,因为我只想在我不再存在的标签时取消。
非常感谢任何帮助。
private void TabControl_Deselecting( object sender, TabControlCancelEventArgs ) {
DoSomeWork();
}
假设DoSomeWork删除我点击的标签。如何确定是否删除了我打算去的标签?
答案 0 :(得分:1)
没有重复。这种情况很奇怪,但我无法让它崩溃。请确保取消取消选择。
private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) {
if (e.TabPageIndex == 0 && tabControl1.TabCount > 1) {
tabControl1.TabPages[1].Dispose();
e.Cancel = true;
}
}
答案 1 :(得分:0)
我脑海中浮现出一种可能的解决方案:
如果您确定Tab1
取消选择在Tab2
选择事件之前引发的事件,我会尝试,声明我的自定义标签控件并覆盖它OnPaintMethod
,像这个伪代码:
public class MyCustomTab : TabItem
{
...
protected override OnPaint(....)
{
if(this.Parent == null) return;
base.Paint(...);
}
}
向您的TabControl
清除,您应该添加该类型的TabItems。