2014-01-15 2 views
0

아래 내 실패 코드 :최소화 된 창은 시스템 트레이에 형성

내가 최소화를 클릭
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Resize(object sender, EventArgs e) 
    { 
     if (WindowState == FormWindowState.Minimized) 
     {                      
      Hide(); 
     } 
    } 

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     Show(); 
     WindowState = FormWindowState.Normal; 
    } 

} 

, 그것은 여전히 ​​내 작업 표시 줄에 표시됩니다. 뭐가 잘못 됐는지 알아?

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

클래스가 자체 이벤트를 수신하도록하는 코드를 작성하지 마십시오. 이벤트는 다른 클래스의 * 다른 * 코드에 폼에 어떤 일이 일어나는지 말해주기위한 것입니다. 대신 OnResize()를 재정의하면 그 방법으로 이벤트를 구독하는 것을 잊을 수 없습니다. 틀림없이 당신이하는 것을 잊어 버리지 않은 것이 분명합니다. –

답변

0

사용 ShowInTaskbar 속성은 작업 표시 줄에서 양식을 제거하려면 :

private void MainForm_Resize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized)   
     ShowInTaskbar = false;   
} 

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    ShowInTaskbar = true; 
    WindowState = FormWindowState.Normal; 
} 
+0

코드가 작동하지 않습니다. 여전히 작업 표시 줄에 나타납니다. – Coolguy

+0

Windows 7에서 Microsoft Visual Studio 2008을 사용하고 있습니다. 내 문제와 관련이 있습니까? – Coolguy

+0

MainForm_Resize에 중단 점을 넣으려고했으나 멈추지 않았습니다. MainForm_Resize 이벤트에 들어간 것처럼 보입니다. – Coolguy

0

감사에 : 나는 base.WndProc를 호출하고 메시지를 처리하는 순서를 변경 http://developerpr.wordpress.com/2012/02/06/c-handle-minimize-maximize-restore-in-windows-forms-before-it-happens/

protected override void WndProc(ref Message m) 
{ 
    base.WndProc(ref m); 

    var msg = '\x112'; 
    const int minimize = '\xf020'; 
    const int maximize = '\xf030'; 
    const int restore = '\xf120'; 

    if (m.Msg == msg) 
    { 
     Console.WriteLine(m.ToString()); 
     var param = m.WParam.ToInt32(); 
     switch (param) 
     { 
      case minimize: 
       // handle minimize    
       ShowInTaskbar = false; 
       break; 
      case maximize: 
       // handle maximize    
       break; 
      case restore: 
       // handle restore  
       ShowInTaskbar = true; 
       break; 
     } 
    } 
} 

참고. 그렇지 않으면 첫 번째 클릭시 최소화가 취소됩니다.

0

무엇이 잘못되었는지 알아 냈습니다. Form1.Designer.cs 파일에 이벤트 처리기 선언이 없습니다. 내가 Form1에 아래에 아래에 추가 한 및 작동 :

this.Resize += new System.EventHandler(this.Form1_Resize); 
0

시도하십시오

this.ShowInTaskbar = 거짓;

및 show()

this.ShowInTaskbar = true;

관련 문제