5

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

当您从下拉列表中选择不同的项目时,我有完美的工作代码。但是,不幸的是,当我更改Text尚未单击的选项卡时,实际上没有任何反应。

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

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

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

但这不起作用。

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

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

4

2 回答 2

4

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

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

现在一切正常!

于 2013-02-22T12:21:51.333 回答
2

在这种情况下,也许您还可以使用某种“惰性”同步(初始化)。快速强大的想法:轮询计时器以更新内容(一旦您看到标签页就会更新它),在第二个标签中没有依赖项(组合框没有更改事件来更新第二个标签内容,使用第一个标签中的原始组合框,或者让它的内容底层在Comboboxes类等上都可以访问时),当Tab变得可见时(此刻您还会启动第二个Combobox)...

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

于 2013-02-22T12:31:37.953 回答