2009-03-19 4 views
0

Visual FoxPro (VFP)를 사용하여 이전에 수행 할 수 있었던 작업을 수행하려고합니다. "SETALL()"함수를 사용하여 현재 양식 ... this.SetAll ("someProperty", "toSomeNewValue")과 관련된 작업을 수행 할 수 있으며 모든 컨트롤에 값을 할당합니다. 내 맞춤 속성과 "_assign"을 통해 VFP 내부를 생성하면 이러한 이벤트가 트리거됩니다. 그 방법에서 각 컨트롤은 각 개별 컨트롤에 입력 한 내용을 기반으로 활성화/비활성화/가시성, 편집 가능, 읽기 전용, 색상, 글꼴, 유효성 검사 등의 양식에서 자체적으로 처리됩니다.값/속성의 변경에 대한 위임 제어

그래서 C#에서 비슷한 작업을 수행 할 수 있습니다. 예를 들어 공용 속성이나 메서드 또는 "FormEditMode"와 같은 폼 수준에서 대리인이 있어야합니다. 그럼, 내가 이런 식으로 할 때 .FormEditMode = AddMode, 모든 컨트롤은 스스로 on/off를 켜고, 주어진 폼의 모든 컨트롤에 대한 명시 적 호출 대신에 각각 활성화/비활성화하도록 트리거됩니다.

감사

답변

0

실제로 폼의 InitializeComponents() 호출이 끝날 때 각 컨트롤을 자체 등록하여 해결할 수있었습니다. 그리고 솔루션에 대한 내 연구에서 읽은 다른 요소의 조합도 있습니다.

InitializeComponents() 후에 텍스트 상자, 레이블 컨트롤 (및 기타)을 작성한 후에 양식의 각 컨트롤에 대해 재귀 호출을 수행하고 폼의 대리자/이벤트에 해당 메서드를 등록합니다. 그런 다음 폼의 편집 모드를 변경하는 호출 중에 대리자 호출을 호출하고 각 개별 컨트롤 함수를 트리거합니다. 그래서, 나는 대리자/이벤트 핸들링에 대한 더 나은 핸들을 얻었고, 이제는 재귀 호출을 얻는다. 이 작업은 한 번 앞에서 수행되므로 버튼을 클릭하는 동안 반복적으로 확인하고 호출 할 필요가 없습니다. 또는 뭔가 다른 작업을 수행 할 때마다 컨트롤을 순환하는 다른 조건이 필요합니다.

1

난 그냥 이런 식으로 뭔가 할 것 :

static void DoForEachControl(Control control, Action<Control> f) 
{ 
    control.Controls.ForEach<Control>(c => 
             { 
             f(c); 
             DoForEachControl(c, f); 
             }); 
} 
: 당신이 GroupBoxes 또는 컨트롤이 다른 컨트롤이있는 경우

this.Visible = false; 
Controls.ForEach<Control>(c => c.Visible = false); 

, 당신은 재귀 함수에 그것을 넣어 할 수 있습니다를

ForEach를 얻으려면 다음과 같은 것이 필요합니다.

public static class Extensions 
    { 
    public static void ForEach<T>(this IEnumerable source, Action<T> action) 
    { 
     foreach (var item in source) 
     { 
     action((T)item); 
     } 
    } 
    } 
관련 문제