2014-02-06 2 views
0

연습을 위해 건물에 4 개의 엘리베이터와 40 개의 층이있는 VB 응용 프로그램을 작성합니다. 버튼을 누르면 엘리베이터가 도달 할 때까지 색상이 변경되기를 원합니다. 그 바닥.Visual Basic - 루프를 사용하여 버튼 색상을 변경하는 방법

현재 내가 수행 할 수있는 유일한 방법은 각 리프트에있는 대상 층 목록을 살펴보고 주어진 층이 포함되어 있는지 확인하는 하드 코딩을 다음과 같이 해당 색상을 변경하는 것입니다. 매우 간단한 작업을 수행하는 160 번 필수적 960 개 라인 - 이것이 내가 4 개 엘리베이터의 각각의 각 버튼 (총 40)을 위해 그것을 할 것입니다으로

' button 1 
     If elevator1.goingUpList.Contains(1) Or elevator1.goingDownList.Contains(1) Then 
      lift1Button1.BackColor = Color.LightGoldenrodYellow 
     ElseIf (elevator1.goingUpList.Contains(1) = False) Or (elevator1.goingDownList.Contains(1) = False) Then 
      lift1Button1.BackColor = DefaultBackColor 
     End If 

문제입니다. 더 쉬운 방법일까요?

목록에있는 각 층을 검색하는 것이 더 쉬운 해결책이 될 수있는 엘리베이터 목록을 통과하는 루프를 생각하고있었습니다. 그러나 해당 버튼을 어떻게 색을 바꿀 수 있습니까?

+0

시작이다. 컨트롤 ID를 하드 코딩하거나 컨트롤을 루프 할 수있는 배열로 하드 코딩하지 않고도 각 단추에 프로그래밍 방식으로 액세스 할 수 있습니다. 일단 그렇게하면 가능성이 열리게됩니다. – ps2goat

+0

40 개의 엘리베이터 버튼은 공통된 절차를 공유하거나 버튼에서 Elevator, ElevatorUp 및 ElevatorDown과 같은 1 또는 2 절차를 호출 할 수 있습니다. 또는 모두 – Plutonix

+0

문제를 3 층과 3 개의 엘리베이터로 줄입니다. 이를 해결하고 5 층과 4 대의 엘리베이터로 증가하십시오. 아직도 작동하는지 확인하십시오. 그렇지 않은 경우 조정하십시오. 패턴을 확인하고 40 층으로 대체하면 완료됩니다. – Neolisk

답변

1

예, 버튼에 대해 For Each 루프를 사용할 수 있습니다. Windows Forms에는 ControlsCollection 속성이 있습니다. , GroupBox 또는 기타 컨테이너를 사용하지 않는 한 Button, LabelTextBox과 같은 모든 컨트롤이 ContorlsCollection에 추가됩니다.

For Each 루프를 Me.Controls에 사용하면 모든 유형의 제어가 진행됩니다. 따라서 TypeOf 연산자를 사용하여 컨트롤 유형을 확인해야합니다.

양식에 "엘리베이터 버튼"대신 다른 버튼이있는 경우 Tag "엘리베이터 버튼"의 속성을 "1"또는 엘리베이터 번호로 설정해야합니다. 여기

동적으로 인터페이스를 생성하여 샘플 코드를

Dim ctl As Object 
Dim elevatorNumber As String 
Dim buttonNumber As String 

For Each ctl In Me.Controls 
    If TypeOf ctl Is Button Then 
     elevatorNumber = ctl.Tag 
     buttonNumber = ctl.Text 

     If elevatorNumber = "1" Then 
      If elevator1.goingUpList.Contains(buttonNumber) Or elevator1.goingDownList.Contains(buttonNumber) Then 
       ctl.BackColor = Color.LightGoldenrodYellow 
      ElseIf (elevator1.goingUpList.Contains(buttonNumber) = False) Or (elevator1.goingDownList.Contains(buttonNumber) = False) Then 
       ctl.BackColor = DefaultBackColor 
      End If 
     End If 

    End If 
Next 
관련 문제