【问题标题】:Changing text of a combobox in a different tab在不同选项卡中更改组合框的文本
【发布时间】:2013-02-22 12:08:35
【问题描述】:

我有一个组合框,我需要在基于 C# winforms 的应用程序的另一个标签页中进行镜像。

当您从下拉列表中选择不同的项目时,我有完美的工作代码。然而,不幸的是,当我更改尚未点击的选项卡的Text 时,实际上什么也没发生。

如果我首先单击每个选项卡,那么一切都会按预期进行。

现在我把它归结为某种形式的缺乏初始化首先发生。所以我尝试在构造函数中选择每个选项卡。

tabControlDataSource.SelectedIndex = 0;
tabControlDataSource.SelectedIndex = 1;
// etc

但这不起作用。

我也试过打电话给tabControlDataSource.SelectTab( 1 ),但还是不行。

有谁知道我可以如何强制标签“初始化”?

【问题讨论】:

  • 我曾经遇到过类似的问题,我通过tabControl.SelectedTab = tabControl.TabPages["tabName"] 解决了这个问题。不过,我看不出这与 tabControlDataSource.SelectTab( 1 ) 有何不同。

标签: c# winforms combobox tabcontrol tabpage


【解决方案1】:

好的,通常我会在挣扎一个小时后发布问题,然后很快就会找到解决方案。

TabPages 被延迟初始化。所以它们在第一次可见之前不会完全初始化。

所以我将这段代码添加到我的构造函数中:

        tabControlDataSource.TabPages[0].Show();
        tabControlDataSource.TabPages[1].Show();
        tabControlDataSource.TabPages[2].Show();

但这不起作用:(

然而,我想到构造函数可能不是最好的地方。所以我为Shown 创建了一个事件处理程序,如下所示:

    private void MainForm_Shown( object sender, EventArgs e )
    {
        tabControlDataSource.TabPages[0].Show();
        tabControlDataSource.TabPages[1].Show();
        tabControlDataSource.TabPages[2].Show();
    }

现在一切正常!

【讨论】:

    【解决方案2】:

    在这种情况下,也许您还可以使用某种“惰性”同步(初始化)。快速强大的想法:轮询计时器以更新内容(一旦您看到标签页就会更新它),在第二个标签中没有依赖(组合框没有更改事件来更新第二个标签内容,使用来自第一个标签的原始组合框,或者更确切地说是它的内容底层in accessable for both comboboxes class, etc), "reinitialization" when tab become visible (at which moment you also init your second combobox)...

    不可能是一个小时,没办法=D

    【讨论】:

    • 是的,那是一个小时,我更习惯于老式的 Win32,我没有任何抽象的东西;)
    猜你喜欢
    • 2011-06-15
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多