سؤال

هذه متابعة لسؤالي السابق "تحديد موضع التحكم المعتمد على الخط."إنها محاولة لحل المشكلة حقيقي المشكلة وراء هذا السؤال، ربما بطرق مختلفة عن تلك التي كنت أسأل عنها.

مثال على بيان المشكلة: أريد مربع اختيار يقول "ضبط الأسعار حسب <س> <ص> بعد التحميل" حيث <س> هو رقم --- قابل للتعديل مع NumericUpDown---و <ص> إما "بالنسبة المئوية" أو "بالدولار"، مع تحديد الاختيارات بواسطة أ ComboBox.وسيكون هذا على سطر واحد.

التعقيد: أريد أن أكون قادرًا على تغيير الخطوط الخاصة بي لجميع عناصر التحكم هذه (ضبطها بشكل أساسي على System.Drawing.Fonts.MessageBoxFont, ، وهو Tahoma 8 pt على نظام التشغيل Windows XP/إلخ.وSegoe UI 9 pt على نظام التشغيل Vista)، دون الإضرار بالتخطيط الخاص بي، والذي يتوافق مع التصميم الحالي Position-الخاصية-نموذج الإعداد لا يعمل.

وبشكل أكثر عمومية، أود أن يتم وضع عناصر التحكم ديناميكيًا بطريقة مستقلة عن الخط، بحيث يكون <س> NumericUpDown يتناسب بشكل مريح مع المساحة بين "بواسطة" و <ص> ComboBox, ، ومثله <س> ComboBox يناسب فيما يتعلق <س> CheckBox والسلسلة "بعد التحميل" على يمينها.

الجزء الذي يبدو أن الجميع يفتقدونه: كل هذا متداخل داخل ملف CheckBox.لذلك ، من الناحية المثالية ، يجب على النقر على عبارة "بعد التحميل" التحقق/إلغاء تحديد خانة الاختيار ، ورسم هذا المستطيل المميز حول "ضبط الأسعار بعد التحميل". لذا مجرد صفع إضافي Label في النهاية لا يعمل، لأنه بعد ذلك لا يقوم بتبديل CheckBox;وبالمثل، فإن محاولة معالجة الأمور عن طريق ربط مثل هذا LabelClick لن ينتج عن الحدث مستطيل التمييز المطلوب.

حلول؟ في هذه المرحلة أفكر إما:

  1. أعد التفكير في المشكلة، بطريقة أو بأخرى، ربما مع حل قبيح مثل سطرين منفصلين من النص:"ضبط الأسعار الموجودة بعد التحميل" (CheckBox), "مبلغ التعديل:" (NumericUpDown و ComboBox).هذا أمر سيء حقًا لأن مربع الخيارات الخاص بي مليء تمامًا بالخيارات من هذا النوع (أي.النوع الموجود في المثال)، لذلك سيتضاعف حجمه الرأسي على الأقل.

  2. نوع من التحكم المخصص؟ SplittableCheckBox?

  3. نوع من السحر مع أ TableLayout يتحكم؟(من المؤكد أن هذا فشل في "الجزء الذي يبدو أن الجميع يفتقدونه.)

  4. استسلم وارجع إلى MS Sans Serif، أو استخدم Tahoma بشكل موحد، أو قم بحزم Segoe UI مع تطبيقي، وبالتالي عدم احترام الخطوط الافتراضية للنظام.

  5. (جديد، عبر التعديل) قم بالتبديل إلى WPF، إذا كان بإمكان أي شخص إقناعي بأنه يدعم هذا السيناريو تمامًا.

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

المحلول

إذا كان لديك العديد من الخيارات التي تتبع هذا التخطيط، فلماذا لا تقوم بإنشاء عنصر تحكم المستخدم؟سيحتوي عنصر تحكم المستخدم على CheckBox وNumericUpDown وComboBox وتسمية "بعد التحميل".يمكنك تجاوز OnFontChanged لضبط موقع عناصر التحكم بناءً على عرض النص بالخط المحدد.قم بإضافة EventHandler إلى التسمية لتحديد/إلغاء تحديد CheckBox.

أما بالنسبة لجعل مستطيل التركيز يحيط بجميع عناصر التحكم، فيجب أن تكون قادرًا على منح عنصر تحكم المستخدم التركيز عند النقر فوق أحد عناصر التحكم الداخلية الخاصة به.

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