변수를 사용하여 Visual Basic에서 사용할 PictureBox를 제어 할 수있는 방법이 있습니까?변수를 사용하여 내가 사용중인 PictureBox를 제어 할 수 있습니까?
즉 :
CurrentNumber = 1
PictureBox(CurrentNumber).backcolour = backcolour
변수를 사용하여 Visual Basic에서 사용할 PictureBox를 제어 할 수있는 방법이 있습니까?변수를 사용하여 내가 사용중인 PictureBox를 제어 할 수 있습니까?
즉 :
CurrentNumber = 1
PictureBox(CurrentNumber).backcolour = backcolour
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.Controls
에
OfType()
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
을 반환합니다.
체크 아웃에 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
을 만들어야합니다. 다른 입력을 기반으로 생성하는 경우 런타임에 숫자가 변경되면 배열을 사용하십시오.
실제로 수행해야 할 작업은 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
, 귀하의 질문에 대한 더 자세한주십시오 당신이 사용하는 언어를 지정처럼, 즉 더 컨텍스트를 제공 여기
당신이 필요로하는 코드이다 질문. –추가 된 컨텍스트 - 저는 visual basic을 사용하고 있습니다. –