2012-01-06 2 views
3

시스템 트레이에 아이콘이 있지만 시작부터 메인 폼이 보이지 않고 프로그램을 실행하고 싶습니다.mainform을 숨기고 프로그램을 실행하는 방법은 무엇입니까?

편집 :

lMainForm := new MainForm; 
    lMainForm.ShowInTaskbar := true; 
    Application.Run(lMainForm); 

작동하지 않았다. Application.Run이 실행 되 자마자 mainform이 시스템 트레이의 아이콘과 함께 표시됩니다.

+0

'시스템 트레이'란 알림 영역을 의미합니까? 그 (IIRC 이름)에 대한 NotificationIcon 항목을 만들어 "숨겨진"양식과 연결하고 컨텍스트 메뉴/클릭 핸들러를 사용하여 프로그램과 상호 작용할 수 있도록해야합니다. –

답변

2

당신이 지금 가지고있는 문제는 매개 변수로 기본 폼을 취하는 Application.Run 오버로드를 호출하는 것입니다. 그러면 원하지 않는 양식이 표시됩니다.

대신 Application.Run 오버로드 중 하나를 호출해야합니다.

예를 들어 no parameter overload of Application.Run으로 전화 할 수 있습니다. 그렇게하기 전에 알림 아이콘을 만들고 설치했는지 확인하십시오. 또한 작성하지만 기본 양식을 표시하지 마십시오.

기본 양식을 표시 할 준비가되면 알림 아이콘에 대한 조치에 대한 응답으로 lMainForm.Show으로 전화하십시오. 양식의 닫기 버튼을 클릭하면 단순히 양식을 닫지 않고 단순히 숨길 수 있습니다. 주 양식 인스턴스가 백그라운드에서 숨겨진 상태로 유지되기를 원한다고 가정합니다.

그래서 프로그램의 최상위은 다음과 같이 보일 것이다 :

//create and show the notify icon here 
lMainForm := new MainForm; 
lMainForm.ShowInTaskbar := true; 
lMainForm.Visible := false;//I believe this is the default in any case 
Application.Run; 

당신은 응용 프로그램을 종료 알림 아이콘 메뉴에 항목을 추가해야합니다. 당신은 당신이 ApplicationContext받는 Application.Run overload를 사용하여 더 나을 수 있습니다 응용 프로그램 수명 기간 동안 더 세밀한 제어가 필요한 경우

Application.Exit; 

: 이것을 구현합니다.

필자는 프리즘을 가지고 있지 않으므로 C#/WinForms에서 이것을 확인해 보았습니다. 프리즘에 잘 전달되기를 바랍니다!

+0

@ David - 완벽하게 작동합니다. 도와 줘서 고마워. – ThN

1

은 당신이 봤어 :

lMainForm.WindowState := System.Windows.Forms.FormWindowState.Minimized; 

또는

lMainForm.Hide(); // call on application start 
+0

최소화는 좋지 않습니다. 작업 표시 줄에서 꺼내려면 Visible을 False로 설정해야합니다. –

+0

@ David, Visible을 false로 설정하고 mainform이 계속 표시되거나 표시됩니다. 작업 표시 줄에 메인 폼을 표시하거나 시스템 트레이에 아이콘이 표시되는 것을 원하지는 않습니다. BTW, 당신의 아바타는 매우 우스운 롤입니다. – ThN

3

SetVisibleCore() 메서드를 재정의하면됩니다. 이렇게 :

protected override void SetVisibleCore(bool value) { 
     if (!this.IsHandleCreated) { 
      CreateHandle(); 
      value = false; 
     } 
     base.SetVisibleCore(value); 
    } 

로드 이벤트가 발생하지 않도록주의하십시오. 거기에있는 모든 코드를 생성자 (선호) 또는이 재정의로 이동하십시오.

이 코드는 창을 한 번만 표시합니다. Show()를 호출하거나 나중에 Visible = true로 설정하면 창이 정상적으로 나타나게 할 수 있습니다. 일반적으로 NotifyIcon에 대한 컨텍스트 메뉴 항목의 Click 이벤트 처리기에서 그렇게합니다.