- - PR -
[C#.NET]TabControlのTabPage表示順序変更
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-08 13:19
いつも拝見させて頂いております。
初心でございます。 表題のTabControlのTabPageについて質問をさせて下さい。 例えば、TabControlでデフォルトが下記となっているとします。 −−−−−−−−−−−− | A | B | C | −−−−−−−−−−−−−−−−−−−−−−−− | | | | 特定の条件下の場合のみ −−−−−−−−−−−− | C | B | A | −−−−−−−−−−−−−−−−−−−−−−−− | | | | 等のようにTabの表示順序を変更したい場合、 やはり内部的にTabPageに取得し、RemoveAtとAddで再作成を行わないと無理なのでしょうか? SelectedIndexやSelectedTabが有るので、特定のTabに対してIndexを再セットしなおす方法はありますでしょうか? よろしくお願いします。 | ||||||||
|
投稿日時: 2005-09-08 13:42
お世話になります。
そういう事はできるのかな…と思って http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemwindowsformstabcontroltabpagecollectionclasstopic.asp ↑を見てみましたがなさそうな感じですね。 SelectedIndexやSelectedTabは、 TabPageを"選択"されたものを取得or"選択"する なので、これらではできないのではないでしょうか。 | ||||||||
|
投稿日時: 2005-09-08 14:22
RemoveAt と Add を使いますが、再作成を「行わないで」実現可能です。 tabControl1.AddPage ("A"); tabControl1.AddPage ("B"); tabControl1.AddPage ("C"); のような感じでタブページを挿入したなら ArrayList list = new ArrayList(); int length = tabControl1.TabPages.Count; for (int i = 0; i < length; i++) { list.Add (tabControl1.TabPages [0]); tabControl1.TabPages.RemoveAt (0); } for (int i = 0; i < list.Count; i++) { tabControl1.TabPages.Add (list.Count - i - 1); } のような感じでOKなはずです。 ポイントは「Remove する前に TabPage の参照の控えを取っておくこと」です。 # ソラで書いてるので、そのままでは動かないかもしれません。 # テキトーに修正してください。
SelectedIndext や SelectedTab に適切な値を「代入」すれば、選択状態を変更できます。 どんな値を代入すればいいかはタブページの並べ替えの規則によります。 並び順は自分で決めるんだから、計算できるはずですよね? | ||||||||
|
投稿日時: 2005-09-08 17:41
なおこ様、渋木様ありがとうございました。
表現が下手で申し訳ありません。 イメージとしては、不可能ですが下記のような事ができないかと思いまして。 <<<イメージ>>> tabA.Index = 2; tabB.Index = 1; tabC.Index = 0; (各tabA,tabB,tabCは、TabPageコントロールとした場合) やはり、色々調べてみましたが、なおこ様のおっしゃる通り不可能のようでした。 そこで、渋木様に頂いたアドバイスを元に下記の記述で可能になりました。 for (int i = 0; i < tabControl.TabPages.Count; i++) { tabControl.TabPages.RemoveAt (0); } if (TabMode == PATTERN_A) { tabControl.TabPages.Add (TabPageA); tabControl.TabPages.Add (TabPageB); tabControl.TabPages.Add (TabPageC); } else { tabControl.TabPages.Add (TabPageC); tabControl.TabPages.Add (TabPageB); tabControl.TabPages.Add (TabPageA); } 画面の表示上、かなりのちらつきが発生します。 VB6.0のFlexGridのRedrawのようなものが有れば良かったのですが・・・。 本当にありがとうございました。 | ||||||||
|
投稿日時: 2005-09-08 20:41
SuspendLayout(), ResumeLayout() してみるとか。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||||||
|
投稿日時: 2005-09-21 14:32
遅レス申し訳ありません。
渋木様、ありがとうございます。 アドバイスで問題が解決致しました。 本当にありがとうございます。 |
1