2012-02-08 28 views
0

私は私のメインフォームで表示するいくつかのユーザーコントロールがあります。私は、現在表示されたフォームだか分からないので、ユーザーコントロール非表示と表示

Sub Show_Control1() 
UserControl1.Show 
'CODE TO HIDE EVERY OTHER DISPLAYED USER CONTROL ON THE MAIN FORM 
End sub 

は、今私は、それらを非表示にして一つ一つを非表示にすることがあります。

それでは、ここで私が欲しいものだとしましょう。

+0

あなたは何をしたいですか? –

+0

タイトルに「Visual Basic.NET - 」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

ありがとう、私はしません! – Devfly

答えて

0

私はあなたの状況をWindows Formsアプリケーション(.NET 4)で試してみましたが、以下のように動作しました。 GetType(T1) Is GetType(T2)を使用してのあなたの方法が機能しない理由私はよく分からないが、あなたの代わりにこれを使用することができます(これは、継承を考慮していないように多分それは、異なる意味を持っている):

Sub Show1() 
    For Each ctrl As Control In Controls 
     If TypeOf ctrl Is UserControl Then 
      ctrl.Hide() 
     End If 
    Next 
    UserControl11.Show() 
End Sub 

更新:

MSDNを調べて、コードが機能しない理由を確認しました。まず、TypeOf .. Is演算子は、オブジェクトの型が他の型と互換性があるかどうかを調べるために使用される演算子です。ここで彼らは(リンク:TypeOf keyword)でのMSDNの記事は何だと言う:

TypeOf関数キーワードは、オブジェクトが由来する、またはそのようなインタフェースなどの特定のタイプを実装しているかどうかをテストする比較句を紹介します。

ただし、Isキーワードを使用しています(オブジェクトが特定の種類のものかどうかを確認するためにはC#とは非常に異なります)。 "Is"キーワードは、2つの参照が同じオブジェクトを参照しているかどうかをチェックするために使用されます。

[Is] 2つのオブジェクト参照変数を比較しています(リンク:Is keyword)。

だから私は正しく、あなたの意図とは異なるセマンティクスの演算子を使用しています。私はめったにVB .NETコードを書くことはほとんどありません。いい質問。

+0

ありがとう、これは実際に動作します! – Devfly

0

は、この試してみて:

Sub Show_Control1() 
For Each cont In Me.Controls 
    cont.Hide 
Next cont 
UserControl1.Show 
End sub 

は、これは基本的にすべてのコントロールを非表示にし、その後、あなたがしたいだけのいずれかが表示されます。表示されないように各コントロールをチェックするよりも簡単で簡単です。

+0

まさに私が欲しいものですが、私はたくさんのUser Controlを持っています。しかし、 "gettype is usercontrol"では動作しません。 "gettype is USERCONTROLNAME"で動作します。 – Devfly

+0

あなたはそれが何を意味するか分かりません。少し説明できますか? –

+0

私は2つのユーザーコントロール - TestUserControlとユーザーコントロール1を持っています。私はコードがすべてを隠しているので、 "ctrl.GetType()GetType(UserControl)"を使用してユーザーコントロールフォームのみを非表示にします。しかし、私はちょうど "ctrl.GetType()GetType(UserControl)"と入力することはできませんし、それらをすべて非表示、私はTxtBoxesと同様。私は "ctrl.GetType()はGetType(UserControlNAME)です"と書かなければならないので、同じです! – Devfly

関連する問題