程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WinForm ListBox上下移動選中項(擴展)

WinForm ListBox上下移動選中項(擴展)

編輯:關於.NET

一直都在做asp.net 的東西,WinForm 好久沒碰過了,近乎陌生。今天同事說他的Winform 中的ListBox 無法上下移動項,讓我感覺好奇怪,怎麼可能,不就是交替選項麼,換換位置應該就可以搞定。看了同事的代碼,只覺得一片混沌,實在不忍心再讀下去,就自己操刀寫一下了。(下面的代碼使用了擴展方法,需要編譯器版本>=3.0 ,也可以根據相關語法自行修改成2.0 以下的版本)

代碼功能 :比較簡單,就是當選中ListBox 中的項的時候,點擊上移按鈕,項向上移動,點擊下移按鈕,項向下移動。

[ 使用:建立cs 文件,並COPY 以下代碼置於其中,即可按照示例所用的方式進行使用了]

public static class ListBoxExtension 
  {
    public static bool MoveSelectedItems(this ListBox listBox, bool isUp, Action noSelectAction)
    {
      if (listBox.SelectedItems.Count > 0)
      {
        return listBox.MoveSelectedItems(isUp);
      }
      else
      {
        noSelectAction();
        return false;
      }
    }

    public static bool MoveSelectedItems(this ListBox listBox, bool isUp)
    {
      bool result = true;
      ListBox.SelectedIndexCollection indices = listBox.SelectedIndices;
      if (isUp)
      {
        if (listBox.SelectedItems.Count > 0 && indices[0] != 0)
        {
          foreach (int i in indices)
          {
            result &= MoveSelectedItem(listBox, i, true);
          }
        }
      }
      else
      {
        if (listBox.SelectedItems.Count > 0 && indices[indices.Count - 1] != listBox.Items.Count - 1)
        {
          for (int i = indices.Count - 1; i >= 0; i--)
          {
            result &= MoveSelectedItem(listBox, indices[i], false);
          }
        }
      }
      return result;
    }

    public static bool MoveSelectedItem(this ListBox listBox, bool isUp, Action noSelectAction)
    {
      if (listBox.SelectedItems.Count > 0)
      {
        return MoveSelectedItem(listBox, listBox.SelectedIndex, isUp);
      }
      else
      {
        noSelectAction();
        return false;
      }
    }

    public static bool MoveSelectedItem(this ListBox listBox, bool isUp)
    {
      return MoveSelectedItem(listBox, listBox.SelectedIndex, isUp);
    }

    private static bool MoveSelectedItem(this ListBox listBox, int selectedIndex, bool isUp)
    {
      if (selectedIndex != (isUp ? 0 : listBox.Items.Count - 1))
      {
        object current = listBox.Items[selectedIndex];
        int insertAt = selectedIndex + (isUp ? -1 : 1);

        listBox.Items.RemoveAt(selectedIndex);
        listBox.Items.Insert(insertAt, current);
        listBox.SelectedIndex = insertAt;
        return true;
      }
      return false;
    }
  }

[示例]

private void btnUp_Click(object sender, EventArgs e)
      {
        this.listBox1.MoveSelectedItems(true, () => {
          MessageBox.Show("請選擇");
        });
      }

      private void btnDown_Click(object sender, EventArgs e)
      {
        this.listBox1.MoveSelectedItems(false, () => {
          MessageBox.Show("請選擇");
        });
      }

怎麼樣,代碼是不是足夠簡潔和優雅?基本上可以達到預期的效果了,大家可以根據自己的需求稍做修改。有任何問題和疑問可以留言告訴我!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved