StatusStrip 是 Windows Forms 中專用於窗體底部狀態欄的容器控件,繼承自 ToolStrip,內部通過 Items 集合管理多種子控件:
ToolStripStatusLabel:顯示文本/圖標(最常用)。ToolStripProgressBar:進度條。ToolStripDropDownButton/SplitButton:下拉菜單。ToolStripSpringTextBox:輸入框(罕用)。StatusStrip 到窗體(自動靠底停駐)。ToolStripStatusLabel。Text = "Test"、Spring = true(佔滿剩餘寬度)、TextAlign = MiddleLeft。適用於運行時根據條件生成狀態欄:
public Form1() {
InitializeComponent();
// 1. 創建 StatusStrip
var statusStrip = new StatusStrip();
// 2. 創建子控件
var label = new ToolStripStatusLabel {
Text = "Test",
Spring = true, // 自動填充寬度
TextAlign = ContentAlignment.MiddleLeft
};
var progress = new ToolStripProgressBar {
Name = "progressBar",
Visible = false // 需時顯示
};
// 3. 加入項目集合(順序即顯示順序)
statusStrip.Items.AddRange(new ToolStripItem[] { label, progress });
// 4. 加入窗體控件集合
this.Controls.Add(statusStrip);
}
| 屬性/方法 | 說明 |
|---|---|
Items | 子控件集合,支持 Add/AddRange/Insert/Remove |
LayoutStyle | 佈局模式:HorizontalStackWithOverflow(默認)、VerticalStackWithOverflow、Flow、Table |
SizingGrip | 右下角調整手柄,默認顯示 |
Stretch | 是否拉伸填充容器寬度 |
ToolStripStatusLabel.Spring | true 時佔據所有剩餘空間,實現左對齊/右對齊佈局 |
ToolStripProgressBar.Style | Continuous/Marquee(滾動等待) |
private void SetupStatusBar() {
var ss = new StatusStrip();
// 左側:就緒狀態
var lblStatus = new ToolStripStatusLabel {
Text = "就緒",
Spring = true,
TextAlign = ContentAlignment.MiddleLeft,
BorderSides = ToolStripStatusLabelBorderSides.Right
};
// 中間:進度條(初始隱藏)
var pb = new ToolStripProgressBar {
Name = "progress",
Visible = false,
Width = 200
};
// 右側:時間
var lblTime = new ToolStripStatusLabel {
Text = DateTime.Now.ToString("T"),
BorderSides = ToolStripStatusLabelBorderSides.Left,
AutoSize = false,
Width = 100
};
ss.Items.AddRange(new ToolStripItem[] { lblStatus, pb, lblTime });
this.Controls.Add(ss);
// 定時器更新時間
var timer = new Timer { Interval = 1000 };
timer.Tick += (s, e) => lblTime.Text = DateTime.Now.ToString("T");
timer.Start();
}
private async Task ProcessWithProgress(IEnumerable- items) {
var progress = (ToolStripProgressBar)statusStrip.Items["progress"];
var lblStatus = (ToolStripStatusLabel)statusStrip.Items[0];
progress.Visible = true;
progress.Value = 0;
progress.Maximum = items.Count();
int i = 0;
foreach (var item in items) {
await ProcessItem(item);
progress.Value = ++i;
lblStatus.Text = $"處理中... {i}/{progress.Maximum}";
Application.DoEvents(); // 保持 UI 響應(或用 async/await 配合 Progress
)
}
lblStatus.Text = "完成";
progress.Visible = false;
}
statusStrip.Items[0] —— InitializeComponent() 尚未運行,設計器創建的控件尚未加入集合。Name 屬性通過 Items["name"] 索引訪問,比索引更健壯。async/await + IProgress<T> 更新 UI,避免阻塞主線程導致狀態欄凍結。Spring=true 的項目會壓縮其他項目空間,佈局規劃時預留寬度。