2014-06-17 3 views
0

ToolStrip에 ToolStripComboBox가있는 경우 내 응용 프로그램이 트레이로 최소화되고 ShowInTaskBar가 false로 설정됩니다. 그 후에 신청서가 정상 상태로 되돌아갑니다. 이 순간부터 ToolStripComboBox는 어떤 이벤트도 발생시키지 않습니다.ToolStripComboBox 이벤트가 실행되지 않음

this.ShowInTaskbar = false; 
this.WindowState = FormWindowState.Minimized; 


this.ShowInTaskbar = true; 
this.WindowState = FormWindowState.Normal; 
this.Show(); 

어떻게이 이벤트를 다시 사용할 수 있습니까?

+0

이것은 .NET Framework Windows Forms의 버그입니다. 'ShowInTaskbar = false'를 설정하면 이벤트가 발생하지 않습니다. 우리는'ShowInTaskbar = true'를 설정 한 직후 Control 클래스의 내부 메소드를 호출함으로써 간단히 해결할 수 있습니다. MethodInfo dynMethod = toolStripComboBox1.ComboBox.GetType(). GetMethod ("RecreateHandleCore", BindingFlags.NonPublic | BindingFlags.Instance); dynMethod.Invoke (toolStripComboBox1.ComboBox, 새 개체 [] {}); 해당 이벤트가 올바르게 제기 된 후에 – puch4tek

답변

0

이것은 .NET Framework Windows Forms의 버그입니다. 설정 후 ShowInTaskbar = false 이벤트가 발생하지 않습니다.

우리는 ShowInTaskbar = true을 설정 한 직후 Control 클래스의 내부 메서드를 호출하여 간단히 해결할 수 있습니다.

MethodInfo dynMethod = toolStripComboBox1.ComboBox.GetType().GetMethod("RecreateHandleCore",BindingFlags.NonPublic | BindingFlags.Instance); 
dynMethod.Invoke(toolStripComboBox1.ComboBox, new object[] {}); 

그 이벤트가 적절하게 발생합니다.

다른 해결책 : 순서가 중요합니다!

this.Show() 
this.ShowInTaskbar = true; 
+0

왜 공개적으로 'RecreateHandle' 메서드를 호출 할 수 없습니까? –

+0

공개 메소드가 아니기 때문에 그것은 보호 된 방법입니다. – puch4tek