ToolStripComboBoxを作成して、ツールストリップで利用可能なすべてのスペースを埋める方法は?
-
03-10-2019 - |
質問
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);
これで、コンボボックスが正しくドッキングされます。それに応じて列または行スパンを設定します。
所属していません StackOverflow