ج#:كيفية تغيير المنطقة التي تحتوي على أطفال MDI؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

عند إنشاء أصل MDI، يتم تحويل "الداخل" بالكامل للنموذج إلى منطقة MDI.

إذا قمت بإضافة شريط قوائم إلى أصل MDI، فسيتم تصغير حجم منطقة MDI قليلاً لإفساح المجال لشريط القوائم.

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

كيف يمكنني تغيير حجم منطقة MDI لتبدأ أقل من قيمة Y معينة؟

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

المحلول

وحسنا قصيرة من ذلك هو انك لا يمكن تعديل MDI الإطار الأصل / حاوية في صافي. نافذة لا يزال هناك، ويمكنك العثور عليها مع واجهات برمجة التطبيقات Win32 وإذا كنت ترغب حقا.

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

public class Form1 : Form
{
    static void Main(string[] args) { Application.Run(new Form1()); }

    public Form1()
    {
        this.IsMdiContainer = true;
        Panel test = new Panel();
        test.Dock = DockStyle.Top;
        test.Height = 100;
        this.Controls.Add(test);

        Form child = new Form();
        child.MdiParent = this;
        child.Text = "Child";
        child.Show();
    }
}

نصائح أخرى

إذا كان موقع csharptest.net صحيحًا، ولا يمكن تغيير منطقة MDI، فقد وجدت طريقتين للقيام بذلك:

  1. قم بإضافة كائنات MenuStrip متعددة (يحرك كل منها منطقة MDI بمقدار 24 بكسل لأسفل في النموذج الأصلي).
  2. استخدم الحدث LocationChanged لأبناء MDI، وتحقق يدويًا من أن قيمة Y الخاصة بهم أكبر من الحد الذي ترغب في الاحتفاظ بهم أدناه.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top