ToolStripComboBoxを作成して、ツールストリップで利用可能なすべてのスペースを埋める方法は?

StackOverflow https://stackoverflow.com/questions/2769087

質問

ToolStripComboBoxは、ツールストリップバットンの後に配置され、別のものが右に配置されています。 ToolStripComboBoxを常にセットアップして、その長さを常に調整して、先入観と従順なツールストリップバイトンの間で利用可能なすべてのスペースを埋めるにはどうすればよいですか?

過去には、親のサイズ変更イベントを処理し、隣接する要素座標に基づいて設定する新しい長さを計算し、新しいサイズを設定していました。しかし、今、私は新しいアプリケーションを開発しているので、より良い方法がないのだろうかと思います。

役に立ちましたか?

解決

これには自動レイアウトオプションはありません。ただし、ToolStrip.Resizeイベントを実装することで簡単に実行できます。これはうまくいきました:

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

上記のコードは、disapearsing Controlの問題に悩まされていません。

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

これで、コンボボックスが正しくドッキングされます。それに応じて列または行スパンを設定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top