いつも拝見させて頂いております
この度、VB.Netにおいて
既存のコントロールを使用し
誤って送信してしましました;
この度、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の位置及びコントロール名が
全ての配列に適用されてしましました。
ご教授よろしくお願いします
> 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 座標』は、どこで定義してあるのですか?
ご回答ありがとうございます
>> 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
になってしまいます
引き続き、ご教授お願いします。
> 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) のそれぞれが、別のボタンを指し示すようにしないと。
ツイート | ![]() |