كيفية جعل ToolStripcombobox لملء جميع المساحة المتاحة على Toolstrip؟

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

سؤال

يتم وضع ToolStripcombobox بعد ToolStripbutton ويتم تمييزه من قبل واحد آخر ، وهو محاذاة يميني. كيف يمكنني إعداد ToolStripcomboBox بشكل أفضل لضبط طوله لملء جميع المساحة المتاحة بين الأدوات المسبقة والأدوات الفورية؟

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

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

المحلول

لا يوجد خيار تخطيط تلقائي لهذا الغرض. ولكن يمكنك القيام بذلك بسهولة من خلال تنفيذ الحدث ToolStrip.ration. هذا يعمل بشكل جيد:

    private void toolStrip1_Resize(object sender, EventArgs e) {
        toolStripComboBox1.Width = toolStripComboBox2.Bounds.Left - toolStripButton1.Bounds.Right - 4;
    }
    protected override void OnLoad(EventArgs e) {
        toolStrip1_Resize(this, e);
    }

تأكد من تعيين خاصية TSCB التلقائية على False أو لن تعمل.

نصائح أخرى

أستخدم ما يلي بنجاح كبير:

private void toolStrip1_Layout(System.Object sender, System.Windows.Forms.LayoutEventArgs e)
{
    int width = toolStrip1.DisplayRectangle.Width;

    foreach (ToolStripItem tsi in toolStrip1.Items) {
        if (!(tsi == toolStripComboBox1)) {
            width -= tsi.Width;
            width -= tsi.Margin.Horizontal;
        }
    }

    toolStripComboBox1.Width = Math.Max(0, width - toolStripComboBox1.Margin.Horizontal);
}

الرمز أعلاه لا يعاني من مشكلة السيطرة المرتفعة.

ToolStrip ts = new ToolStrip();

ToolStripComboBox comboBox = new TooLStripComboBox();
comboBox.Dock = DockStyle.Fill;

ts.LayoutStyle = ToolStripLayoutStyle.Table;
((TableLayoutSettings)ts.LayoutSettings).ColumnCount = 1;
((TableLayoutSettings)ts.LayoutSettings).RowCount = 1;
((TableLayoutSettings)ts.LayoutSettings).SetColumnSpan(comboBox,1);

ts.Items.Add(comboBox);

الآن سوف combobox dock ملء بشكل صحيح. تعيين عمود أو صف تمتد وفقًا لذلك.

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