使用多個 ListView 與 Button,透過動態切換 Dock 屬性與 BringToFront/SendToBack 實現類 QQ 側邊欄摺疊/展開效果。
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
listView1.Clear();
listView1.LargeImageList = imageList1;
listView1.Items.Add("小豬", "小豬", 0);
listView1.Items.Add("小狗", "小狗", 1);
listView1.Items.Add("嬌嬌", "嬌嬌", 2);
}
private void button1_Click(object sender, EventArgs e) // 群組 1
{
listView1.Dock = DockStyle.None;
button1.Dock = DockStyle.Top;
button2.Dock = DockStyle.Bottom;
button3.SendToBack(); button3.Dock = DockStyle.Bottom;
listView1.BringToFront(); listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("小豬", "小豬", 0);
listView1.Items.Add("小狗", "小狗", 1);
listView1.Items.Add("嬌嬌", "嬌嬌", 2);
}
private void button2_Click(object sender, EventArgs e) // 群組 2
{
listView1.Dock = DockStyle.None;
button2.Dock = DockStyle.Top;
button1.SendToBack(); button1.Dock = DockStyle.Top;
button3.Dock = DockStyle.Bottom;
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("北風", "北風", 3);
}
private void button3_Click(object sender, EventArgs e) // 群組 3
{
listView1.Dock = DockStyle.None;
button3.SendToBack(); button3.Dock = DockStyle.Top;
button2.SendToBack(); button2.Dock = DockStyle.Top;
button1.SendToBack(); button1.Dock = DockStyle.Top;
listView1.Dock = DockStyle.Bottom;
listView1.Clear();
listView1.Items.Add("冰雨", "冰雨", 5);
}
}
| 方法/屬性 | 作用 |
|---|---|
| Dock = None | 先移除現有停駐,避免衝突 |
| Dock = Top/Bottom | 按鈕固定頂部/底部,ListView 佔剩餘空間 |
| BringToFront() | 提升 Z-order,確保顯示在最上層 |
| SendToBack() | 降低 Z-order,隱藏至底層 |
| ListView.Clear() + Items.Add | 動態切換群組內容 |
FlowLayoutPanel + 自訂控件或 WPF 實現更優雅的側邊欄