سؤال

أرغب في استخدام Segoe UI 9 pt على نظام التشغيل Vista، وTahoma 8 pt على نظام التشغيل Windows XP/إلخ.(في الواقع، سأوافق على استخدام Segoe UI في كليهما، ولكن ربما لم يكن المستخدمون قد قاموا بتثبيته.) ولكن نظرًا لاختلافهما تمامًا، فإنهما يفسدان تخطيط النماذج الخاصة بي.لذا...هل هناك طريقة جيدة للتعامل مع هذا؟

مثال:انا املك Label, ، مع وجود بعض المساحة الفارغة في المنتصف، والتي أضع فيها a NumericUpDown يتحكم.إذا كنت أستخدم Segoe UI، فإن NumericUpDown حوالي 5 بكسل أو نحو ذلك على يسار المساحة الفارغة، مقارنة عندما أستخدم Tahoma.هذا ألم.لست متأكدًا مما يجب فعله هنا.

وعلى وجه التحديد، سؤالي سيكون:كيف يمكنني وضع عناصر التحكم في منتصف مساحة فارغة في جهازي Labelس (أو CheckBoxوفاق، وما إلى ذلك)؟بشكل عام:هل هناك طريقة جيدة للتعامل مع الخطوط المختلفة في Windows Forms؟

يحرر:لا أعتقد أن الناس فهموا السؤال.انا اعلم كيف تختلف الخطوط الخاصة بي على أساس نظام التشغيل.أنا فقط لا أعرف كيف التعامل مع مشاكل التخطيط التي تنشأ من القيام بذلك.

الرد على أجريان، سريع الجفاف:حسنًا ، يا رفاق فهمتم السؤال.أعتقد أن MeasureString قد ينجح، على الرغم من أنني سأكون مهتمًا بمزيد من الاستكشاف لطرق أفضل لحل هذه المشكلة.

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

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

المحلول

من الغريب أن تحتاج إلى تخطيط عنصر تحكم واحد داخل عنصر تحكم آخر.ربما تقوم بحل مشكلة المنبع بشكل خاطئ.هل أنت قادر على تقسيم التسمية إلى علامتين مع وضع الجزء العلوي بينهما وربما الاعتماد على لوحة Windows Forms TableLayout؟

إذا كان من الضروري محاولة تحديد الموضع بناءً على أحجام الخطوط، فيمكنك استخدام Graphics.MeasureString("سلسلة قبل updown"، myLabel.Font)

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


[عدل] يمكنك التعامل مع حدث النقر لجزء "النصف الثاني" من التسمية وتغيير حالة مربع الاختيار في هذا الحدث.يبدو الأمر برمته وكأنه اختراق بالرغم من ذلك.ما هي المشكلة التي يتم حلها عن طريق تخطيط التحكم الغريب هذا؟لماذا تحتاج إلى أعلى لأسفل في منتصف الملصق؟

نصائح أخرى

أؤيد استخدام TableLayoutPanel لعناصر التحكم المضمنة ذات السطر الواحد.

أقوم عادةً بتعيين كل عمود والصف الأول على AutoSize وتعيين خاصية Dock الخاصة بكل عنصر تحكم فرعي على ملء المصمم.يؤدي ذلك إلى عرض التخطيط الأفقي بشكل صحيح.لجعل النص يسطر بين التسميات/مربعات النص، قم بتعيين خاصية TextAlign إلى MiddleLeft.

إذا كان النص يتدفق إلى السطر التالي، فليس هناك حل سهل.يعد استخدام Graphics.MeasureString/TextRenderer.MeasureText وبعض منطق الالتفاف الرائع هو أفضل رهان لك :(

في البداية، يمكنك معرفة إصدار Windows الذي تستخدمه من خلال نظام التشغيل.المنصة الملكية في مكتبة النظام.

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

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

وأخيرا، قد ترغب في إلقاء نظرة على WPF لأن هذه إحدى مساحات المشكلات التي تم تصميمها لحلها.

هل المشكلة في تحديد موضع الضوابط؟أي.هل تعلم أن الخطين X وY يعملان على نظامي التشغيل A وB، ويعطيان التخطيط الذي تريده مع النص الذي تستخدمه على تلك الأنظمة؟

قد تساعد طريقة MeasureString في العمل على تخطيطك بطريقة لا تكون فيها مرتبطًا بخطوط معينة.

float textWidth = graphics.MeasureString(someString, someFont).Width;

(هل سيعمل التغيير في محاذاة النص؟ربما أسيء فهم المشكلة أيضًا)

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