مشاركة عبر


تغيير حجم في Windows Forms تلقائياً

تحجيم تلقائي بتمكين نموذج وبه عناصر التحكم، مصمم تشغيل جهاز واحد بخط دقة أو النظام الخاص بالعرض، ليتم عرضها بشكل مناسب تشغيل جهاز آخر بدقة شاشة عرض أخرى معينة أو نظام خطوط. تضمن الذي النموذج وتغيير حجم عناصر التحكم الخاصة به بذكاء إلى تكون متوافقة مع Windows أصلية والتطبيقات الأخرى تشغيل كل من المستخدمين والمطورين الأخرى الأجهزة. الدعم .NET Frameworkلمقياس auإلىmatic والأنماط المرئية تشغيل تمكين .NET Frameworkالتطبيقات إلى الاحتفاظ بشكل متناسق وأسلوب عرض عند مقارنة إلى تطبيقات Windows الأصلي تشغيل آلة الخاص بكل مستخدم.

الحاجة إلى تغيير حجم تلقائي

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

موقف مماثل يحدث عند تطبيق هو مصمم لحلا dهوplay معينة. دقة dهوplay الأكثر شيوعاً هو 96 منقط في كل بوصة (DPI)، ولكن dهوplays الدقة الأعلى الدعم 120، 133، 170، وأعلى أصبحت الأكثر شيوعاً. بدون ضبط، وتطبيق ما، وخاصة المستندة إلى رسومات آخر، تم تصميمها لتحليل واحد يظهر أما قطر أيمن متوسط جداً أو صغيرة جداً عند تشغيله باستخدام دقة آخر.

تغيير الحجم التلقائي seeks إلى ameliorate هذه المشاكل بشكل تلقائي تغيير حجم النموذج وعناصر التحكم التابعة لها وفقا لنسبة حجم الخط أو عرض بدقة. يدعم النظام التشغيل تلقائي مقياس حوار مربعات استخدام وحدة قياس تسمى نسبي حوار وحدات. وحدة حوار هو يعمل على الالنظام خط ولها علاقة بوحدات البكسل يمكن تحديد وأن تعمل SDK Win32 GetDialogBaseUnits. عند قيام مستخدم التغييرات السمة المستخدمة من قبل Windows، الجميع مربعات حوار يتم ضبط تلقائياً وفقا لذلك. بالإضافة إلى ذلك:

.NET Frameworkيعتمد المقياس تلقائي استناداً إلى خط النظام الافتراضي أو دقة عرض. بشكل اختياري، التحجيم تلقائي يمكن معطّل في تطبيق.

الدعم الأصلي لتغيير حجم تلقائي

الإصدار 1.0 و 1.1 من .NET Frameworkاعتماد التحجيم تلقائي بطريقة مباشرة والتي كانت تعتمد تشغيل خط الافتراضي المستخدم لواجهة المستخدم، ويمثله القيمة Win32 SDK Windows DEFAULT_GUI_FONT . Th هو خط هو عادة تم تغييره فقط عند تم تغييره الدقة dهوplay. تم استخدام تقنية التالية إلى تطبيق المقياس auإلىmatic:

  1. وقت التصميم، AutoScaleBaseSizeخاصية (الذي هو مهمل الآن) قد تم تعيين ارتفاع وعرض خط الافتراضي للنظام تشغيل آلة بمطور.

  2. تم استخدام خط النظام الافتراضي للمستخدم جهاز في وقت التشغيل، إلى تهيئة Fontخاصية Formفئة.

  3. قبل عرض النموذج، ApplyAutoScalingتم استدعاء الأسلوب إلى حجم النموذج. هذه الطريقة حساب أحجام مقياس نسبي من AutoScaleBaseSizeو Fontثم استدعاء Scaleالأسلوب بالفعل نموذج التوابع الخاصة به.

  4. القيمة AutoScaleBaseSizeتم محدث لذلك اللاحقة استدعاء إلى ApplyAutoScalingتغيير حجم غير progressively النموذج.

بينما كانت هذه الآلية كافية لمعظم الاستخدامات، تشغيله من القيود التالية:

  • منذ AutoScaleBaseSizeتمثل خاصية الحجم خط الأساسي كقيم متكاملة، تحدث أخطاء التقريب التي تصبح evident عند نموذج هو تسري عبر عدة حلول.

  • تم إجراء تغيير الحجم تلقائي في فقط Formالفئة، وليس ContainerControlفئة. كـ a النتيجة, مستخدم عناصر التحكم would مقياس correctly فقط when the مستخدم عنصر تحكم was designed at the same دقة كـ the نموذج, و it was placed في the نموذج at تصميم الوقت.

  • Forms و their فرع عناصر التحكم could فقط be concurrently designed بواسطة multiple developers if their آلة resolutions were the same. Likewise it also made توريث of a نموذج dependent تشغيل the دقة associated مع the parent نموذج.

  • It ليس متوافق مع the newer تخطيط managers introduced مع the .NET Framework الإصدار 2.0, such كـ FlowLayoutPanel و TableLayoutPanel.

  • It did not دعم scaling based directly تشغيل the عرض دقة that هو مطلوب for توافق إلى the .NET Compact Framework.

