VB.NET2005です。
タブコントロール各ページに配置したTextboxすべてを対象に処理したいのですが、(例としてタブ5ページ、各ページにTextboxが3個、計15個あるとします)
Dim textb As TextBox
For Each textb In TabControl1.Controls
'各Textboxの入力内容のチェック処理等
Next
としてもエラーになってしまいます。どのようにすれば正しく動作いたしますでしょうか。よろしくお願いします。
For Each tabctl As TabPage In TabControl1.TabPages
For Each ctl As Object In tabctl.Controls
If ctl.Name.ToString.IndexOf("TextBox") > -1 Then
Dim tb As TextBox
tb = DirectCast(ctl, TextBox)
End If
Next
Next
こうかナ〜・・・
以上。参考まで
オショウさま、早々に、ご返答ありがとうございます。
試してみました。確かに動作しました。
す、すごい、すごすぎます。驚きです。
簡単のようですが、物凄いテクニックとお察しいたします。
あつかましいお願いですが、tb=DirectCast(ctl, TextBox)の意味は何でしょうか、他にどのような場面で使われますでしょうか。お手数でなければご教授ください。
オショウさま本当にありがとうございました。(感謝、合掌)
ctl As Object で、そのタブ上の全てのコントロールを
取ってきますので、その各々のコントロールのタイプで
独自のメソッドにアクセスするには、Dim tb As TextBox
として、tb = DirectCast(ctl, TextBox) すれば、後は
簡単にアクセスできるからです。
これが、取得したいコントロールが、RadioButtonであっ
た場合は・・・
ctl.Name.ToString.IndexOf("RadioButton")
と変更し
Dim rb As RadioButton
rb = DirectCast(ctl, RadioButtoon)
とすれば、OKです。
応用はできますので、お試しあれ・・・
※ 本当は、コントロールな名前で取得するのではなく
タイプで取得するのが、正解かと・・・
コントロールの名前を変更した場合、この方法では
取れません。
よって・・・
If TypeOf ctl Is TextBox Then
と変更して下さい。
以上。
オショウさま、ご教授いただきましてありがとうございます。
なるほど、このような内容なんですね。たいへん勉強になりました。
いろいろと応用し活用してみます。
また何かありましたらよろしくお願いいたします。
ありがとうございました。
ツイート | ![]() |