C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: タブに属するコントロールのアクセス


(過去ログ 102 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■61062 / inTopicNo.1)  タブに属するコントロールのアクセス
  
□投稿者/ やんまー (77回)-(2011/08/01(Mon) 00:27:07)

分類:[VB.NET/VB2005 以降] 

いつもお世話になっております。

タブコントロールについて、どうすれば良いのかわからず困っています。。。


タブページにユーザーコントロールを配置しています。
このユーザーコントロールはリッチテキストボックスが配置してあります。

タブは任意で追加することができます。
こんなふうにしました。
-------------------------------------
Dim Tab1 As New TabPage()
'タブに表示されるテキストの設定
Tab1.Text = "タブ1"
'タブコントロールにタブを追加する
TabControl1.TabPages.Add(Tab1)

Dim usrctr As New UserControl1()
usrctr.Size = New System.Drawing.Size(64, 64)
usrctr.Location = New System.Drawing.Point(16, 32)
usrctr.Dock = System.Windows.Forms.DockStyle.Fill

Me.TabControl1.TabPages(Me.TabControl1.TabCount - 1).Controls.Add(usrctr)
-------------------------------------




1)タブコントロールからこのrichtextボックスにアクセスできるでしょうか?
→ フォームを閉じた際に、richtextoxの内容を保存したいためです。

 タブインデックス1に属する、ユーザーコントロールの、richtextbox

 ↑こんなアクセスって出来るのでしょうか・・・


2)richtextboxから、自分の属しているタブの情報(Text、Index)を取得できるでしょうか?

 ↑こんなアクセスって出来るのでしょうか・・・・・?
引用返信 編集キー/
■61065 / inTopicNo.2)  Re[1]: タブに属するコントロールのアクセス
□投稿者/ Azulean (805回)-(2011/08/01(Mon) 00:59:56)
No61062 (やんまー さん) に返信
> 1)タブコントロールからこのrichtextボックスにアクセスできるでしょうか?
> → フォームを閉じた際に、richtextoxの内容を保存したいためです。
>  タブインデックス1に属する、ユーザーコントロールの、richtextbox
>  ↑こんなアクセスって出来るのでしょうか・・・

できますが、別に RichTextBox そのものに Form からアクセスする必要はないのでは?
たとえば、UserControl に「保存する」というメソッドを作るとか、「リッチテキスト形式のデータを返す」プロパティを作るとか。
目的を限定できるなら、RichTextBox そのものを見せることは避けた方がよいでしょう。

いろいろな場所から中身を知った上で実装してしまうと、UserControl を変更しなければならなくなったときに大変かもしれません。


> 2)richtextboxから、自分の属しているタブの情報(Text、Index)を取得できるでしょうか?
>  ↑こんなアクセスって出来るのでしょうか・・・・・?

できますが、正直やめておくべきです。
TabPage に貼り付けられていなかった場合、UserControl はどのように振る舞うべきでしょうか。
また、TabPage 以外に貼り付けられたときの処理が1パターン、2パターン、3パターンというようにコントロールごとに分岐していると、その UserControl は複雑になりすぎます。

UserControl 側は外側のコントロールを意識しない形が望ましいでしょう。そうすることで、ほかの部分で再利用しやすくなります。
本当に必要な情報はプロパティやメソッドなどを通して、外部から設定してもらうようにしてください。
引用返信 編集キー/
■61066 / inTopicNo.3)  Re[2]: タブに属するコントロールのアクセス
□投稿者/ やんまー (80回)-(2011/08/01(Mon) 01:14:24)
Azulean さん


お世話になります!


>>1)タブコントロールからこのrichtextボックスにアクセスできるでしょうか?
>>→ フォームを閉じた際に、richtextoxの内容を保存したいためです。
>> タブインデックス1に属する、ユーザーコントロールの、richtextbox
>> ↑こんなアクセスって出来るのでしょうか・・・
>
> できますが、別に RichTextBox そのものに Form からアクセスする必要はないのでは?
> たとえば、UserControl に「保存する」というメソッドを作るとか、「リッチテキスト形式のデータを返す」プロパティを作るとか。
> 目的を限定できるなら、RichTextBox そのものを見せることは避けた方がよいでしょう。


なるほどです。
ユーザーコントロールにメソッドを定義すれば、やややりやすくなりそうです!

