如何:拉伸 ToolStripTextBox 以填充 ToolStrip 的其余宽度 您所在的位置:网站首页 toolstrip控件图片大小 如何:拉伸 ToolStripTextBox 以填充 ToolStrip 的其余宽度

如何:拉伸 ToolStripTextBox 以填充 ToolStrip 的其余宽度

2023-12-05 05:28| 来源: 网络整理| 查看: 265

如何:拉伸 ToolStripTextBox 以填充 ToolStrip 的其余宽度(Windows 窗体) 项目 05/04/2023

将 ToolStrip 控件的 Stretch 属性设置为 true 时,控件会从头到尾填充其容器,并在其容器重设大小时随之改变。 在此配置中,可能会发现拉伸控件中的项(例如 ToolStripTextBox)来填充可用空间并在控件重设大小时随之改变很有用。 此拉伸功能很有用,例如,如果希望获得类似于 Microsoft® Internet Explorer 中地址栏的外观和行为。

示例

以下代码示例提供了一个派生自 ToolStripTextBox 的类,称为 ToolStripSpringTextBox。 此类替代 GetPreferredSize 方法,用于在减去所有其他项的组合宽度后计算父 ToolStrip 控件的可用宽度。 此代码示例还提供一个 Form 类和一个 Program 类来演示新行为。

using System; using System.Drawing; using System.Windows.Forms; public class ToolStripSpringTextBox : ToolStripTextBox { public override Size GetPreferredSize(Size constrainingSize) { // Use the default size if the text box is on the overflow menu // or is on a vertical ToolStrip. if (IsOnOverflow || Owner.Orientation == Orientation.Vertical) { return DefaultSize; } // Declare a variable to store the total available width as // it is calculated, starting with the display width of the // owning ToolStrip. Int32 width = Owner.DisplayRectangle.Width; // Subtract the width of the overflow button if it is displayed. if (Owner.OverflowButton.Visible) { width = width - Owner.OverflowButton.Width - Owner.OverflowButton.Margin.Horizontal; } // Declare a variable to maintain a count of ToolStripSpringTextBox // items currently displayed in the owning ToolStrip. Int32 springBoxCount = 0; foreach (ToolStripItem item in Owner.Items) { // Ignore items on the overflow menu. if (item.IsOnOverflow) continue; if (item is ToolStripSpringTextBox) { // For ToolStripSpringTextBox items, increment the count and // subtract the margin width from the total available width. springBoxCount++; width -= item.Margin.Horizontal; } else { // For all other items, subtract the full width from the total // available width. width = width - item.Width - item.Margin.Horizontal; } } // If there are multiple ToolStripSpringTextBox items in the owning // ToolStrip, divide the total available width between them. if (springBoxCount > 1) width /= springBoxCount; // If the available width is less than the default width, use the // default width, forcing one or more items onto the overflow menu. if (width < DefaultSize.Width) width = DefaultSize.Width; // Retrieve the preferred size from the base class, but change the // width to the calculated width. Size size = base.GetPreferredSize(constrainingSize); size.Width = width; return size; } } public class Form1 : Form { public Form1() { ToolStrip toolStrip1 = new ToolStrip(); toolStrip1.Dock = DockStyle.Top; toolStrip1.Items.Add(new ToolStripLabel("Address")); toolStrip1.Items.Add(new ToolStripSpringTextBox()); toolStrip1.Items.Add(new ToolStripButton("Go")); Controls.Add(toolStrip1); Text = "ToolStripSpringTextBox demo"; } } static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } Imports System.Drawing Imports System.Windows.Forms Public Class ToolStripSpringTextBox Inherits ToolStripTextBox Public Overrides Function GetPreferredSize( _ ByVal constrainingSize As Size) As Size ' Use the default size if the text box is on the overflow menu ' or is on a vertical ToolStrip. If IsOnOverflow Or Owner.Orientation = Orientation.Vertical Then Return DefaultSize End If ' Declare a variable to store the total available width as ' it is calculated, starting with the display width of the ' owning ToolStrip. Dim width As Int32 = Owner.DisplayRectangle.Width ' Subtract the width of the overflow button if it is displayed. If Owner.OverflowButton.Visible Then width = width - Owner.OverflowButton.Width - _ Owner.OverflowButton.Margin.Horizontal() End If ' Declare a variable to maintain a count of ToolStripSpringTextBox ' items currently displayed in the owning ToolStrip. Dim springBoxCount As Int32 = 0 For Each item As ToolStripItem In Owner.Items ' Ignore items on the overflow menu. If item.IsOnOverflow Then Continue For If TypeOf item Is ToolStripSpringTextBox Then ' For ToolStripSpringTextBox items, increment the count and ' subtract the margin width from the total available width. springBoxCount += 1 width -= item.Margin.Horizontal Else ' For all other items, subtract the full width from the total ' available width. width = width - item.Width - item.Margin.Horizontal End If Next ' If there are multiple ToolStripSpringTextBox items in the owning ' ToolStrip, divide the total available width between them. If springBoxCount > 1 Then width = CInt(width / springBoxCount) ' If the available width is less than the default width, use the ' default width, forcing one or more items onto the overflow menu. If width < DefaultSize.Width Then width = DefaultSize.Width ' Retrieve the preferred size from the base class, but change the ' width to the calculated width. Dim preferredSize As Size = MyBase.GetPreferredSize(constrainingSize) preferredSize.Width = width Return preferredSize End Function End Class Public Class Form1 Inherits Form Public Sub New() Dim toolStrip1 As New ToolStrip() With toolStrip1 .Dock = DockStyle.Top .Items.Add(New ToolStripLabel("Address")) .Items.Add(New ToolStripSpringTextBox()) .Items.Add(New ToolStripButton("Go")) End With Controls.Add(toolStrip1) Text = "ToolStripSpringTextBox demo" End Sub End Class Public Class Program Public Shared Sub Main() Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) End Sub End Class 编译代码

此示例需要:

对 System、System.Drawing 和 System.Windows.Forms 程序集的引用。 另请参阅 ToolStrip ToolStrip.Stretch ToolStripTextBox ToolStripTextBox.GetPreferredSize ToolStrip 控件体系结构 如何:在 StatusStrip 中以交互方式使用 Spring 属性


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有