gpt4 book ai didi

c# - 为什么选项卡页面主体不使用 .NET 选项卡控件进行更新?

转载 作者:太空狗 更新时间:2023-10-30 01:07:56 33 4
gpt4 key购买 nike

我在使用 C# (Visual Studio 2010) 中的 .NET TabControl 时遇到了一个奇怪的问题。启动 Windows 窗体应用程序。添加选项卡控件和按钮。在两个标签页中添加两个不同的标签,以便于区分它们。该按钮的目的只是充当下一个按钮;使用代码订阅其 Click 事件:

tabControl1.SelectTab(1);

假设用户在第一个选项卡上输入了错误的内容,因此当他们尝试转到第二个选项卡时,我们希望将他们送回,因此使用以下代码订阅选项卡控件的 SelectedIndexChanged 事件:

if(tabControl1.SelectedIndex == 1)
{
tabControl1.SelectTab(0);
}

现在运行程序并单击按钮。您会注意到,根据顶部突出显示的选项卡判断,第一个选项卡页似乎已被选中,正如您所期望的那样。但是从tab控件body中实际出现的tab页来看,还是第二个出现的tab页!调用各种控件的 Focus()、Update() 和 Refresh() 函数似乎没有帮助。这是怎么回事?

最佳答案

我复制。这是事件处理程序的一个普遍问题,您可以通过像那样猛拉地垫来混淆 native Windows 控件的填充。 TreeView 是另一个很容易出现这种问题的控件。

对于这样的问题,有一个优雅而通用的解决方案,您可以使用 Control.BeginInvoke() 来延迟命令。在 native 控件完成事件生成并且所有副作用都已完成后,它将稍后执行。这也解决了这个问题,就像这样:

    private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) {
if (tabControl1.SelectedIndex == 1) {
this.BeginInvoke(new Action(() => tabControl1.SelectTab(0)));
}
}

关于c# - 为什么选项卡页面主体不使用 .NET 选项卡控件进行更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059859/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com