2015-01-27 3 views
1

아래 코드를 사용하여 화면 상단에 모든 양식 위에 팝업 폼을 표시하지만 초점을 훔치지는 않습니다.응용 프로그램 openforms에 양식이 닫히지 않습니다.

이 잘 작동하지만 지금은, 형태 자체는 내가이 일을 가야합니까 어떻게 Application.OpenForms

에 표시 나던 폼을 닫해야합니까?

설치 및 형태를 형태

private const int SW_SHOWNOACTIVATE = 4; 
private const int HWND_TOPMOST = -1; 
private const uint SWP_NOACTIVATE = 0x0010; 

[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
static extern bool SetWindowPos(
    int hWnd,    // Window handle 
    int hWndInsertAfter, // Placement-order handle 
    int X,    // Horizontal position 
    int Y,    // Vertical position 
    int cx,    // Width 
    int cy,    // Height 
    uint uFlags);   // Window positioning flags 

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

public void ShowInactiveTopmost() 
{ 
    ShowWindow(Handle, SW_SHOWNOACTIVATE); 
    SetWindowPos(Handle.ToInt32(), HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE); 

} 

답변

4

예에 초점을 방지하기 위해

frmClientCall frm = new frmClientCall {StartPosition = FormStartPosition.Manual, Text = "Phone Call"}; 
frm.Location = new System.Drawing.Point(
    Screen.PrimaryScreen.WorkingArea.Width - frm.Width, 
    Screen.PrimaryScreen.WorkingArea.Height - frm.Height - 202 
); 
frm.lblClient.Text = URI; 
frm.ShowInactiveTopmost(); 

코드를 열고,이 유일한 사고가 아닙니다. 예를 들어, 폼의 Load 이벤트가 결코 발생하지 않는 것을 볼 수도 있습니다. 기본 문제는 일반 논리를 우회하는 것입니다. Winforms는 기본 창을 느리게 생성하기 때문에 Winforms에서 꽤 큰 거래입니다. 귀하의 경우에는 핸들 속성을 사용할 때 발생합니다. I Visible 속성이 실제로 으로 설정되지 않았다는 근본적인 문제가 있다고 생각합니다. 이것이 진정한 공 굴림입니다.

음,이 방법으로하지 마십시오. Winforms는 이미 활성화하지 않고 창 표시를 지원합니다. 붙여 넣기가 최상위 중 하나를 필요가 없습니다 있도록이 코드

protected override bool ShowWithoutActivation { 
     get { return true; } 
    } 

을 SetWindowPos() PInvoke를 : 당신이 활성화하지 않고 표시 할 형태로이 코드를 붙여 이에 대한

protected override CreateParams CreateParams { 
     get { 
      var cp = base.CreateParams; 
      cp.ExStyle |= 8; // Turn on WS_EX_TOPMOST 
      return cp; 
     } 
    } 
+0

감사합니다, 테스트 양식이 효과가있는 것처럼 보입니다. 전화 시스템 구현으로 토스트 양식을 테스트하여 이벤트 발생시 양식이 닫히는 지 확인한 다음 정답으로 표시해야합니다. – Neo