【问题标题】:Why is the tab page body not updating with a .NET tab control?为什么标签页正文不使用 .NET 选项卡控件进行更新?
【发布时间】:2012-06-19 01:34:49
【问题描述】:

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

tabControl1.SelectTab(1);

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

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

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

【问题讨论】:

    标签: c# .net winforms tabcontrol


    【解决方案1】:

    我复制。这是事件处理程序的一般问题,您可以通过像这样猛拉地板垫来混淆本机 Windows 控件的填充。 TreeView 是另一个很容易出现此类问题的控件。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多