在不同的选项卡中更改组合框的文本

时间:2013-02-22 12:08:36

标签: c# winforms combobox tabcontrol tabpage

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

当您从下拉列表中选择其他项目时,我有完美的工作代码。不幸的是,当我更改未点击的标签的Text时,实际上并没有发生任何事情。

如果我首先点击每个标签,那么一切都按预期工作。

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

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

但这不起作用。

我也尝试过调用tabControlDataSource.SelectTab( 1 ),但仍无效。

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

2 个答案:

答案 0 :(得分:3)

好的,通常我会在挣扎一小时之后发布问题,然后不久找到解决方案。

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();
    }

现在一切正常!

答案 1 :(得分:2)

在这种情况下,也许你也可以使用某种“懒惰”同步(初始化)。快速健壮的想法:轮询计时器以更新内容(一旦看到标签页就会更新),不依赖于第二个标签(组合框没有更改事件来更新第二个标签内容,使用第一个选项卡中的原始组合框,或者更确切地说它是内容的基础可以访问组合框类等),当tab变为可见时“重新初始化”(此时你也会初始化你的第二个组合框)......

不能一小时,没办法= D