.net winforms에서 form_load 이벤트 직전 또는 직후에 구성 요소 코드를 실행 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/2265776

  •  20-09-2019
  •  | 
  •  

문제

내부 번역을 처리하는 다른 구성 요소와 충돌하는 구성 요소가 있습니다.

비즈니스 로직 구성 요소가 실행 된 다음 번역 시스템이 실행되어 현재 형태로 텍스트를 선택하고 번역하려고 시도합니다.

문제는 텍스트에 이제 숫자, 날짜, 데이터베이스 관련 텍스트 등이 포함되어 있다는 것입니다. 그러나 비즈니스 로직이 실행되기 전에 해당 컨트롤은 번역을 위해 준비된 더미 텍스트가 포함되어 있습니다.

양식에 삭제하는 구성 요소가 어떻게 양식의 수명에 특정 시간에 코드를 실행할 수 있는지 궁금합니다.

예를 들어, 비즈니스 로직 구성 요소에서 불쾌한 코드를 제거하여 건설시 아무것도하지 않도록 번역 작업을 수행하고, 메소드를 호출하면 해당 코드를 form_load에서 옮겼습니다.

그래서 나는 구성 요소에서 나에게 방법이 있는지 궁금합니다 (예 : 후손 요소, 시각적 컨트롤이 아닌), form_load 직전 또는 후에 코드를 실행하기 위해 또는 적어도 다른 모든 구성 요소와 컨트롤이 설정된 후?

구성 요소 내에서 다시 양식으로 링크가 아닌 것처럼 보이므로로드 이벤트에 연결하는 것도 불가능 해 보입니다.

아니면 내가 잘못된 나무를 짖고 있습니까?

도움이 되었습니까?

해결책

양식의로드 이벤트 핸들러에서 구성 요소의 메소드를 명시 적으로 호출함으로써 왜이를 해결할 수 없었는지 명확하지 않습니다.

구성 요소가 삭제 된 양식을 인식하는 것이 가능합니다. 디자이너는 구성 요소의 속성을 양식 인스턴스로 초기화하기 위해 동축 될 수 있습니다. 예를 들어 ErrorProvider가 사용하는 기술로서 양식의 오류 아이콘을 칠합니다. 그런 다음 구성 요소가 양식의로드 이벤트를 구독 할 수 있도록 확장 될 수 있습니다. 예는 다음과 같습니다.

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
  public partial class Component1 : Component {
    public Component1() {
      InitializeComponent();
    }
    public Component1(IContainer container) {
      container.Add(this);
      InitializeComponent();
    }

    [Browsable(false)]
    public ContainerControl Host {
      get { return mHost; }
      set {
        if (mHost == null && value as Form != null && !DesignMode) {
          (value as Form).Load += Initialize;
        }
        mHost = value;
      }
    }
    private ContainerControl mHost;

    public override ISite Site {
      set {
        base.Site = value;
        if (value != null) {
          // Assign Host at design time
          IDesignerHost service = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
          if (service != null) {
            IComponent rootComponent = service.RootComponent;
            this.Host = rootComponent as ContainerControl;
          }
        }
      }
    }
    private void Initialize(object sender, EventArgs e) {
      Console.WriteLine("initializing...");
    }
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top