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

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

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

Re[4]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい


(過去ログ 49 を表示中)

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

■26730 / inTopicNo.1)  変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
  
□投稿者/ シウジ (1回)-(2008/10/20(Mon) 10:08:33)

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

お世話になります。

タイトルのような事を実現する場合、どのようなコードになるでしょうか?

◆Form1に下記のオブジェクトがあります。
・Label1(ラベル)
・Button1(コマンドボタン)

◆このようにしてもエラーが出てしまいうまくいきません。
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim lbx As New Label
        Dim Stx As

        Stx = "Label1"
        lbx = CType(Stx, Label)
        '↑文字変数でオブジェクトにアクセスしたいのですが出来ません。エラーが出ます。

        'lbx = Label1
        '※↑こうすればうまくいきますが、オブジェクト名は固定ではなく文字変数にしたいのです。

        lbx.Text = "ok"

    End Sub

引用返信 編集キー/
■26732 / inTopicNo.2)  Re[1]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ みきぬ (150回)-(2008/10/20(Mon) 10:42:56)
VB2005以降なら、Form1.Controls("Label1") でいけるかしら。
あとは必要に応じてキャストしてください。

引用返信 編集キー/
■26733 / inTopicNo.3)  Re[1]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ IIJIMAS (1回)-(2008/10/20(Mon) 10:47:12)
No26730 (シウジ さん) に返信
>         Dim lbx As New Label
>         Dim Stx As
> 
>         Stx = "Label1"
>         lbx = CType(Stx, Label)
>         '↑文字変数でオブジェクトにアクセスしたいのですが出来ません。エラーが出ます。

Dim controlArr As Control() = Me.Controls.Find(Stx , True)
lbx = CType(controlArr(0), Label)
できるのではないでしょうか。

Control.ControlCollection.Find メソッド 
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.controlcollection.find.aspx

引用返信 編集キー/
■26736 / inTopicNo.4)  Re[1]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ シウジ (3回)-(2008/10/20(Mon) 11:15:26)
みきぬ様
ご教授いただいたとおり、 

         Stx = "Label1"
	lbx = CType(Me.Controls(Stx), Label)
	lbx.Text = "ok"

で出来ました。
--------------------------------
IIJIMAS様

ご教授いただいたコードそのままで出来ました。
リンク先も参考になりました。
--------------------------------

Controlsコレクションの使い方がミソなのですね。
今までコレクションの概念を使ったことがありませんでしたが、便利なのですね。
とても勉強になりました。
みきぬ様、IIJIMAS様、ありがとうございました。

解決済み
引用返信 編集キー/
■26737 / inTopicNo.5)  Re[1]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ 渋木宏明(ひどり) (927回)-(2008/10/20(Mon) 11:36:14)
渋木宏明(ひどり) さんの Web サイト
> タイトルのような事を実現する場合、どのようなコードになるでしょうか?

既にコメントがついているように、やりようはいくらでもあるわけですが、本当にそうした方がいいかどうかは再考した方がいいと思います。

このシナリオには

・参照するべきコントロールの名称の入力間違いに実行時まで気付けない
・UI の変更にロジック部分が影響を受けやすい

など、いくつかの好ましくない要素がいくつか含まれます。
引用返信 編集キー/
■26755 / inTopicNo.6)  Re[2]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ シウジ (4回)-(2008/10/20(Mon) 15:51:51)
渋木宏明(ひどり)様

まだ初学者のため、そのような好ましくない要素の見極めまでは出来ていないのが現状です。

今回の質問は、多数の同等オブジェクトをVB6のように配列的に扱いたかったためです。

そのような時の定石パターンを調べてみようと思います。

ご指摘ありがとうございました。

解決済み
引用返信 編集キー/
■26764 / inTopicNo.7)  Re[3]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ 渋木宏明(ひどり) (928回)-(2008/10/20(Mon) 16:31:14)
渋木宏明(ひどり) さんの Web サイト
> 今回の質問は、多数の同等オブジェクトをVB6のように配列的に扱いたかったためです。

ならはじめから「VB6 のコントロール配列相当のことを VB.NET ではどう実現すればよいか?」と質問すればよかったですね。

過去に何度もいろんなところで質問されている事なので、適切なキーワードで検索すればいくつも事例が見つかるはずです。


引用返信 編集キー/
■26765 / inTopicNo.8)  Re[4]: 変数に代入したオブジェクト名で、オブジェクトに変更を加えたい
□投稿者/ シウジ (5回)-(2008/10/20(Mon) 16:43:12)
渋木宏明(ひどり)さま

「VB6 のコントロール配列相当のことを VB.NET ではどう実現すればよいか?」という観点で見ていませんでした。
検索したらいくつも定積の事例が見つかりました。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -