2013-09-26 2 views
2

C# .NET Windows 응용 프로그램은 이름이없고 테두리가없는 여러 폼을 동적으로 만듭니다. 그러나이 양식을 찾아 최상위로 설정해야합니다. 양식. 내 현재 논리는 생성 당시 문자열에 myForm.Handle을 작성하여 나중에 해당 핸들을 참조 할 수 있도록하는 것입니다.창 핸들에서 양식으로 캐스팅

그리고이 최상위 창으로 설정할 준비가 때, 실패 곳이며, 나는이 작업을 수행 :

sFormHandle는 문자열이며, 그것은 을 IntPtr를 기대
Form myForm = Form.FromHandle(sFormHandle); 
if (myForm != null) { myForm.TopMost = true; } 

, 어떻게 변환 할 수 있습니까? 아니면 다른 방법으로 어떻게 할 수 있습니까?

감사합니다.

+0

예외가 발생하고 있습니까? 그렇다면 예외는 무엇입니까? 캐스팅하지 못하는 것에 대해 뭔가요? – Brian

+3

이렇게하지 않으면 TopMost 속성을 true로 설정하면 핸들 값이 * 변경됩니다. 문자열이나 IntPtr을 저장하는 대신 Form에 대한 참조를 대신 저장하십시오. –

+0

핸들이 변경되었다는 사실을 모르고 있었고 이제 목록에 양식을 추가하고 나중에 트릭을 수행했습니다. 감사. –

답변

4

폼의 핸들 속성은 IntPtr입니다. 왜 문자열로 저장 했습니까?

여기 해결책은 문자열이 아닌 IntPtr로 핸들을 저장하는 것입니다. 이것보다 좋은 경우 .net windows forms code가 있는데, 은 핸들이 아닌이라는 형식으로의 참조를 유지해야하는 이유는 무엇입니까?

편집 : 추가 강조. 공동체의 합의는 양식에 대한 언급이 유지되어야하고 손잡이에 의존해서는 안되는 것으로 보인다.

+0

"폼에 대한 참조"강조 ... 핸들을 변경할 수 있습니다. – DonBoitnott

+0

예, 원래는 '해결책'에 대해 인용구를 사용했지만 너무 애처로운 생각이었습니다. @DonBoitnott와 완전히 동의하지만, 여기서 폼에 대한 참조보다 핸들을 사용할 좋은 이유는 없습니다. –

+0

나는 핸들이 폼을 찾는 가장 안전한 방법이라고 믿었습니다. 이제 양식을 목록에 추가하려고합니다 "

formInstances = new List ();" 필요한 경우이를 참조하십시오. 머리를 가져 주셔서 감사합니다. –

0

폼 fr = (Form) Form.FromHandle (new IntPtr (int.Parse ("0"))));

및 클래스에 직접에 refrence 조심 ... 은 당신 때문에 당신이 클래스에 직접에 refrence를 사용하는 경우, 클래스가 모든 refrences까지 언로드되지 않습니다 COM 클래스 모델의 더 나은 시도의 WeakRefrence가 제거됩니다!

관련 문제