폼을 활성화 하지 않고 표시
음 그러니까 메인폼에서 새로운 폼을 호출 하 되, 포커스는 메인폼에 유지하고 싶을 때를 말한다.
Utility Class
user32.dll 을 임포트하여 Win32API를 이용하는 유틸리티 클래스를 정의한다.
SetVisibleNoActivate 메소드에서 SetWindowPos Win32API를 호출한다. 윈도우 스타일로 SWP_NOACTIVATE 플래그를
지정함으로 구현하는 것 같다.
public static class UtilFuncs
{
[DllImport("user32.dll")]
extern public static bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
int x, int y, int cx, int cy, int uFlags);
public const int HWND_TOPMOST = -1; // 0xffff
public const int SWP_NOSIZE = 1; // 0x0001
public const int SWP_NOMOVE = 2; // 0x0002
public const int SWP_NOACTIVATE = 16; // 0x0010
public const int SWP_SHOWWINDOW = 64; // 0x0040
public static void ShowWindowTopMost(IntPtr handle)
{
SetWindowPos(handle, (IntPtr)HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE |
SWP_NOMOVE |
SWP_NOACTIVATE |
SWP_SHOWWINDOW );
}
public static void SetVisibleNoActivate(Control control, bool visible )
{
if (visible)
ShowWindowTopMost(control.Handle);
control.Visible = visible;
}
}
폼 비활성화 / 숨기기
위에서 정의한 클래스의 SetVisibleNoActivate 메소드를 호출한다.
폼을 활성화 하지않고 표시
- SetVisibleNoActivate(form, true);
폼을 숨김
- SetVisibleNoActivate(form, false);
private void btnCall_Click(object sender, EventArgs e)
{
Form2 obj = new Form2();
//obj.Show();
//UtilFuncs.SetVisibleNoActivate(obj, false);
UtilFuncs.SetVisibleNoActivate(obj, true);
}
참조 페이지 : MSDN - Windows Forms FAQ
'C# > 컨트롤' 카테고리의 다른 글
[Form] 상태바 없이 폼이동시키기 (0) | 2012.01.25 |
---|---|
[Form] 폼의 시스템 메뉴에 임의의 메뉴 추가하는법 (0) | 2012.01.10 |
[Radio] 라디오 버튼 포커스 (0) | 2012.01.10 |
[Form] WinForm 시작과 종료 이벤트 (0) | 2012.01.10 |
[Form] 타이틀바 잡지않고 폼이동 (0) | 2012.01.09 |
댓글