- PR -

複数のコントロール持ったタブコントロールを作成したい

1
投稿者投稿内容
JAKEWISE
会議室デビュー日: 2006/05/17
投稿数: 12
投稿日時: 2006-05-23 17:24
お教え下さい:

現在、XMLファイルを読み込み、その内容の一部を抜き出して
フォーム上にあるラベルやリストボックスに値を代入して表示する、
というwindowsアプリを作成しています。

今まではこれで問題なかったのですが、
「複数のxml文書を読み込んで表示させたい」
との要望があり、改修を加えたいと思っています。

基本的なアイデアとして、タブブラウザのように
1つのXMLに対して1つのタブを表示できればと思っていたのですが、
初っ端から沢山のコントロールを持ったページを自動的に作成する、
という所で行き詰っています。

自分なりにネットも検索したのですが、
タブコントロールの基礎的な事柄以外見つけられずに困っています。

もし実現不可の場合、他にやり方をご存知でしたらお教え下さい。
よろしくお願いいたします。

開発言語:vb.NET 2005
環境:Windows XP pro sp2

タブのイメージ
+------------+------------+
|ファイル名1|ファイル名n|
+------------+------------+-----------------------+
| ラベル1
| ラベル2
| ラベル3
| +リストボックス-------------------+
| | 項目1
| | 項目2
| | 項目n
| +---------------------------------+
+-------------------------------------------------+

編集コメント:
エディタ画面だときれいにAAできるんですが…グハァ

[ メッセージ編集済み 編集者: JAKEWISE 編集日時 2006-05-23 17:42 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-23 18:06
引用:

JAKEWISEさんの書き込み (2006-05-23 17:24) より:

基本的なアイデアとして、タブブラウザのように
1つのXMLに対して1つのタブを表示できればと思っていたのですが、
初っ端から沢山のコントロールを持ったページを自動的に作成する、という所で行き詰っています。


TabControl に追加したいコントロールのインスタンスを生成して、
TabControl の Controls プロパティ (コレクション) に Add するだけじゃないでしょうか?
そういう意味ではないですか?

引用:

編集コメント:
エディタ画面だときれいにAAできるんですが…グハァ


[code][/code]で括れば、固定ピッチフォントで書き込みできると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
JAKEWISE
会議室デビュー日: 2006/05/17
投稿数: 12
投稿日時: 2006-05-23 18:26
引用:

じゃんぬねっとさんの書き込み (2006-05-23 18:06) より:

TabControl に追加したいコントロールのインスタンスを生成して、
TabControl の Controls プロパティ (コレクション) に Add するだけじゃないでしょうか?
そういう意味ではないですか?




タブコントロールの実装経験がないので初歩的に聞こえるかもしれません。
ページを追加するコードはこんな感じだと思うのですが…

コード:
private sub ボタンonClickとか 
 do ファイルがある限り
  ファイル開く 
  call addTabPage(ファイル名、他)
 loop
end sub

private function addTabPage(ファイル名とか) as ...
'ページ追加
'fileName=XMLファイル名
TabPage1 As New System.Windows.Forms.TabPage(fileName)
~~~~~~~~
TabControl1.Controls.Add(TabPage1)
'テキストボックス宣言
Dim text1 As TextBox = New TextBox()
    ~~~~~
text1.text="aaa"
TabPage1.Controls.Add(text1)
'以下他のコントロールを追加
〜〜〜〜〜〜〜〜〜〜
end function



こういった場合、tabPage1やtext1のようなコントロールの名前は
同じでかまわないのでしょうか?

初歩的な質問でスミマセン (^^;;
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-23 18:48
引用:

JAKEWISEさんの書き込み (2006-05-23 18:26) より:

こういった場合、tabPage1やtext1のようなコントロールの名前は
同じでかまわないのでしょうか?



タブページごとにコントロールを割り当てるなら、コントロールクラスのインスタンスを配列に格納するなどした方が管理しやすいかもしれません。

TextBox[] t; ←こんな感じ。

同じ画面構成であるなら、同一のコントロールの表示内容をアクティブなタブが変わるたびに変更する手もありますが、この場合コンテナを変更しないといけませんね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-23 19:14
引用:

JAKEWISEさんの書き込み (2006-05-23 18:26) より:

こういった場合、tabPage1やtext1のようなコントロールの名前は同じでかまわないのでしょうか?


はい、インスタンスとして独立していますから構いません。
変数に参照として (この場合は text) 保持しておくならば、"参照" は上書きされます。
実体は、Controls プロパティのコレクションでユニークです。

引用:

初歩的な質問でスミマセン (^^;;


全然問題ないと思います。
そんなに謝らないでください。(*_ _)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2006-05-23 19:18
> こういった場合、tabPage1やtext1のようなコントロールの名前は
> 同じでかまわないのでしょうか?

「名前」はあまり重要ではないですよ。

単純に配列のように扱いたいのであれば、
次のようなこともできるでしょう(かなり無理な例ですが・・・)

'新規テキストボックスを指定したタブページに配置
private function AddTextBox(page TabPage) as integer

 'テキストボックス作成
 dim textbox as TextBox = new TextBox

 'タブページに配置
 page.Controls.Add(textbox)
 textbox.Location = ・・・・

 'コレクションに格納
 return m_TextBoxList.Add(textbox) '格納インデックスを返す

end function

'作成したテキストボックスを格納しておくコレクション
private m_TextBoxList as ArrayList = new ArrayList()


ようは、作成したテキストボックスをどこかに格納しておけばよいです。
テキストボックスだけをコレクションに入れておけば、
全てのテキストボックスに対して何らかの処理を行うこともできるでしょう。


複数のXMLを表示したいという話ですが、
1つのXML表示機能を複数ファイル分用意したいのでしょうか。
であれば、現在表示に使用しているテキストボックスやリストをまとめ、
それをユーザーコントロールにして、1ファイルに対する表示編集ロジックを書き込みます。

タブページにはユーザーコントロールを格納していけば、
もっとすっきりするかもしれません。

JAKEWISE
会議室デビュー日: 2006/05/17
投稿数: 12
投稿日時: 2006-05-23 21:24
引用:

変数に参照として (この場合は text) 保持しておくならば、"参照" は上書きされます。
実体は、Controls プロパティのコレクションでユニークです。



どうも簡単にできすぎて気持ち悪いですw

引用:

全然問題ないと思います。
そんなに謝らないでください。(*_ _)



どうも質問するのに気が引ける部分があるんですよね。
調べれば何とかなるのかなぁと思うと、つい腰が低くなってしまいますw

引用:

複数のXMLを表示したいという話ですが、
1つのXML表示機能を複数ファイル分用意したいのでしょうか。



そうですね、その通りです。

引用:

であれば、現在表示に使用しているテキストボックスやリストをまとめ、
それをユーザーコントロールにして、1ファイルに対する表示編集ロジックを書き込みます。



とても便利そうですね、やってみます!
1

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