在 C# WinForms 專案(如模仿 QQ 主介面)中使用 Sidebar 控件顯示好友分組列表,需動態新增多個面板項目。本文說明控件基本用法與迴圈動態載入實作。
Sidebar(常見於第三方庫如 DevComponents.DotNetBar.Sidebar 或自訂 UserControl)用於垂直堆疊可摺疊面板,適合做導航欄、好友分組等。
Sidebar 至表單。Text(標題)、Image(圖示)。ListView、TreeView 或自訂控件顯示好友列表。若好友分組資料來自資料庫,需迴圈動態建立:
using DevComponents.DotNetBar; // 確認引用正確命名空間
private void LoadFriendGroups() {
// 假設從資料庫取得分組清單
var groups = GetGroupsFromDB(); // List { Id, Name, Icon }
sidebar1.Panels.Clear(); // 清除設計時期面板
foreach (var g in groups) {
// 1. 建立面板
SidebarPanel panel = new SidebarPanel();
panel.Text = g.Name;
panel.Name = "panel_" + g.Id;
if (g.Icon != null) panel.Image = g.Icon;
// 2. 建立承載好友列表的控件(例:ListView)
ListView lv = new ListView();
lv.Dock = DockStyle.Fill;
lv.View = View.LargeIcon;
lv.LargeImageList = imageListFriends;
// 綁定該分群好友資料
BindFriendsToListView(lv, g.Id);
// 3. 將 ListView 加入面板
panel.Controls.Add(lv);
// 4. 將面板加入 Sidebar
sidebar1.Panels.Add(panel);
}
}
| 現象 | 原因 | 解決 |
|---|---|---|
| 面板加入後不顯示 | 未設定 Dock = Fill 或面板 Visible = false | 子控件 Dock=Fill,面板 Visible=true |
| 好友列表為空 | 資料綁定邏輯錯誤、ImageList 未指派 | 檢查 BindFriendsToListView 參數與 SQL |
| 摺疊/展開無反應 | 事件未綁定、Sidebar 版本不相容 | 確認引用 DLL 版本、重新註冊控件 |
提問者提到「據說要使用循環什麼的」,foreach 是最直觀的集合遍歷方式;若為索引存取,for (int i=0; i<count; i++) 同樣適用。關鍵在於每次迴圈 new 新物件,避免重複加入同一控件實例。
掌握動態載入模式,即可根據後端資料靈活構建類 QQ 主介面側邊欄。