VB.Netコントロール名の操作について

このQ&Aのポイント
  • VB.Netのコントロール名を操作する方法について教えてください。
  • 変数Aに代入されているコントロール名がフォーム上に存在するかどうか判断し、存在すればそのコントロールに入力されている値を取得したいです。
  • 現在のコードでは「オフジェクト参照がオブジェクトインスタンスに設定されていません」というエラーが発生しています。
回答を見る
  • ベストアンサー

VB.Netのコントロール名の操作について

VB.Netのコントロール名の操作について教えて下さい。 変数Aに代入されている値(コントロール名)から、そのコントロールがフォーム上に存在するかどうか判断し、存在すればそのコントロールに入力されている値を取得したいのですが、ロジックがよくわかりません。 下記のように作りましたがエラーがでます。 どなたか教えて下さいm(_ _)m Dim CntWk As Control Dim objwk As Object Dim 変数A As String For Each CntWk In objwk If cntKoumoku.Name = 変数A Then    MsgBox(cntKoumoku.Visible)  End If Next ちなみにエラーは、  「オフジェクト参照がオフジェクトインスタンスに設定されていません」と出ます。 これはロジックの問題外かと思いますが、.Netに不慣れなためよくわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Idler999
  • ベストアンサー率27% (63/231)
回答No.2

ちなみに、「オフジェクト参照がオフジェクトインスタンスに設定されていません」のエラーは、 For Each CntWk In objwk でobjwkのコントロールを見ようとしたけど、 Dim objwk As Object で宣言されただけで実体のオブジェクトがobjwkに設定されていないので出るエラーです。 Dim CntWk As Control Dim objwk As Object Dim 変数A As String 変数A = "?????" objwk = Me For Each CntWk In objwk.Controls 'Controlsプロパティ(コレクション型)を指定する。 If CntWk.Name = 変数A Then    MsgBox(CntWk.Text)  End If Next コレでも動きます。

amamaq
質問者

お礼

Idler999さん: できました! いつもどうもありがとうございます。

その他の回答 (1)

  • Idler999
  • ベストアンサー率27% (63/231)
回答No.1

フォームのイベントに書くのなら、 Dim wk As Control For Each wk In Me.Controls  If wk.Name = "?????" Then   MsgBox(wk.Text)  End If Next コレで動きます。?????はコントロール名です。 ?????という名のコントロールがフォーム上にあれば、そのテキストをメッセージBOXで表示します。 Meはイベントを起した自分自身のことを指すので、フォームイベントならフォームのことを指します。 もちろん、フォーム名.Controls でも構いません。

