مشكلة مع نوميريكوبدون نوع
-
17-09-2020 - |
سؤال
عندما أفعل شيئا من هذا القبيل:
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)