تغيير سلوك تجاوز سعة ToolStripPanel لـ ToolStripItems المضافة ديناميكيًا

StackOverflow https://stackoverflow.com/questions/604713

سؤال

لدي Windows Forms ToolStripPanel أقوم بإضافة ToolStrips جديدة إليه ديناميكيًا.يحتوي كل ToolStrip على عناصر ToolStripItems التي أقوم بإضافتها إليها ديناميكيًا (في الغالب ToolStripButtons).

أرغب في احتواء جميع ToolStrips في صف واحد طالما يمكنك رؤية جميع ToolStripItems في كل ToolStrip.إذا أدت إضافة ToolStripItem جديد إلى ToolStrip إلى حدوث تجاوز السعة، فأنا أرغب في أن ينتقل ToolStrip الموجود في نهاية الصف إلى صف جديد.المرة الوحيدة التي أرغب في رؤية زر التجاوز فيها هي إذا كان ToolStrip يحتوي على العديد من العناصر التي لا يمكن احتواؤها في عرض النموذج.

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

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

لقد قمت ببعض الأبحاث دون نجاح كبير:

  • يبدو أن هذا يجب أن يكون مسألة بسيطة تتمثل في تغيير ملف ToolStripLayoutStyle, ، ولكن لا يبدو أن هذا هو الحال.(في أفضل الأحوال، يتم إنشاء صفوف جديدة عندما يظهر زر التجاوز على جميع ToolStrips في صف معين).
  • مقالة MSDN "كيف:إدارة تجاوز ToolStrip في نماذج Windows"يبدو أنه يغطي فقط حالة/عند حدوث زر التجاوز.
  • هناك اكتمل التخطيط الحدث الموجود على ToolStrip والذي يبدو من الممكن استخدامه لتعديل الأشياء، يبدو أنه يجب أن تكون هناك طريقة أسهل.
  • إنشاء LayoutEngine مخصص يبدو الأمر بمثابة مبالغة في هذا الأمر نظرًا لأن الجهاز المدمج قريب جدًا مما أريد القيام به.

هل أفتقد الحل السهل؟

تحديث:لا تزال تبحث عن حل جيد.يبدو أن المسار LayoutCompleted ممكن.لكن المشكلة فيه هي أنه يتم استدعاؤه عدة مرات.في إحدى المرات، تظهر رسالة مفادها أن ToolStripItem موجود في منطقة التجاوز وبعد ذلك مباشرة يكون في المنطقة الرئيسية، لذلك لا يبدو من الآمن التحقق مرة واحدة فقط مما إذا كان في حالة تجاوز السعة.

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

المحلول 2

وفي النهاية، لا أعتقد أن هناك حلاً سهلاً وجيدًا. هذا الموضوع يوضح أن ToolStrips لم تكن مصممة حقًا للسيناريوهات الديناميكية كأولوية.

أحد الأساليب الفريدة هو تعيين ملف ToolStrip's الحد الأدنى لحجم ليكون حجم جميع الأزرار.سيبدأ هذا في العمل مع الفائض كما أصف، ولكن حتى هذا به مشاكل مع حالات الحافة.

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

نصائح أخرى

1) أضف العناصر إلى شريط الأدوات

2) قارن عرض شريط الأدوات بمقدار المساحة المتبقية في الصف الأخير.تحتوي ToolStripPanel على خاصية Rows[] التي ستخبرك بالصف الأخير وما هي أشرطة الأدوات الموجودة في هذا الصف.أضف عروضها واطرحها من عرض اللوحة.

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

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