2011-06-14 7 views
0

안녕하세요, 저는 적어도 저에게 어떤 방식 으로든 머리를 쓰는 사람을 잘 보았습니다. 문자열을 사용하여 양식을 여는 방법을 찾아야합니다. 나는 이것을 가지고있다 ...문자열을 사용하여 폼을 닫는 방법

Dim asm = System.Reflection.Assembly.GetExecutingAssembly 
    Dim myTypes As Type() = asm.GetTypes() 
    Dim frm As Form 
    For Each t As Type In myTypes 
     If t.IsSubclassOf(GetType(System.Windows.Forms.Form)) AndAlso Me.Label4.Text = t.Name Then 
      frm = CType(Activator.CreateInstance(t), Form) 
      frm.Close()     
      frm.Hide() 
     End If 
    Next 

그러나 그것은 프로그램을 닫지 않거나 심지어 그것을 숨기지 않는다 나는 단서가 없다?

질문 : 사전에

감사합니다 "나는 문자열로 양식을 여는 방법을 찾아야합니다."

+0

당신은 무엇을하려하고 있습니까? 왜 반사를 사용합니까? – rerun

+0

글쎄요, 구글을 가지고 있고 그것을 찾을 수있는 최고의 것이 었나요? – Ryan

+1

나는 당신이하려고하는 것을보고 왜 그것이 효과가 없는지를 압니다. frm.Close()는 실제로 열려있는 폼이 아닌 폼 유형의 인스턴스에서 호출합니다. 위의 코드와 동일한 응용 프로그램에서 닫으려고하는 양식이 실행 중입니까? – Smudge202

답변

1

그 형식의 새 양식 인스턴스를 만든 다음 닫거나 숨기려고했지만 내 모습이 보이지 않습니다.

기존 양식을 닫으려고하면 Activator.CreateInstance를 사용하여 새 인스턴스를 만들고 싶지 않습니다. 오히려 이미 열려있는 양식의 기존 인스턴스를 찾아 특정 인스턴스를 닫아야합니다.

0

게시 한 코드는 양식 이름을 기준으로 양식의 새 인스턴스를 만든 다음 양식을 닫거나 숨 깁니다.

하지만 난 당신 이름으로 열린 새로운 형태로 원한다고 생각 :

(

For Each f As Form In My.Application.OpenForms 
    If f Is My.Forms.NameOfFormThatIWantToClose Then f.Close() 
Exit For 

당신이 이름으로 이미 열려있는 양식을 닫습니다 원한다면, 내가 할 것이다). 그렇다면 리플렉션을 사용해야합니다. This page 정확히 원하는대로 할 것 같습니다.

+0

Na 저는 문자열이있는 열린 양식을 닫을 문자열을 알고 싶습니다. 내가 10 개의 양식을 말하면 하나를 클릭하면 내 기본 양식에 문자열을 설정하고 다른 하나를 닫으면 이전에 클릭 한 하나를 닫습니다. – Ryan