Although this mechanism هو preserved في the .NET Framework الإصدار 2.0 to maintain إلى الخلف توافق, it has been superseded بواسطة the المزيد قوة scaling mechanism described التالي. كـ a consequence, the AutoScale, ApplyAutoScaling, AutoScaleBaseSize, و certain Scale التحميلات الزائدة are marked كـ obsolete.

ملاحظة

You can safely يحذف مراجع إلى these الأعضاء when you ترقية your قديم تعليمات برمجية إلى the .NET Framework الإصدار 2.0.

الحالي دعم for تلقائي Scaling

The .NET Framework الإصدار 2.0 surmounts السابق limitations بواسطة introducing the following التغييرات إلى the تلقائي scaling of Windows Forms:

  • الأساس دعم for scaling has been moved إلى the ContainerControl فئة so that forms, أصلي مركب عناصر التحكم و مستخدم عناصر التحكم الجميع receive uniform scaling دعم. The جديد الأعضاء AutoScaleFactor, AutoScaleDimensions, AutoScaleMode و PerformAutoScale have been تمت الإضافة.

  • The Control فئة also has several جديد الأعضاء that allow it إلى participate في scaling و إلى دعم مختلط scaling تشغيل the same نموذج. Specifically the Scale, ScaleChildren, و GetScaledBounds الأعضاء دعم scaling.

  • دعم for scaling based upon the دقة شاشة has been تمت الإضافة إلى complement النظام خط دعم, كـ defined بواسطة the AutoScaleMode قائمة تعداد. This الوضع هو متوافق مع تلقائي scaling supported بواسطة the .NET Compact Framework enabling easier تطبيق migration.

  • توافق مع تخطيط managers such كـ FlowLayoutPanel و TableLayoutPanel has been تمت الإضافة إلى the implementation of تلقائي scaling.

  • Scaling factors are now represented كـ عائم يؤشر قيم, typically using the SizeF بنية, so that rounding أخطاء have been practically eliminated.

ملاحظة تنبيهتنبيه

Arbitrary mixtures of DPI و خط scaling modes are not supported. Although you may مقياس a مستخدم عنصر تحكم using واحد الوضع (for مثال, DPI) و place it تشغيل a نموذج using another الوضع (خط) مع لا issues, but mixing a الأساس نموذج في واحد الوضع و a derived نموذج في another can lead إلى unexpected نتائج.

تلقائي Scaling في إجراء

Windows Forms now uses the following logic إلى automatically مقياس forms و their المحتويات:

  1. At تصميم الوقت, each ContainerControl records the scaling الوضع و it الحالي دقة في the AutoScaleMode و AutoScaleDimensions, respectively.

  2. At تشغيل الوقت, the الفعلي دقة هو stored في the CurrentAutoScaleDimensions خاصية. The AutoScaleFactor خاصية dynamically calculates the ratio between the تشغيل-الوقت و تصميم-الوقت scaling دقة.

  3. When the نموذج loads, if the قيم of CurrentAutoScaleDimensions و AutoScaleDimensions are different, then the PerformAutoScale أسلوب هو called إلى مقياس the عنصر تحكم و its children. This أسلوب suspends تخطيط و calls the Scale أسلوب إلى perform the الفعلي scaling. Afterwards, the القيمة of AutoScaleDimensions هو محدث إلى avoid progressive scaling.

  4. PerformAutoScale هو also automatically invoked في the following situations:

    • في استجابة إلى the OnFontChanged حدث if the scaling الوضع هو Font.

    • When the تخطيط of the عنصر تحكم الحاوية resumes و a تغيير هو detected في the AutoScaleDimensions أو AutoScaleMode خصائص.

    • كـ implied above, when a parent ContainerControl هو being scaled. Each عنصر تحكم الحاوية هو responsible for scaling its children using its own scaling factors و not the واحد من its parent حاوية.

  5. فرع عناصر التحكم can تعديل their scaling سلوك through several means:

    • The ScaleChildren خاصية can be overridden إلى determine if their فرع عناصر التحكم should be scaled أو not.

    • The GetScaledBounds أسلوب can be overridden إلى adjust the bounds that the عنصر تحكم هو scaled إلى, but not the scaling logic.

    • The ScaleControl أسلوب can be overridden إلى تغيير the scaling logic for the الحالي عنصر تحكم.

راجع أيضًا:

المهام

كيفية القيام بما يلي: تمكين ‏‫نظام التشغيل Windows XP Visual أنماط

كيفية القيام بما يلي: تحسين الأداء بتجنب تغيير حجم تلقائي

المرجع

AutoScaleMode

Scale

PerformAutoScale

AutoScaleDimensions

المبادئ

عرض عناصر التحكم Visual مع أنماط