2011-08-13 4 views
3

현재 약 10 제어 이벤트 핸들러 내 프로그램에서이 코드를 가지고 : 조건이 충족 될 때까지 컨트롤을 비활성화하는 방법?

 if (!mapLoaded) 
      return; 

내가 참으로 mapLoaded 세트 파일 열기 대화 상자를 통해지도를로드

. 이 작업을 수행하는 또 다른 방법은 시작 및 모든 컨트롤을 사용하도록 맵을로드 한 후 모든 컨트롤을 비활성화하는 것입니다. 불행하게도 30 개 + 컨트롤이 있으며이 중 30 라인입니다 ..

a.Enabled = true; 
b.Enabled = true; 
c.Enabled = true; 

정말 this.Controls 통해 foreach 루프를 할 수없는 하나의 컨트롤 중 일부는 menustrip 항목의 ToolStrip 항목, 패널 항목이기 때문에 , 스크롤바, 스플리터 (splitter) 등을 포함하고 루프는 그것을 다루지 않습니다.

하나의 간단한 루프에서 모든 컨트롤의 enabled 속성을 true로 설정할 수있는 방법이 있지만 이상적인 방법은 아닙니다. 어떤 아이디어 그래서? 바인딩

답변

7

사용 데이터 : 값이 변경되면 관찰자 통지 속성에

  1. 변경 mapLoaded ...

    public bool MapLoaded 
    { 
        get 
        { 
         return mapLoaded; 
        } 
        set 
        { 
         if (value != mapLoaded) 
         { 
          mapLoaded = value; 
          MapLoadedChanged(this, EventArgs.Empty); 
         } 
        } 
    } 
    private bool mapLoaded; 
    
    public event EventHandler MapLoadedChanged = delegate {}; 
    //^or implement INotifyPropertyChanged instead 
    
  2. 에 컨트롤 'Enabled 속성을 데이터 바인딩 MapLoaded. Windows Forms 디자이너를 사용하거나 코드를 사용하여 데이터 바인딩을 설정할 수 있습니다. 바로 InitializeComponent(); 후 :

    당신의 개방 전략 변경에 대한 하나가로드 될 때까지의 사용자가지도하고, 단순히 기본 폼을로드 할 수 없습니다를로드 할 새 양식을 가지고 어떻게
    a.DataBindings.Add("Enabled", this, "MapLoaded"); 
    b.DataBindings.Add("Enabled", this, "MapLoaded"); 
    c.DataBindings.Add("Enabled", this, "MapLoaded"); 
    
+0

이것은 내가 찾고있는 것입니다. 시도해 볼게. 감사! –

+0

Windows Forms 디자이너를 사용하여 데이터 바인딩을 설정할 수 있다고 말했습니까? 그 옵션은 어디에 있습니까? 컨트롤을 선택할 때 Bindings 또는 DataBindings 속성이 속성 창에 나열되지 않습니다. –

+0

@ 존,이 작업은 대개 VS2010에서 네 단계로 진행됩니다. ** 1. ** 새 개체 데이터 소스를 프로젝트에 추가합니다. 이 경우'Form' 클래스 자체를 데이터 소스로 추가합니다. * Add Data Source * 마법사에서'Form' 클래스가 보이도록 프로젝트를 먼저 컴파일해야 할 수도 있습니다. ** 2. ** Form에 BindingSource 컴포넌트를 추가하고 폼의 객체 데이터 소스를 선택하십시오. ** 3. ** Form의 생성자에서'formBindingSource.DataSource = this;'를 설정하십시오. ** 4. ** 데이터 바인딩을 정의하려면 모든 컨트롤의 * Properties *에서 * Advanced Bindings * 마법사를 사용하십시오. – stakx

2

?

+0

이것은 괜찮은 제안이지만 stakx의 솔루션을 선호합니다. 그럼에도 불구하고 upvoted. –

관련 문제