関連するQ&A

  • VBSで変数の宣言はできないのですか?

    VBSで、 Dim a As String a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a と文章を作って、test.vbsで保存しました。 するとエラーになります。 Dim a As Stringの部分を消すと、問題なく作動します。 もしくは、 Dim a a = InputBox("MsgBoxに表示する値を入れてください。", , "test") MsgBox a でも正常に動きます。 VBSで変数の宣言はできないのでしょうか?

  • VB6,論理演算子Orの使い方がわからない

    以下のようなコードを書きました。 If a = 0 Or 6 Then   msgbox a Else   msgbox "a" End If 期待しているのは、変数aの値が0か6のときにだけ変数aを表示するというものです。 しかし実際にはたとえばaの値が2のときでも変数aが表示されてしまいます。 ひょっとしてOrの使い方を間違っているのでしょうか? よろしくお願いします。

  • ユーザーコントロール(OCX)のオブジェクト名

    2点わからない点がありますのでよろしくお願いします。 (1)ユーザーコントロールのオブジェクト名を引数として使用したいのですが エラーが発生し困っています。どのようにしたらいいのでしょうか? ユーザ-コントロールのオブジェクト名:UserControl1 ☆でエラーが発生する「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」 ※関数aはDLLとなっておりどうしてもオブジェクト型で渡さなければなりません。 Private Sub Command1_Click() Call a(Me) End Sub ===DLL関数:a=== オブジェクト名とボタン名をINIファイルに書き込む処理 =========== Private Sub a(prmObj As Object) Dim strMsg As String strMsg = prmObj.Name ・・・☆ : : : End Sub (2)String型からObject型に変換するのは可能でしょうか? INIファイルから"UserControl1.Command.Enable = False"というString型のデータを読込み、 ボタンを有効・無効設定するという事が処理がしたいのですが何かいい方法がありましたら教えてください。 Private Sub UserControl_Initialize() Dim a As Object Dim b as String 'INIファイルから取得 Dim c as String       'INIファイルから取得 b = "UserControl1.Command1" c = "False"   Set a = Me.Controls(b) If c = "False" then a.Enable = False else a.Enable = True End If End Sub

  • VB6 動的追加コントロールの値変更

    お世話になります。VB6初心者です。 動的追加コントロールの値変更で困っています。 Form3にFrame1をコントロール配列で1つ置いています。 ループ処理でFrame1をループ分LOADし、そのフレームの上にチェックボックスを動的に追加していく処理をしています。この動的に追加したチェックボックスの値の変更ができません。 ちなみに値やキャプションの取得はできます。 どなたかご教授願います。 Private Sub Command1_Click() Dim CHKbox(4) As VB.CheckBox Dim i As Integer For i = 1 To 4 Load Form3.Frame1(i) With Form3.Frame1(i) .Top = Form3.Frame1(i - 1).Top + 450 .Visible = True .Caption = "フレーム" & i End With Set CHKbox(i) = Controls.Add("VB.Checkbox", "CHKbox" & i, Form3.Frame1(i)) With CHKbox(i) .Move 2000, 200, 1300, 180 .Visible = True .Caption = "チェック" & i End With Next MsgBox CHKbox(1).Value  `値の取得は可能ですが CHKbox(1).Value = True   `値の変更ができません End Sub

  • VB6で最後に$が付く変数名に付いて

    VB6で質問です。 変数名の宣言で以下のように$が最後に付いた変数が宣言されているプログラムを 見ることになりました。 Dim x1$ ネットで調べたのですが、有効な情報がなく、ご存知の方がいましたら、 教えていただければと思います。 調べた限りでは以下のような動作をするため、 「何か意味があるのでは?」と考えているのですが、分からない状態です。 分かっている現象 Dim x1$ '←OKとなる Dim x1$ as Integer '←構文エラーとなる Dim x$1$ '←構文エラーとなる ほかにも同様に、変数名の後ろに付く文字として、 "%"もあるのですが、同様な状態です。 ご存知の方がいましたら、 教えていただければと思います。

  • VB2008 SQL Server のDB名一覧

    VB2008 で開発をしています。 SQL ServerからDB名の一覧を取得する処理で、うまく行かず悩んでいます。 ロジックは以下の通りです。 Dim cnString As String Dim Scn As ADODB.Connection Dim Srs As ADODB.Recordset Scn = CreateObject("ADODB.Connection") cnString = "Driver={SQL Server};" cnString = cnString & "Server=" & strServerNM & ";" cnString = cnString & "UID=" & strServerUID & "; Pwd=" & strServerPassWD & ";" Scn.Open(cnString) Srs = Scn.Execute("SELECT NAME FROM sysdatabases ORDER BY NAME ;") If Srs.RecordCount = 0 Then   MsgBox("データベースが存在しません。") Else   Do Until Srs.EOF = True     MsgBox(Srs.Fields("Name").ToString)     Srs.MoveNext()   Loop End If   実行すると、DB名ではなく、"System._ComObject"という文字が複数回(おそらくDBの数)表示されます。   どなたかおわかりになる方、おられましたらよろしくお願い致します。

  • VB2008 SQL ServerのDB名一覧取得

    VB2008 で開発をしています。 SQL ServerからDB名の一覧を取得する処理で、うまく行かず悩んでいます。 ロジックは以下の通りです。 Dim cnString As String Dim Scn As ADODB.Connection Dim Srs As ADODB.Recordset Scn = CreateObject("ADODB.Connection") cnString = "Driver={SQL Server};" cnString = cnString & "Server=" & strServerNM & ";" cnString = cnString & "UID=" & strServerUID & "; Pwd=" & strServerPassWD & ";" Scn.Open(cnString) Srs = Scn.Execute("SELECT NAME FROM sysdatabases ORDER BY NAME ;") If Srs.RecordCount = 0 Then   MsgBox("データベースが存在しません。") Else   Do Until Srs.EOF = True     MsgBox(Srs.Fields("Name").ToString)     Srs.MoveNext()   Loop End If   実行すると、DB名ではなく、"System._ComObject"という文字が複数回(おそらくDBの数)表示されます。   どなたかおわかりになる方、おられましたらよろしくお願い致します。

  • オブジェクト型の変数同士の値の等価比較方法

    VB.NETにおいて、オブジェクト型の変数同士の値が同じかどうかチェックする方法を教えてください。 Dim a As Object = 1.0 Dim b As Object = DBNull.Value ・・・ If a = b Then ' 同じ Else ' 違う EndIf 上記のようなことをしたいのですがエラーになります。よろしくお願いします。

  • OCX内のコントロール名の取得方法

    VB6で下記の記述で実行しようと思ったのですが OCX内のコントロール名を取得できませんでした。 Dim strBtnName as String Dim objBtnName as Object For Each objBtnName In me.controls if me.Name = strBtnName then objBtnName.Enable = True End If Next objBtnName コントロール名を取得できない時は 文字列をオブジェクト名へ変換してしたいと 思ってるのですが変換方法がわかりません。 もしそういうのAPIなどがあれば教えてください。よろしくお願いします。

  • VBでの変数宣言は1行に2つできないのですか?

    Visual BASICで変数宣言は1行に2つ以上記述しても実際、動作します。 例 DIM A、B as Integer このように宣言すると、AもBも整数となります。 しかし、このように宣言して、この変数を Call サブプログラム名(B) のように、パラメ-タとして引き渡そうとするとエラーとなってしまうようです。 よくわからないまま、 DIM A as Integer DIM B as Integer と分けて記述したらエラーがきえたようです。 変数宣言は1行に2つ以上まとめて記述してはいけないのでしょうか? VBは Ver 5 です。

専門家に質問してみよう