2017-11-19 10 views
0

변수를 사용하여 Visual Basic에서 사용할 PictureBox를 제어 할 수있는 방법이 있습니까?변수를 사용하여 내가 사용중인 PictureBox를 제어 할 수 있습니까?

즉 :

CurrentNumber = 1  
PictureBox(CurrentNumber).backcolour = backcolour 
+0

, 귀하의 질문에 대한 더 자세한주십시오 당신이 사용하는 언어를 지정처럼, 즉 더 컨텍스트를 제공 여기

당신이 필요로하는 코드이다 질문. –

+0

추가 된 컨텍스트 - 저는 visual basic을 사용하고 있습니다. –

답변

1

Me.Controls(String) 인덱서를 사용할 수 있습니다. 액세스 할 컨트롤의 이름 (문자열)을 지정할 수 있으므로 문자열 "PictureBox"를 숫자로 연결하여 그림 상자에 동적으로 액세스 할 수 있습니다. 대안

Dim TargetPictureBox As PictureBox = TryCast(Me.Controls("PictureBox" & CurrentNumber), PictureBox) 

'Verifying that the control exists and that it was indeed a PictureBox. 
If TargetPictureBox IsNot Nothing Then 
    TargetPictureBox.BackColor = Color.Red 
End If 

는 컨트롤의 이름으로 분류 배열의 결과를 저장하면 Me.ControlsOfType() extension를 호출 할 수있는 전체 제어 컬렉션을 반복 할 때마다 피함으로써 프로세싱 파워를 절약한다. 그렇게하면 컨트롤 컬렉션을 한 번만 반복하면됩니다.

'Class level - outside any methods (subs or functions). 
Dim PictureBoxes As PictureBox() = Nothing 

'Doesn't necessarily have to be done in a button, it's just an example. 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    If PictureBoxes Is Nothing Then 
     PictureBoxes = Me.Controls.OfType(Of PictureBox).OrderBy(Function(p As PictureBox) p.Name).ToArray() 
    End If 

    'NOTE: CurrentNumber - 1 is necessary when using an array! 
    PictureBoxes(CurrentNumber - 1).BackColor = Color.Red 
End Sub 

참고 :이 솔루션은 갑자기 숫자 ("PictureBox3", "PictureBox5"를 건너 뛰면 모든 그림 상자가 등 "PictureBox1", "PictureBox2"라는 이름의 경우 제대로 작동 " PictureBox6 ") 의 경우 PictureBoxes(CurrentNumber - 1)PictureBox5 대신 PictureBox6을 반환합니다.

0

체크 아웃에 PictureBox 클래스의 API docs은 몇 가지 예들이있다.

VB에 대해서는 거의 알지 못했지만, 생성자 New PictureBox은 변수로 추적 할 수있는 PictureBox 클래스의 인스턴스를 반환합니다.

그래서

Dim my_pic_box = New PictureBox 
my_pic_box.BackColor = some_background_color 

하지만 당신은 아마 PictureBox의 배열을 원하는, 그래서 뭔가 같은 같은 : 더 좋을 것이다 루프를 사용하여 배열의 경우

Dim picboxs(2) As PictureBox 
picboxes(0) = New PictureBox 
picboxes(0).BackColor = some_background_color 
picboxes(1) = New PictureBox 
picboxes(1).BackColor = some_background_color2 

. 이러한 개체를 사용하는 방법에 따라 다릅니다. 그것들이 UI의 일부분으로 라벨이 붙어 있다면 배열에 넣지 않고 각각 Dim을 만들어야합니다. 다른 입력을 기반으로 생성하는 경우 런타임에 숫자가 변경되면 배열을 사용하십시오.

1

실제로 수행해야 할 작업은 PictureBox()을 만들고이를 사용하여 색인을 통해 그림 상자를 참조하십시오.

배열을 만드는 가장 좋은 방법은 디자이너가 만든 참조에서 배열을 만드는 방법을 만드는 것입니다. 이렇게하면 디자이너를 계속 사용하여 컨트롤을 만들 수 있으며 디자인 타임에 삭제 된 컨트롤에 대한 코드 검사를 수행 할 수 있습니다. Me.Controls(...)을 사용하면 찾고있는 컨트롤이 삭제 된 경우 런타임 오류가 발생합니다.

Private _PictureBoxes As PictureBox() = Nothing 

Sub AssignPictureBoxesArray 
    _PictureBoxes = {PictureBox1, PictureBox2, PictureBox3} 
End Sub 

그런 다음이처럼 액세스 :

Sub SomeMethod 
    Dim CurrentNumber = 1 
    Dim PictureBox = _PictureBoxes(CurrentNumber - 1) 
    PictureBox.BackColor = System.Drawing.Color.Red 
End Sub