C# WinForms 在 ToolStrip 中加入自訂控制項目

在 StatusStrip, ToolStrip 和 ToolStripContainer 中,預設只能放入八種控制項目,分別是: Button, Label, SplitButton, DropDownButton, Separator, ComboBox, TextBox, ProgressBar

那如果有其他控制項目想要放入 ToolStrip 中該怎麼做呢?其實 ToolStrip 中還可以放入 ToolStripControlHost ,ToolStripControlHost 的作用就是包覆其他控制項目,讓其他控制項目可以出現在 ToolStrip 之中。只是並沒有出現在介面中,也無法用拖拉的方式產生。
本篇就示範將 TrackBar 放入 ToolStripControlHost 中,再將 ToolStripControlHost 放入到 ToolStrip 內,使其達成在 ToolStrip 中放入除原先說明的八種控制項目以外的控制項目。

動態產生 ToolStrip

我們先建立一個 ToolStrip ,使其固定在 Form 的最下方:
    
var toolStrip = new ToolStrip();
this.Controls.Add(toolStrip);
toolStrip.Dock = DockStyle.Bottom;
    

簡單建立一個 TrackBar ,這裡比較要注意的是 AutoSize 需要設定為 false 如果沒有設定會變得太高
    
var trackBar = new TrackBar
{
    Minimum = 10,
    Maximum = 500,
    Value = 100,
    AutoSize = false,
    TickFrequency = 10,
    Width = 200,
    Height = toolStrip.Height,
};
    

上面建立完後並沒有將 TrackBar 放入 Form 中,現在在建立 ToolStripControlHost 要直接將 TrackBar 直接放入建構子,就會把 TrackBar 塞入剛建立的 ToolStripControlHost 了。之後只要再將 ToolStripControlHost 放入 ToolStrip 就可以了。
    
var toolStripControlHost = new ToolStripControlHost(trackBar);
toolStrip.Items.Add(toolStripControlHost);
    

是不是非常簡單?想當初筆者還研究了一段時間才找到 ToolStripControlHost ,下面附上完整程式碼:
    
var toolStrip = new ToolStrip();
this.Controls.Add(toolStrip);
toolStrip.Dock = DockStyle.Bottom;

var trackBar = new TrackBar
{
    Minimum = 10,
    Maximum = 500,
    Value = 100,
    AutoSize = false,
    TickFrequency = 10,
    Width = 200,
    Height = toolStrip.Height,
};

var toolStripControlHost = new ToolStripControlHost(trackBar);
toolStrip.Items.Add(toolStripControlHost);
    

留言