我有一个组合框,我需要在基于C#winforms的应用程序的另一个标签页中镜像。
当您从下拉列表中选择其他项目时,我有完美的工作代码。不幸的是,当我更改未点击的标签的Text
时,实际上并没有发生任何事情。
如果我首先点击每个标签,那么一切都按预期工作。
现在我把它归结为某种形式的首次缺乏初始化。所以我试图在构造函数中选择每个选项卡。
tabControlDataSource.SelectedIndex = 0;
tabControlDataSource.SelectedIndex = 1;
// etc
但这不起作用。
我也尝试过调用tabControlDataSource.SelectTab( 1 )
,但仍无效。
有谁知道如何强制标签“初始化”?
答案 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