tabControl1.TabIndex(0).userControl11.メソッド(引数)

みたいな感じで行けるかな・・・試してみます!




>>2)richtextboxから、自分の属しているタブの情報(Text、Index)を取得できるでしょうか?
>> ↑こんなアクセスって出来るのでしょうか・・・・・?
>
> できますが、正直やめておくべきです。
> TabPage に貼り付けられていなかった場合、UserControl はどのように振る舞うべきでしょうか。
> また、TabPage 以外に貼り付けられたときの処理が1パターン、2パターン、3パターンというようにコントロールごとに分岐していると、その UserControl は複雑になりすぎます。
>
> UserControl 側は外側のコントロールを意識しない形が望ましいでしょう。そうすることで、ほかの部分で再利用しやすくなります。
> 本当に必要な情報はプロパティやメソッドなどを通して、外部から設定してもらうようにしてください。

畏れ入ります。
正直私もややこしくなりそうだと思ったのですが、
1)が無理な場合は。。と考えました。


とりあえず1)の方法を頑張ってみます!


ありがとうございます!
引用返信 編集キー/
■61067 / inTopicNo.4)  Re[3]: タブに属するコントロールのアクセス
□投稿者/ やんまー (81回)-(2011/08/01(Mon) 01:35:05)

> tabControl1.TabIndex(0).userControl11.メソッド(引数)
>
> みたいな感じで行けるかな・・・試してみます!


大ぼけでした・・・TabIndexはTabキーを押した時のインデックスでしたね・・・

試しにtabpage1で試してみたのですが、コンパイルできませんでした・・・


TabPage1.userControl11.test
に対して、、、
'userControl11' is not a member of 'System.Windows.Forms.TabPage'. (BC30456)


こんなサブルーチンです。
Sub test
Debug.Print(richTextBox1.Text)
End Sub



引用返信 編集キー/
■61068 / inTopicNo.5)  Re[4]: タブに属するコントロールのアクセス
□投稿者/ Azulean (806回)-(2011/08/01(Mon) 06:19:33)
No61067 (やんまー さん) に返信
> TabPage1.userControl11.test
> に対して、、、
> 'userControl11' is not a member of 'System.Windows.Forms.TabPage'. (BC30456)

Form からなら、単に userControl11 で参照できませんか?
引用返信 編集キー/
■61069 / inTopicNo.6)  Re[5]: タブに属するコントロールのアクセス
□投稿者/ やんまー (82回)-(2011/08/01(Mon) 07:26:43)
Azulean さん

> Form からなら、単に userControl11 で参照できませんか?


汗・・・オオボケでした。

userControl11.test

でアクセスできました。お騒がせしました。。。


ただ、やはりわからなくなってしまったのですが、
Me.TabControl1.TabPages(Me.TabControl1.TabCount - 1).Controls.Add(usrctr)
で追加したものに対してはどう実行すればいいのか・・・


me.tabControl1.TabPages(n).test
・・・違いますよね・・・


引用返信 編集キー/
■61070 / inTopicNo.7)  Re[6]: タブに属するコントロールのアクセス
□投稿者/ shu (896回)-(2011/08/01(Mon) 07:59:13)
No61069 (やんまー さん) に返信

> ただ、やはりわからなくなってしまったのですが、
> Me.TabControl1.TabPages(Me.TabControl1.TabCount - 1).Controls.Add(usrctr)
> で追加したものに対してはどう実行すればいいのか・・・
>
>
> me.tabControl1.TabPages(n).test
> ・・・違いますよね・・・

me.tabControl1.TabPages(n).Controls(m)でユーザーコントロールが取得出来るので
キャストすると良いかと。
※mはAdd時のIndex

アクセス回数が多いようならprivate 変数に保存しておくとか。
TabPage毎に同じ構造になっているならDictionaryなど。

引用返信 編集キー/
■61072 / inTopicNo.8)  Re[7]: タブに属するコントロールのアクセス
□投稿者/ やんまー (83回)-(2011/08/01(Mon) 08:51:27)
2011/08/02(Tue) 00:13:29 編集(投稿者)

shu さん

ありがとうございます!

Dim c As UserControl1 = Me.tabControl1.TabPages(0).Controls(0)
Dim d As UserControl1 = Me.tabControl1.TabPages(1).Controls(0)
c.test
d.test

テストで上記のようにしてアクセスできました!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -