Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona

Procedura: allargare un oggetto ToolStripTextBox in modo da coprire tutta la larghezza di un elemento ToolStrip (Windows Form)

Quando si imposta la proprietà Stretch di un controllo ToolStrip su true, il controllo occupa il proprio contenitore da un'estremità all'altra e si ridimensiona quando il contenitore si ridimensiona. In questa configurazione può risultare utile allargare un elemento in un controllo, ad esempio ToolStripTextBox, per occupare lo spazio disponibile e ridimensionarlo quando il controllo si ridimensiona. Questa soluzione è utile, ad esempio, se si desidera ottenere un aspetto e un comportamento simili a quelli della barra degli indirizzi in Microsoft® Internet Explorer.

Esempio

Nell'esempio di codice seguente viene fornita una classe derivata da ToolStripTextBox denominata ToolStripSpringTextBox. Questa classe esegue l'override del metodo GetPreferredSize per calcolare la larghezza disponibile del controllo ToolStrip padre dopo che è stata sottratta la larghezza combinata di tutti gli altri elementi. Vengono inoltre fornite una classe Form e una classe Program per illustrare il nuovo comportamento.

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());
    }
}

Compilazione del codice

Per questo esempio sono necessari i seguenti requisiti:

  • Riferimenti agli assembly System, System.Drawing e System.Windows.Forms.

Vedere anche

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft