سؤال

لقد حصلت على تطبيق WinForms Legacy وأريد حفظ موضع النافذة وحجمها عبر الجلسات. لقد كنت أستخدم getWindowplacement و setWindowplacement أثناء الأحداث الصيبة والتحميل. المشكلة التي أحصل عليها هي أنه عند ارتفاع إعدادات DPI (مثل المتوسطة ، الحجم بنسبة 125 ٪) ، تستمر الأحجام في التضخم. سأدعو setWindowplacement عليه بحجم معين ، ولكن عندما يتم استدعاء GetWindowplacement ، تعود هذه الأرقام بنسبة 25 ٪ ، على الرغم من أن النافذة كانت بنفس الحجم طوال الوقت. يوجد نفس النوع من المشكلة عند توفير حجم عنصر يمكن إصلاحه داخل النموذج.

الآن هذا يعمل بشكل جيد إذا قمت بإنشاء مشروع WinForms جديد: يبقى الحجم مستقرًا حتى عند التشغيل عند DPI أعلى. أظن أن هناك بعض الإعدادات القديمة في الأمعاء للمشروع أو بعض إعدادات شكل غامضة تعبث ، لكن لا يمكنني معرفة مكان.

لقد اتصلت ISProcessDpiaware على كلا المشروعين وكلاهما true. هل يعلم اي احد ما الذي يمكن ان يسبب هذا؟

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

المحلول 2

لقد وجدت هذا الإعداد المخالف في ملف .resx النموذج:

<data name="$this.AutoScaleBaseSize" type="System.Drawing.Size, System.Drawing">
  <value>5, 13</value>
</data>

عندما كان هذا موجودًا ، سيغير VS تلقائيًا من AutoScaleBasesize للعمل من أجله لك DPI ، ولكن لا أحد آخر. بالنسبة للجميع ، فإن النموذج سوف ينمو أو يتقلص باستمرار.

تسبب اختيار AutoScaleMode = الخط في لوحة خصائص المصمم VS في تشغيل و "تحديث" إعدادات تحجيم الخط. الآن يعمل لجميع موانئ دبي.

نصائح أخرى

يبدو أنك تثير التحجيم بطريقة أو بأخرى ، كما تم تحديدها بواسطة خاصية Autoscalemode للنموذج. سيكون الفرق بين المشروعين الخاص بك هو خاصية Autoscaledimensions ، المرئية في ملف Designer.cs.

لست متأكدًا من سبب حدوث مشكلة ، لكن فئة النموذج تستخدم بالفعل طرق getWindowplacement () داخليًا ، و recreateHandleCore () و updateWindowState (). للحصول على مساعدة حقيقية ، أفترض أنك ستحتاج إلى نشر مشروع Repro في مكان ما.

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