既存ボタンを使用しコントロールを作成するには?【VB.Net】


RED-EYES  2007-01-16 02:54:15  No: 134848

いつも拝見させて頂いております

この度、VB.Netにおいて
既存のコントロールを使用し


RED-EYES  2007-01-16 03:01:49  No: 134849

誤って送信してしましました;

この度、VB.Netにおいて
既存のコントロールを使用し
複数のコントロールの複製を行いたいのですが
設定したい情報が全てに適用されてしまい困っています

以下コードです
---------------------------------------------------------------------
       Dim ctrlBtn As Windows.Forms.Button()

       ctrlBtn = New Button(9) {}

       For i = LBound(ctrlBtn) To UBound(ctrlBtn)
            ctrlBtn(i) = "既存のボタン"
            ctrlBtn(i).Name = "copyBtn" & i + 1
            ctrlBtn(i).Visible = True
            ctrlBtn(i).Left = ctrlBtn(i).Left  + 50 * i
            GroupBox.Controls.Add(ctrlBtn(i))
        Next

---------------------------------------------------------------------

このように記述したところLeftの位置及びコントロール名が
全ての配列に適用されてしましました。

ご教授よろしくお願いします


魔界の仮面弁士  2007-01-16 03:52:41  No: 134850

> Dim ctrlBtn As Windows.Forms.Button()
ctrlBtn は、Button 型の 1次元配列なのですよね。

> ctrlBtn(i) = "既存のボタン"
それなのに、(Buttonではなく)文字列を指定してはマズイのでは。

「ctrlBtn(i) = New Button()」のように、新たなボタンを必要数分だけ
作成し、それぞれに対して設定する必要がありますね。

もしも、新規にボタンを作成する仕様ではなく、既に画面上に貼っておいた
ボタンを指すようにしたいのであれば、ctrlBtn(0)、ctrlBtn(1)、ctrlBtn(2)、……の
それぞれに、異なるボタンを代入しているかどうかを確認してみてください。

もし、ctrlBtn(0) が指すボタンと ctrlBtn(1) が指すボタンが別物では無く、
同じ物を指しているのであれば、実体は1つだけなので、同じ設定が使われる
結果となるでしょう。

> ctrlBtn(i).Left = ctrlBtn(i).Left  + 50 * i
ここで、「現在の Left 座標を、50×i ドットだけ増加」させていますが、
では、元となる『現在の Left 座標』は、どこで定義してあるのですか?


RED-EYES  2007-01-16 18:53:04  No: 134851

ご回答ありがとうございます

>> Dim ctrlBtn As Windows.Forms.Button()
>ctrlBtn は、Button 型の 1次元配列なのですよね。
>
>> ctrlBtn(i) = "既存のボタン"
>それなのに、(Buttonではなく)文字列を指定してはマズイのでは。
すみません。説明の段階だったのでそう書かせてもらいました
実際にはフォーム上のボタンコントロール名をさしています
ctrlBtn(i) = Form1.Button1
です

>> ctrlBtn(i).Left = ctrlBtn(i).Left  + 50 * i
>ここで、「現在の Left 座標を、50×i ドットだけ増加」させていますが、
>では、元となる『現在の Left 座標』は、どこで定義してあるのですか?
現在のLeft座標はフォームに存在する既存のボタンのLeft座標としたいのですが
この書き方ではダメでしょうか?
ボタン配列に既存のボタンの情報をコピーしているので可能と考えているのですが

現在の現象としてはLeft座標を設定している部分
ctrlBtn(i).Left = ctrlBtn(i).Left  + 50 * i
を通ると全てのコントロール配列の座標が変化してしまう状態です
ctrlBtn(0).Left = 0 
ctrlBtn(1).Left = 50 
ctrlBtn(2).Left = 100
といった感じにしたいのですが

ctrlBtn(0).Left = 100 
ctrlBtn(1).Left = 100 
ctrlBtn(2).Left = 100
になってしまいます

引き続き、ご教授お願いします。


魔界の仮面弁士  2007-01-16 20:03:42  No: 134852

> ctrlBtn(i) = Form1.Button1
これでは無意味なのでは。

ctrlBtn(0) が指すものも、ctrlBtn(1) が指すものも、同じ Form1.Button1 なのですから、
影響を受けるコントロールは、Form1.Button1 一つだけですよね。

先の発言の繰り返しになってしまいますが、
  ctrlBtn(0) = Form1.Button1
  ctrlBtn(1) = Form1.Button2
などのように、それぞれに異なる既存ボタンを割り当てるか、もしくは、
  ctrlBtn(0) = New Button()
などとして、それぞれに新規に作成したボタンを割り当てるなどして、
ctrlBtn(i) のそれぞれが、別のボタンを指し示すようにしないと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加