내 응용 프로그램은 VB6 실행 파일이지만 시스템의 일부 최신 양식은 C#으로 작성되었습니다. C# 양식의 소유자 속성을 주 응용 프로그램 창 핸들을 사용하여 설정하여 대화 상자가 내 응용 프로그램과 다른 응용 프로그램 사이를왔다 갔다 할 때 맨 위에 놓 이도록하고 싶습니다.hwnd/NativeWindow를 사용하여 WinForms 양식의 소유자를 설정하는 동작을 가져올 수 있습니까?
주 응용 프로그램 창의 hwnd를 가져올 수 있습니다. 내가 여기서 무엇을 할 수 있는지 잘 모르겠다.
UPDATE 17시 6분에서 10월 20일 '08 :
스콧, 응답에 대한
감사합니다. Show/ShowDialog 메서드 매개 변수가 Form 형식이 아니라는 점을 간과했습니다. Owner 속성에서만 찾고있었습니다.
위 코드에서 약간 수정했습니다. 우리는 일반적으로 Forms를로드하고 ShowDialog를 호출하는 구성 요소를 가지고 있습니다. 내 코드는 다음과 같습니다
private IWin32Window GetWindowFromHost(int hwnd)
{
IWin32Window window = null;
IntPtr handle = new IntPtr(hwnd);
try
{
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(handle);
window = nativeWindow;
}
finally
{
handle = IntPtr.Zero;
}
return window;
}
불행하게도 이것은 내가 기대했던 일을하지 않습니다 :
Form launchTarget = FormFactory.GetForm(xxx); // psuedo-code for generic form loader
launchTarget.StartPosition = FormStartPosition.CenterParent;
IWin32Window parentWindow = GetWindowFromHwnd(hwnd);
launchTarget.ShowDialog(parentWindow);
GetWindowFromHwnd
는 코드의 방법 포장 된 버전입니다. 양식은 모달로 표시되지만 올바른 위치에 표시되지 않으며 탭을 비운 후 부모 창으로 돌아 가면 여전히 위에 위치하지 않습니다. 모달은 작업 표시 줄에 작업을 표시하지 않으므로 Alt 키를 누른 상태에서도 Alt 키를 누르면 사라집니다. 저에게 저것은 나가 적당한 hwnd가 있지 않을지도 모르다는 것을 나타낸다. 다른 제안 사항이 있으면 회신 해주십시오. 다시 한번 감사드립니다.
16시 25분
한 후속 발언에서 UPDATE 11월 10일 '08 - 당신은 시도/마침내, 스콧의 두번째 게시물로 통화에 메서드 호출로를 고려하는 경우 finally 블록에 있어야합니다 :
그래서 당신은 당신은 아마 중 하나Show()
또는
ShowDialog()
을 사용하는 것을 의미 VB6에서 C# 윈도우 폼 클래스를 호출하는
parentWindow.ReleaseHandle();
Scott - 오랜 시간 지연되어 미안하지만, 다른 것들에 끌려갔습니다. 원래 제출 한 답변이 효과적입니다. Form.Owner를 설정하는 대신 ShowDialog를 통해 NativeWindow를 전달해야했습니다. 내 다른 문제는 첫 번째 장소에서 올바른 hWnd를 전달하지 않는 호출 코드입니다. 감사합니다 – mcw0933
FYI, 위의 두 문제 모두 해결할 수 있습니다 - centeredness 설정해야합니다 : "form.StartPosition = FormStartPosition.CenterParent"- toppyness 설정 : form.TopMost = true; - btw, ReleaseHandle()에 대한 정보 주셔서 감사합니다! :-) – BrainSlugs83