2016-10-28 3 views
1

名前で見つけたコントロールにハンドラを追加したいと思います。 問題は、私は、例えば、次にボタンのような制御を暗くが、可能性が...ボタンやラジオボタンまたはこのようなものからコントロールを暗くすることができないというコードで文字列による調光とハンドラの追加

Dim control As Control = FindName(MyObject.Name.ToString) 
      AddHandler control.MouseEnter, Sub() 
               Try 
                Dim Tooltip As New ToolTip() 
                Tooltip.SetToolTip(control, control.Name.ToString) 
               Catch 

               End Try 

              End Sub 

ですRadioButtonsは機能しません。そして、私はいつものObjectTypeをチェックするコードを持っているし、その後であれば一部

If TypeName(MyObject).ToString = "Button" then 
... 
else if TypeName(MyObject).ToString = "Label" then 
... 
else if TypeName(MyObject).ToString = "RadioButton" then 
... 
End If 

ように、それをこのようにやってよりよい解決策はありますか?に行きたくありませんか

など。何かのように

Dim Control as TypeName(MyObject).ToString = FindName(MyObject.Name.ToString) 
+0

私はMyObject'が何であるかを '理解しようとしているとして、あなたが少しを拡大する必要があると思う。このようなものは、子コントロールを持つ_controlsリストに移入されます。あなたが宣言したものか、コントロールをループしているものですか? – Bugs

+0

私はコントロールをループして、子が残らなくなるまで子を取得します。次に、次の子に移動します。子ごとに、このハンドラを追加しようとします。 –

+0

コントロールを参照するだけでよいと思ってください。 MouseEnterはコントロールのためのかなり標準です。あなたのループ 'For Each ctr As Control'にコード' AddHandler ctr.MouseEnter'を置きます。子コントロールについても同じ操作を行います。あなたはすでにこれをやっているか、それに近いようです。より多くのコードを含める必要があります。 – Bugs

答えて

1

これはあなたの後ですか?

パネルなどの親オブジェクトをループしているが、コンセプトはうまくいく場合は、これを各子に展開する必要があります。

EDIT

これは、子供を持つ任意のコントロールのために働く必要があります。

フォーム/クラスのトップでこれを宣言します。

Private _controls As New List(Of Control) 

使用これはハンドラを追加します:

For Each ctr As Control In Me.Controls 
    AddHandler ctr.MouseEnter, Sub() 
            Try 
             Dim Tooltip As New ToolTip() 
             Tooltip.SetToolTip(ctr, ctr.Name.ToString) 
            Catch 

            End Try 
           End Sub 
    If ctr.HasChildren Then 
     _controls = New List(Of Control) 
     GetChildren(ctr) 
     For Each childCtr As Control In _controls 
      AddHandler childCtr.MouseEnter, Sub() 
               Try 
                Dim Tooltip As New ToolTip() 
                Tooltip.SetToolTip(childCtr, childCtr.Name.ToString) 
               Catch 

               End Try 
              End Sub 
     Next 
    End If 
Next 

Private Sub GetChildren(ByVal container As Control) 

    For Each childCtr As Control In container.Controls 
     _controls.Add(childCtr) 
     If childCtr.HasChildren Then 
      GetChildren(childCtr) 
     End If 
    Next 

End Sub 
関連する問題