5

C#winformsベースのアプリケーションの別のタブページにミラーリングする必要があるコンボボックスがあります。

ドロップダウンリストから別のアイテムを選択するときに、完全に機能するコードがあります。ただし、残念ながら、Textまだクリックされていないタブを変更しても、実際には何も起こりません。

最初に各タブをクリックすると、すべてが期待どおりに機能します。

今、私はこれを、最初に起こっている初期化の欠如の何らかの形に落とし込んでいます。そこで、コンストラクターで各タブを選択しようとしました。

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

しかし、これは機能しません。

私も電話をかけてみましたがtabControlDataSource.SelectTab( 1 )、それでもうまくいきません。

タブを強制的に「初期化」する方法を知っている人はいますか?

4

2 に答える 2

4

わかりました。通常、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();
    }

そして今、すべてが機能しています!

于 2013-02-22T12:21:51.333 に答える
2

おそらく、この場合、一種の「遅延」同期(初期化)を使用することもできます。迅速で堅牢なアイデア:コンテンツを更新するためのポーリングタイマー(タブページが表示されると更新されます)、2番目のタブ内に依存しません(2番目のタブのコンテンツを更新するためのコンボボックスの変更されたイベントはありません、最初のタブから元のコンボボックスを使用するか、コンテンツを基にしています両方のコンボボックスクラスでアクセス可能など)、タブが表示されたときの「再初期化」(この時点で2番目のコンボボックスも初期化します)...

1時間になることはできません、方法はありません= D

于 2013-02-22T12:31:37.953 に答える