كيفية جعل ToolStripcombobox لملء جميع المساحة المتاحة على Toolstrip؟
-
03-10-2019 - |
سؤال
يتم وضع 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 ملء بشكل صحيح. تعيين عمود أو صف تمتد وفقًا لذلك.