2013-02-22 41 views
5

我有一个组合框,需要在基于C#winforms的应用程序的另一个选项卡页中进行镜像。在不同的选项卡中更改组合框的文本

当您从下拉列表中选择不同的项目时,我有完美的工作代码。然而不幸的是,当我更改一个没有被点击的标签的Text却没有发生任何事情。

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

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

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

但这不起作用。

我也试过打电话tabControlDataSource.SelectTab(1),但它仍然不起作用。

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

+0

我曾经有类似的问题,我解决了'tabControl.SelectedTab = tabControl.TabPages [“tabName”]'。尽管如此,我没有看到与tabControlDataSource.SelectTab(1)有什么不同。 – Otiel 2013-02-22 12:17:32

回答

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

而现在一切工作

2

也许你也可以在这种情况下使用“懒惰”同步(初始化)。快速强大的想法:轮询计时器更新内容(它会更新它,一旦你看到标签页),不依赖于第二个选项卡(没有更改事件组合框更新第二个标签内容,使用原始组合框从第一个选项卡或更确切地说它的内容基础在accessable两个组合框类等),“重新初始化”当标签变得可见(在这一刻,你还初始化你的第二个组合框)...

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

+1

是的,这是一个小时,我已经习惯了老的Win32,我没有任何东西被抽象出来;) – Goz 2013-02-22 12:37:17

相关问题