Frage

A ToolStripComboBox wird nach einem Toolstripbutton angeordnet und wird durch ein anderes folowed, die rechts ausgerichtet. Wie am besten ich die ToolStripComboBox eingerichtet immer seine Länge zu justieren all den verfügbaren Raum zwischen dem vorhergehenden und dem Folowing ToolStripButtons zu füllen?

In den vergangenen Früher habe ich ein Elternteil Resize-Ereignis zu behandeln, berechnen die neue Länge zu Satz basierend auf Elementen Koordinaten benachbarten und die neue Größe einstellen. Aber jetzt, da ich eine neue Anwendung entwickle, frage ich mich, wenn es kein besserer Weg ist.

War es hilfreich?

Lösung

Es gibt keine automatische Layout-Option für diese. Aber man kann es leicht tun, indem Sie das ToolStrip.Resize Ereignis zu implementieren. Dies funktionierte gut:

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

Seien Sie sicher, dass der TSCB des AutoResize Eigenschaft auf False setzen oder es wird nicht funktionieren.

Andere Tipps

Ich verwende die folgende mit großem Erfolg:

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

Der obige Code leidet nicht an dem disapearing Steuerungsproblem.

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

Nun wird die Combobox füllen Dock richtig. Set Spalte oder Zeile Spanne entsprechend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top