Question

A ToolStripComboBox est placé après un ToolStripButton et est folowed par un autre, qui est aligné à droite. Comment puis-je mieux mis le ToolStripComboBox pour ajuster toujours sa longueur pour remplir tout l'espace disponible entre les et les ToolStripButtons précédentes folowing?

Dans le passé, j'utilisé pour gérer un événement de redimensionnement parent, calculer la nouvelle longueur d'ensemble sur la base de coordonnées éléments voisins et le réglage de la nouvelle taille. Mais maintenant, comme je développe une nouvelle application, je me demande s'il n'y a pas beaucoup mieux.

Était-ce utile?

La solution

Il n'y a pas de possibilité de mise en page automatique pour cela. Mais vous pouvez facilement le faire en mettant en œuvre l'événement ToolStrip.Resize. Cela a bien fonctionné:

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

Assurez-vous de définir la propriété AutoResize du TSCb sur False ou il ne fonctionnera pas.

Autres conseils

J'utilise ce qui suit avec succès:

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

Le code ci-dessus ne souffre pas du problème de contrôle de disapearing.

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

Maintenant, le combobox accostera correctement remplissage. Set colonne ou l'étendue de ligne en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top