承接上篇文章,本文詳細解析 ListBox 項目移動 (向上/向下) 的演算法邏輯,並展示完整執行介面截圖。
ListItem 保存目前選中項目的 Text 與 ValueSelectedIndex 保持選中狀態跟隨移動
// 向上移位與向下移位事件處理
if ((sender == Up && lstItem.SelectedIndex > 0) ||
(sender == Down && lstItem.SelectedIndex < lstItem.Items.Count - 1))
{
int offset = (sender == Up) ? -1 : 1;
// 建立暫存項目
ListItem temp = new ListItem(
lstItem.SelectedItem.Text,
lstItem.SelectedItem.Value
);
// 交換 Text
lstItem.Items[lstItem.SelectedIndex].Text =
lstItem.Items[lstItem.SelectedIndex + offset].Text;
lstItem.Items[lstItem.SelectedIndex + offset].Text = temp.Text;
// 交換 Value
lstItem.Items[lstItem.SelectedIndex].Value =
lstItem.Items[lstItem.SelectedIndex + offset].Value;
lstItem.Items[lstItem.SelectedIndex + offset].Value = temp.Value;
// 更新選中索引 (視覺跟隨)
lstItem.SelectedIndex += offset;
}
offset 變數統一處理上移 (-1) 與下移 (+1) 邏輯,避免重複代碼Items[index].Text/Value 屬性進行就地交換,效率最高SelectedIndex > 0,下移需 SelectedIndex < Count - 1
| 按鈕 | 功能 | 啟用條件 |
|---|---|---|
| 新增項目 | 將文字框內容加入列表 | 文字框非空 |
| 刪除 | 移除選中項目 | 有項目被選中 |
| 向上移位 | 與上一項交換位置 | 非第一項 |
| 向下移位 | 與下一項交換位置 | 非最後一項 |
| 至首項 | 選中第一項 | 列表非空 |
| 上一項 | 選中上一項 | 非第一項 |
| 下一項 | 選中下一項 | 非最後一項 |
| 至尾項 | 選中最後一項 | 列表非空 |
最終篇將展示完整的 ASP.NET WebForms 版本實作,包含完整 ASPX 標記與伺服器端代碼,示範相同功能在 Web 環境下的實現方式。