سؤال

لدي تطبيق WinForms يسمح لك بتحرير المستندات. يتكون كل مستند من فصول ويحمل كل فصل مجموعة من كتل RTF. يتم تحميل كتل RTF في أ PanelControl استخدام Dock = DockStyle.Top.

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

الأشياء التي جربتها هي أساليب مثل Refresh(), Invalidate() و PerformLayout: سيفعلون ليس حل المسألة.

ماذا او ما يفعل المساعدة هي تغيير حجم النموذج. بعد ذلك يتم وضع جميع عناصر التحكم بشكل صحيح.

هل يمكن لأي شخص أن يساعد في كيفية حل هذا دون تغيير حجم النموذج؟

مرفق أ مشروع تجريبي بسيط هذا يوضح المشكلة.

screenshot

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

المحلول

من تعليقي أعلاه (يبدو حقًا أن المشكلة هنا):

غالبًا ما يتصرف WinForms (و GDI بشكل عام) بشكل غير متوقع إذا حاول المرء استخدام الإحداثيات خارج نطاق 16 بت. حاول تجنب ذلك. في نطاق المشكلات المحتملة ، لا يتم رسم الأشياء على الإطلاق ، فائقة في مواقع التعليمات البرمجية غير المتوقعة وما إلى ذلك.

نصائح أخرى

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

ترى .. من المنطقي أن تكون قيمة الارتفاع قيمة عدد صحيح 16 بت. الشاشة هي وسيلة صغيرة من هذا. مع زيادة ارتفاع اللوحة إلى مثل هذا الحجم العالي. ترى أن استخدام شريط التمرير سيصبح معقولًا جدًا .. وليس شيئًا جيدًا.

المحتوى مع الحجم 2x ، 3x ، 5x تم تمريره يمكن استخدامه للمستخدم. لكن قم بتمرير محتوى بارتفاع (~ 32768) على الأقل (باستخدام شاشة دقة جيدة مع تعظيم النافذة) في الحالة المثلى 32x ، يكون حجم النافذة غير مريح للغاية.

بالإضافة إلى ذلك ، أعتقد أن إنتاجية المستخدم ستنخفض بسبب صعوبة الدماغ في تحديد موقع "الأشياء" في مجموعة متزايدة من "الأشياء".

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