واجهة المستخدم الرسومية لرسم الخرائط كائن الأعمال VB.Net

StackOverflow https://stackoverflow.com/questions/1007227

سؤال

وقضية أواجه حاليا هو رسم خرائط حقول GUI متعددة للاعتراض خصائص (أي عرض طبقة إلى طبقة رسم الخرائط الأعمال المنطق). أن تكون أكثر تحديدا، وهذا هو في VB.Net 2.0 WinForms عناصر.

وطبيعة الحل يتطلب أن يكون لدينا 4 أعمدة الذي يحمل نفس النوع من السلوك على واجهة المستخدم الرسومية لدينا - كل عمود مكون من 11 مربعات النص (وسوف مجرد استخدام هذا صغر حجم العينة، وتمتد المشكلة إلى ما بعد 11 مربعات النص) .

ما أقوم به حاليا هو وضع علامة على كل النص في كافة الأعمدة الأربعة إلى قيمة مثل ذلك:

Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"

وعندما يتم رفع هذا الحدث من قبل النص (على سبيل المثال بضغطة)، وأنا أنظر في الحاوية الأصل، الذي أكون قد وضعت أيضا كسلسلة رسم كائن محدد العلامة. أنا استخدم هذا، جنبا إلى جنب مع العلامة مربع النص، وتحديد ما الكائن الملكية ولست بحاجة لتعيين. عموما، يبدو شيئا من هذا القبيل:

dim objectToMapTo //the generic parent object which all my custom myObjects inherit from

select case sender.parent.tag //the parent object that the property needs to map to
    case "column1"
         objectToMapTo = myObject1
    case "column2"
         objectToMapTo = myObject2
    case "column3"
         objectToMapTo = myObject3
    case "column4"
         objectToMapTo = myObject4
end select

select case sender.tag //the actual textbox's tag value which maps to the property
    case "name"
         objectToMapTo.Name = sender.text //sender.text is conceptual for 
        //the data that needs to be set -- i.e. this could be a calculated 
        //number based on the text, or simply a string, etc
    case "type"
         objectToMapTo.Type = sender.text
    case "speed"
         objectToMapTo.Speed = sender.text
    ...
end select

وكما ترون هذا يمكن الحصول على سيئة للغاية، وليس بسرعة. حاليا نحن ضبط 43 بعض الخصائص الفردية التي يمكن تعيينها إلى - وبالتالي أن العبارة حدد طويل للغاية - وكثير منها هي جزء لا يتجزأ في أساليب متعددة في محاولة ومحاولة DRY (لقد خففت رمز إلى الأساس المفاهيمي التنفيذ).

والسؤال هو: كيف يمكنني ريفاكتور هذا؟ لقد حاولت استخدام القواميس / تجزئات إلى حد ما، لكنها إما أصبحت معقدة أكثر من اللازم، أو مجرد لم يجعل شعور تنفيذ كما الملتوية المشكلة حتى أكثر من ذلك.

وشكرا للمساعدة.

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

المحلول

والمشكلة الأولى التي سول عن طريق وضع علامة ككائن. منذ العلامة غير سلسلة ولكن من وجوه النوع.

والمشكلة الثانية أن تحل من قبل النقيب انعكاس لكن من القيمة في العلامة يجب أن تطابق PROPERTYNAME بالضبط.

_objectToMapTo.GetType().InvokeMember(sender.tag,BindingFlags.Instance Or BindingFlags.Public,Nothing, _objectToMapTo, New Object() {sender.text})

وتنصل انعكاس قريب ولكن ربما ليس صحيحة 100٪.

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