سؤال

عندما أفعل شيئا من هذا القبيل:

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 ومن بين عناصر التحكم في النموذج الذي يتم تمريره كمعلمة إلى هذا الجزء من التعليمات البرمجية هناك نوميريكوبونز ، لا أستطيع العثور عليها في مجموعة الضوابط (الضوابط=ميفورم.عناصر التحكم)، ولكن هناك عناصر تحكم من أنواع أخرى (أوبداونبوتون ، أوبداونديت).المشكلة هي أنني أريد الحصول على خاصية علامة نوميريكوبدون وفقط غير قادر على الحصول عليه عند استخدام هذه الطريقة العودية للتحقق من عناصر التحكم في النموذج.

هل كانت مفيدة؟

المحلول

ال Tag الممتلكات يتم تعريفه بواسطة Control صف دراسي.

لذلك ، لا تحتاج إلى التفكير على الإطلاق;يمكنك ببساطة الكتابة

object tag = control.Tag;

التعليمات البرمجية الخاصة بك لا يعمل لأن نوع التحكم الفعلي (على سبيل المثال, NumericUpDown) لا يحدد منفصلة Tag الملكية ، و GetProperty لا يبحث عن خصائص الفئة الأساسية.


بالمناسبة ، في الأول الخاص بك if الدولة ، يمكنك ببساطة الكتابة

if (control is TextBox)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top