- PR -

TabControl のタブ配列を変更したい

1
投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-08-09 07:18
【状況説明】
WindowsXP、VB2005EE Access2003 でWindowsアプリケーションを開発中です。
現在TabControlを使って5枚のタブページを切替表示しています。(タブ配列は左からA,B,C,D,E と配列)
ところが左から4枚目のページをデザイナーで編集していたら、ある時から5枚目に移動してしまい
A,B,C,E,D とページが変わってしまいました。何かの関係で TabControl のタブ配列プロパティが
変更されてしまったのだろうとTabControl のそれらしいプロパティを探してみましたが、
どのプロパティが変更されてしまったのか探せません。過去ログを検索しても探しきれず困っています。


【質問内容】
TabControl のタブ配列を変更するには、どのようにすればよいのでしょうか。
大変初歩的な質問ですがよろしくお願いいたします。

[ メッセージ編集済み 編集者: One.net 編集日時 2008-08-09 07:21 ]
とーちゃん
会議室デビュー日: 2008/07/08
投稿数: 11
投稿日時: 2008-08-09 11:52
推測で申し訳ないですが、デザイナ内で
Me.TabControl1.Controls.Add(Me.TabPageA)
Me.TabControl1.Controls.Add(Me.TabPageB)
Me.TabControl1.Controls.Add(Me.TabPageC)
Me.TabControl1.Controls.Add(Me.TabPageE)
Me.TabControl1.Controls.Add(Me.TabPageD)
という感じにTabItemを追加しているのではないでしょうか?
そうであるならば、
Me.TabControl1.Controls.Add(Me.TabPageA)
Me.TabControl1.Controls.Add(Me.TabPageB)
Me.TabControl1.Controls.Add(Me.TabPageC)
Me.TabControl1.Controls.Add(Me.TabPageD)
Me.TabControl1.Controls.Add(Me.TabPageE)
としてやれば戻ると思います。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-08-09 12:51
とーちゃんさん。回答ありがとうございます。
推測いただいたTabControl1.Controls.Add() は使はず、デザイナでTabControl1の「タブの追加」で
タブを左から順に作成しました。ただし次のようなオーナードローを掛けていますが関係あるでしょうか。
コード:
TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed 
'--DrawItemイベントハンドラを追加
AddHandler TabControl1.DrawItem, AddressOf TabControl1_DrawItem

Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-08-09 13:47
原因として考えられるのは、
・InitializeComponent内のMe.TabControl1.Controls.Add(「TabPage」)の順序を変更してしまった。
・デザイナのTabPagesプロパティ内で要素の順序を変更した。

が主なものになるかと思いますが、
何がおこったのかの原因追求は、
現象を再現できるソースを提示いただくか、
過去のソースログでも残っていない限り、
難しいかと思います。

現状、A,B,C,E,D とタブが作成されているのであれば、
以下のプロパティをデザイナ上で確認したとき、A,B,C,E,D とならんでませんか?
TabControl.TabPagesプロパティ
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.tabcontrol.tabpages(VS.80).aspx
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-08-09 14:15
Toshiさん、ありがとうございました。
ご指摘いただきました「TabControl.TabPages」プロパティのコレクションを見てみましたら
現在、A,B,C,E,D とタブが配列されていました。早速 A,B,C,D,E と修正しますと正常に戻りました。
私は「TabControl.TabPages」プロパティのあることも分らず修正できなくて困っておりました。
大変ありがとうございました。
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-08-09 14:47
念のため補足です。

とーちゃん さんのおっしゃっている方法でも修正が
可能であることは理解しておいて下さい。

デザイナで設定した内容は、ソースコードに反映されます。
TabPageの追加の場合、
コード:
Me.TabControl1.Controls.Add(Me.TabPageA) 
Me.TabControl1.Controls.Add(Me.TabPageB) 
Me.TabControl1.Controls.Add(Me.TabPageC) 
Me.TabControl1.Controls.Add(Me.TabPageE) 
Me.TabControl1.Controls.Add(Me.TabPageD) 



という感じのソースがInitializeComponentに記載されているはずです。
デザイナは、あくまでソースコードを書くための1ツールであるということを
認識しておいて下さい。

デザイナで設定した内容がどのようにソースに反映するのか理解することで、
問題の解決が早まるはずです。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-08-09 20:01
Toshiさん、補足説明をいただきありがとうございました。
ご指摘いただいたForms1.Designer.vbを見ますとTabPageの追加のソースコードがあることを確認いたしました。
「なるほどこのコードを修正しても解決できるのか」と理解できました。ただ私はVB.netをはじめから
デザイナで作成したため、動的にソースコードで各種のコントロールを配置していくという感覚がなく、
もっぱらドラック&ドロップで配置していくものと思っていました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)