0

私がこのようなことをすると:

public static void BindData<T>(this System.Windows.Forms.Control.ControlCollection controls, T bind)
    {
        foreach (Control control in controls)
        {
            if (control.GetType() == typeof(System.Windows.Forms.TextBox) || control.GetType().IsSubclassOf(typeof(System.Windows.Forms.TextBox)))
            {
                UtilityBindData(control, bind);
            }
            else
            {
                if (control.Controls.Count == 0)
                {
                    UtilityBindData(control, bind);
                }
                else
                {
                    control.Controls.BindData(bind);
                }
            }
        }
    }

    private static void UtilityBindData<T>(Control control, T bind)
    {
        Type type = control.GetType();

        PropertyInfo propertyInfo = type.GetProperty("BindingProperty");
        if (propertyInfo == null)
            propertyInfo = type.GetProperty("Tag");

// rest of the code....

コントロールがSystem.Windows.Forms.Control.ControlCollectionあり、このコードにパラメーターとして渡されるフォーム上のコントロールの中に NumericUpDowns があります。コントロール コレクション (controls=myForm.Controls) でそれらを見つけることはできませんが、他のタイプのコントロール (updownbutton、updownbutton、アップダウン編集)。問題は、NumericUpDown の Tag プロパティを取得したいのですが、フォーム コントロールをチェックする再帰的な方法を使用すると取得できないことです。

4

1 に答える 1

1

Tagプロパティはクラスによって定義されますControl

したがって、リフレクションはまったく必要ありません。あなたは単に書くことができます

object tag = control.Tag;

コントロールの実際の型 (例: ) が個別のプロパティをNumericUpDown定義しておらず、基本クラスのプロパティを検索しないため、コードが機能していません。TagGetProperty


ところで、あなたの最初のif状態では、単に次のように書くことができます。

if (control is TextBox)
于 2010-07-19T13:18:26.253 に答える