2016-05-30 26 views
0

Visual BasicでPictureBoxをクリックしてファイルを開くプログラムを作成しましたが、その結果、36個のピクチャボックスが表示されてしまいました。私は、ピクチャ(Nº) を参照するために発見した唯一の方法は
Dim pictureBoxes(35) As PictureBox同じ名前のVisual Basicハンドルと複数の変数

と、次のようにそれぞれ1を設定を作っていたとして、それらの一つ一つを扱う:

pictureBoxes(0) = PictureBox1 
pictureBoxes(1) = PictureBox2 
pictureBoxes(2) = PictureBox3 
... 
pictureBoxes(35) = PictureBox36 

その後、私はそれを使用することができますForループ内:

PictureBoxes(i).Image = iconForFile.ToBitmap() 

私の質問は、そうするのではなく、参照を容易にする方法があるかどうかです。
同じことがちょっと私は、コードのハンドル部分に疑問作っている:

Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click, PictureBox2.Click, PictureBox3.Click, PictureBox4.Click, PictureBox5.Click, PictureBox6.Click, PictureBox7.Click, PictureBox8.Click, PictureBox9.Click, PictureBox10.Click, PictureBox11.Click, PictureBox12.Click, PictureBox13.Click... 

どれでも光は非常に参考になる、ありがとう!

+0

ループ内ですべてを使用し、同じ方法でループを使用して値を設定できます。次に、同じループ内でもイベントハンドルを宣言します。 – ib11

+0

Handlesキーワードは、デザイナーには最適です。コードでは、AddHandlerステートメントを使用します。これは、すべてのpbsに同じイベントハンドラを与えることを自明にします。Forループだけです。 –

+0

@ HansPassant、それぞれを個別に使用するかどうかは、どのピクチャボックスが選択されたかを正確に見ることでした。イベントハンドラがforループによって設定されている場合、このように設定されたすべてのピクチャボックスに対して同じ結果が得られるでしょう。 –

答えて

1

コントロールがフォーム上でどのように構造化されているのか分かりませんが、同じコレクション、Flowpanelの一部である場合は、特定のタイプのコントロールをすべて取得できます。あなたのケースでは、個々のボックスにアクセスできるようにしたいので、これを一度実行して、すでに行っているようにボックスをリストに保存することができます。

Dim pictureBoxes = FlowLayoutPanel.Controls.OfType(Of PictureBox)().Tolist() 
For Each picture in pictureBoxes 
    AddHandler picture.Click, AddressOf PictureBox_Click 
Next 
+0

'ToList'が必要だと思いますが、それでも動作します。 –

+0

これは本当に非常に有用です、ありがとう!ちょっと単純な質問ですが、追加した各ピクチャボックスをどのように参照しますか? –

+0

あなたはまだそれらをインデックスで参照しなければならないでしょう、または、それらが適切な一意の名前を持っているならば、 '.Find()'を使用する必要があります: 'Dim selectedBox = pictureBoxes.Find(Function(p)p.Name =" MyComputerPictureBox ")' –

関連する問題