とっておきの「夜食」教えて下さい

いつもお世話になっています。
独学でVBの勉強をしているものなのですが、
どうしてもわからないことがあるので教えてください。

デザイナの画面で配置したテキストボックスなどのコントロールを、
コードでコピーして複数配置するようにしたいんです。

そこで、デザイナでTextBox1を配置して、
コードで以下のように記述しました。

Dim MyTextBox1 As New TextBox
MyTextBox1 = TextBox1
Me.Controls.Add(MyTextBox1)

すると、デザイナ画面で配置したテキストボックスが無くなって、
新たにコードで作成したテキストボックスだけが、
画面に表示されてしまうんです。

実際に行いたいことは、複数のコントロールをパネル上に配置して、
そのパネルをコードで複数作成することなのですが、
そもそもそのようなことはできないのでしょうか?

かなり的外れな質問になってしまっているかもしれませんが、
お分かりでしたら教えてください。
よろしくお願いします。

A 回答 (2件)

MyTextBox1 = TextBox1 としてしまうと その前の行でせっかく作成したインスタンス(実体)をつぶしてしまっています



作成しているプロジェクトの Form1.Designr.vbファイルなどでTextBox1に関する記述をすべて検索してみましょう

newで作成して Location,Name,Size,TabIndex,Textなどのプロパティを設定 Controls.Addでコレクションに追加
といった処理になっていると思います

Dim Pt as Point
pt = TextBox1.Location
pt.Offset(0, TextBox1.Height + 4 )
myTextBox1.Location = pt
myTextBox1.Size = TextBox1.Size
myTextBox1.Name = "MyTextBox1"
myTextBox1.TabIndex = Me.Controls.Count + 1
myTextBox1.Text = "initial Text"
Me.Controls.Add( myTextBox1 )
といった具合です

パネルに追加するのであれば Me.Controlsを Panel1.Controlsなどに変更すればよさそうですよ
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

私もredfox63さんが教えてくださった方法で試そうとしたのですが、
パネルに配置するコントロールはまだ確定ではなくて、
細かい場所の設定などまで考えると、
できればデザイナ画面で配置をして、
それをコピーできればと思ったんです・・・

やっぱり、横着しないでコードを書けってことですかね^^;

お礼日時:2008/08/11 12:47

MyTextBox1 = TextBox1


↑この時点で、MyTextBox1が見るオブジェクトはTextBox1となり、TextBox1のコピーではなく、TextBox1そのものになってしまいます。
単純にテキストボックスを追加するだけなら、上記一文はいりません。
TextBox1のコピーをつくるなら
MyTextBox1 = TextBox1.Clone()
になります。
    • good
    • 1
この回答へのお礼

ご返答ありがとうございます。

早速試してみたのですが、
MyTextBox1 = TextBox1.Clone()
というふうに記述すると、
'Clone' は 'System.Windows.Forms.TextBox' のメンバではありません。
というエラーが出てしまうんです。

何か他に記述しなければならないコードなどがあるのでしょうか?

お礼日時:2008/08/11 12:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報