c# - TabControlでの画像の配置に関する問題

c# winforms tabcontrol

私はc#winform TabControlを使用しています。 ImageListを作成し、TabControlに関連付けて、いくつかの画像を追加しました。問題は、特定のタブにImageIndexまたはImageKeyを設定すると、画像がタブに表示されますが、タブにあるテキストがカバーされることです。混乱を増すために、特に1つのTabPageは、画像を正しい場所(画像の後にテキスト)でレンダリングします。正しい場所に画像があるページは、最初にTabPageプロパティを設定したImageIndexです...

私は周りをグーグルで検索し、別のフォーラムで誰かがこの問題を説明した投稿を見つけました。誰もが問題を再現することはできないと言っていました。どのような問題が考えられるか?どうしようか本当に分からない。

編集する

混乱させて申し訳ありません。 2つのイメージを持つTabControlに関連付けられたImageListプロパティを持つImageListオブジェクトがあります。 ImageIndexTabPageTabControlプロパティを設定すると(私が読んだものから)、TabControlの実際のタブが画像の後にテキストとして表示されるはずです。これは、TabPageの最初のTabControlの画像を設定したときに起こりますが、その後のすべてのタブは、タブにあるテキストをカバーする画像でレンダリングされます。したがって、テキストは画像の後ろに表示されます。 forループを使用して、各Tabの画像を設定します。

for (int i = 0; i < tabControl.TabPages.Count; i++) {
    tabControl.TabPages[i].ImageIndex = SOME_IMG_INDEX;
}


TabPageコレクションのインデックス0のTabControl.TabPagesは正常に見えます(画像の後にテキストが続く)。他の人はテキストの上に画像を置きます。 forループの反復をインデックス2から開始したとしても、インデックス2は正しくレンダリングされますが、その後はテキストの上に画像が表示されます。これにより質問がより明確になったと思います。
答え
私が問題を再現する唯一の方法は、SizeModeTabControlプロパティを変更したときでした。

Fixedに変更すると、画像とテキストが混ざってしまいました。これを「通常」に戻すと、すべてが再び正しくレンダリングされました。

このanswerでは、MSDNに投稿されている、この問題を回避するためのハックとしてタブを削除して追加する方法について説明しています。私はハックを試してみましたが、うまくいきました。

更新:

Steve_Overflowが指摘したように、これはタブを正しく更新するための簡単な回避策です。

tabControl1.SizeMode = TabSizeMode.Fixed;

for (int i = 0; i < tabControl1.TabPages.Count; i++)
  tabControl1.TabPages[i].ImageIndex = SOME_IMG_INDEX;

tabControl1.ItemSize = tabControl1.ItemSize;
関連記事

c# - このクラスを一般的なクラスに変えることは可能ですか?

c# - 端末(Windows-CE)が5分後にシャットダウンしないようにする方法

c# - 要素の1つを取得、変更、保存できるようにするために、関連する値のリストを保存するために使用する必要があるもの

c# - エンタープライズライブラリdbcommand AddInParameterメソッド

c# - RIAデータサービスの呼び出しをサービスレイヤーにリファクタリングするにはどうすればよいですか?

c# - MoqでHttpApplicationStateをモックするときにオブジェクトを設定できないようです

c# - ラインオブジェクトのエンドキャップの幅または高さの値を取得するにはどうすればよいですか?

c# - データベースにアクセスしてエンティティフレームワークデータをテストする

c# - LoadAsyncとMemoryStreamを使用して、データベースから画像ボックスに画像をロードしたい

c# - リピーターをカスタムクラスの配列にバインドする方法[閉まっている]