変数にコントロール名 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 パル36  (中学生) 投稿日時 2009/11/19 05:20:24
返事が遅くなりました。
魔界の仮面弁士sの言うとおりに初めは、プロシャージャ?の外に記述していました。
そして、NullRefereceException の警告も出ていました。

>Object を New しておく必要はありません。
どこかのHPで書いてあったので真似したのですが、いらなかったのですか・・・;

魔界の仮面弁士s、いろいろ指摘してくださってありがとうございました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/11/17 05:38:51
Object を New しておく必要はありません。単純に
Dim UsrCon As Object

Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
    UsrCon = コン1
End Sub
 で OK です。

パル36さんが失敗したのは、恐らく
Dim UsrCon As Object  = コン1

Private Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles Me.Load
End Sub
 のように、Sub~End Sub 等の外側で初期値を指定していたからでしょう。

そのように記述してしまうと、NullRefereceException の警告が発生してしまい、
『オブジェクト変数または With ブロック変数が設定されていません。』という
エラーになってしまいます。

これはフォームが起動直後においては、コントロール変数「コン1」の中身はまだ生成されておらず、
空っぽ(Nothing)の状態にあるからです。
今回のように、Load イベントなどで設定するようにすれば、コントロールの生成が完了しているため、
このような問題はおきません。
投稿者 パル36  (中学生) 投稿日時 2009/11/17 04:25:05
回答してくださった方々、ありがとうございます。
ググったりしたりして調べたところ、オブジェクト変数というものを使えばいいということがわかりました。
以下のは、成功したコードです。
Dim UsrCon As New Object 'オブジェクト変数の宣言 

'ロード 
Private Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
        UsrCon = コン1 'ロードしたときにオブジェクト変数に「コン1」を代入 
    End Sub

’ボタンをクリック
UsrCon.Visible = False '現在表示しているコントロール(コン1)を非表示にする 


本当にありがとうございました。
投稿者 るしぇ  (社会人) 投稿日時 2009/11/16 06:44:33
[新しい項目の追加]で UserControl を追加すると、
System.Windows.Forms.UserControl を継承するけど
ContainerControl クラスの拡張で、
更に遡れば Control クラスに行き着くので
Visible プロパティは持ってるね。
投稿者 まだまだ  (中学生) 投稿日時 2009/11/16 06:15:50
こういうことですか?

Dim UsrCon As Object = New PictureBox1
Me.Controls.Add(UserCon)


'ボタンをクリック  
UsrCon.Visible = True


これならやりたいことができると思います。
違ったらごめんなさい。
投稿者 パル36  (中学生) 投稿日時 2009/11/16 05:30:31
普通にできたって・・・
私がしたときはできなかったんですが;

>それとVBのバージョンも書いたほうがいいと思います。 
書き忘れていました。
VB2008の無料のほうです。

もう1度やってみます。
投稿者 もすもす  (小学生) 投稿日時 2009/11/16 05:18:11
普通にできましたけど…
それとVBのバージョンも書いたほうがいいと思います。
投稿者 パル36  (中学生) 投稿日時 2009/11/16 03:57:19
はじめまして、パル36といいます。
私は、まだ始めたばっかりの初心者ですが宜しくお願いします。

質問させていただきます。

ある変数にコントロール名(ユーザーコントロール)を入れて、表示・非表示などのことはできるのでしょうか?
下のような感じにやってみました。
Dim UsrCon As Object = コントロール1



'ボタンをクリック 
UsrCon.Visible = True

しかし、例外が発生したりしてうまくいきませんでした。
このようなことは、可能でしょうか?
よろしくお願いします。