Cấp bậc tác giả:

DOTNET

Xử lý Cut, Copy, Paste, Select All, Clear All trên ListBox

Được viết bởi webmaster ngày 12/05/2013 lúc 10:18 PM
Bạn đã bao giờ tưởng tượng cuộc sống của chúng ta mà không cần bộ nhớ tạm ("Cut-Copy-Paste") trong thời đại máy tính ngày nay? Sử dụng clipboard là rất phổ biến và rất thường xuyên, nhưng ở đây tôi thảo luận về cách code chúng(trên một điều khiển ListBox) thay vì chỉ sử dụng chúng.
  • 0
  • 5133
Tải tệp tin: Click ở đây

Xử lý Cut, Copy, Paste, Select All, Clear All trên ListBox


Bạn đã bao giờ tưởng tượng cuộc sống của chúng ta mà không cần bộ nhớ tạm ("Cut-Copy-Paste") trong thời đại máy tính ngày nay? Sử dụng clipboard là rất phổ biến và rất thường xuyên, nhưng ở đây tôi thảo luận về cách code chúng(trên một điều khiển ListBox) thay vì chỉ sử dụng chúng. 

Trong bài viết này, tôi sẽ chỉ cho một số cách thức chỉnh sửa, như: Select All, Clear All, Cut, Copy và Paste trên điều khiển ListBox. Để chứng minh điều này, tôi đã tạo ra một ứng dụng Win Form đơn giản với điều khiển Menu và ListBox . Trên Menu Strip, tất cả các hoạt động được nhập vào như các mục menu với phím tắt. 

Để hiểu rõ hơn, code mẫu được đính kèm với bài viết này. Đây là ảnh chụp màn hình của giao diện: 

listbox_03.jpg

listbox_02.jpg

Select All

Để select All các mục trong ListBox, trước tiên chúng ta xóa tất cả các mặt hàng được lựa chọn sau đó chọn từng mục trong khi lặp lại thông qua toàn bộ danh sách.

private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
{
      try
      {
            listBox1.SelectedItems.Clear(); 
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                 listBox1.SetSelected(i, true);
             }
       }
       catch (Exception ex)
       {
             MessageBox.Show(ex.Message);
        }
}

Paste

Để dán dữ liệu vào văn bản ListBox, trước tiên chúng ta lấy dữ liệu văn bản từ bộ đệm bằng cách sử dụng lớp Clipboard. Vì nó là ListBox nơi mỗi mục trong ListBox phải tương ứng với mỗi dòng trong bộ đệm, ở đây tôi phân tích các dữ liệu văn bản bằng một ký tự dòng mới và sau đó lưu trữ mỗi dòng là một mục mới trong ListBox.

private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
      try
      {
            // Getting Text from Clip board
            string s = Clipboard.GetText(); 
            //Parsing criteria: New Line 
            string[] lines = s.Split('\n'); 
            foreach (string ln in lines)
            {
                 listBox1.Items.Add(ln.Trim());
            }
       }
       catch (Exception ex)
       {
             MessageBox.Show(ex.Message);
        }
}

Copy

Để sao chép các dữ liệu văn bản vào bộ đệm, chúng ta lặp lại toàn bộ bộ sưu tập sản phẩm được chọn và tiếp tục thêm các mục vào đối tượng StringBuilder. Để giữ cho tất cả các mục trong hàng mới, tôi đang sử dụng ở đây phương thức AppendLine() sau khi chèn văn bản của mục vào StringBuilder. Cuối cùng tôi sử dụng Clipboard.SetData() để sao chép dữ liệu vào bộ đệm.  

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
      try
      {
            StringBuilder sb = new StringBuilder(); 
            foreach (object row in listBox1.SelectedItems)
            {
                 sb.Append(row.ToString());
                 sb.AppendLine();
            }
            sb.Remove(sb.Length - 1, 1); // Chỉ cần để tránh sao chép cuối trống hàng 
            Clipboard.SetData(System.Windows.Forms.DataFormats.Text, sb.ToString());
       }
       catch (Exception ex)
       {
            MessageBox.Show(ex.Message);
       }
}

Cut

Về cơ bản hoạt động cắt là sự kết hợp của việc sao chép và gỡ bỏ các mục được lựa chọn. Để làm điều này, tôi bắt đầu sao chép tất cả các mục đã chọn (như trên) vào bộ đệm. Sau khi sao chép, tôi loại bỏ tất cả các mục được lựa chọn từ ListBox. Chúng ta cần bộ sưu tập để giữ cho tất cả các mục đã chọn. Tôi đang tạo ra bộ sưu tập riêng biệt này bởi vì tôi không thể xóa các mục từ bộ sưu tập trong khi lặp lại các bộ sưu tập tương tự sử dụng một vòng lặp foreach. 

private void cutToolStripMenuItem_Click(object sender, EventArgs e)
{
     try
     {
          StringBuilder sb = new StringBuilder();                
          // we use this collection to keep all the Selected Items
          List<object> selectedItemList = new List<object>();
          foreach (object row in listBox1.SelectedItems)
          {
                sb.Append(row.ToString());
                sb.AppendLine();
                
                // Keep on adding selected item into a new List of Object
                selectedItemList.Add(row);
           } 
          sb.Remove(sb.Length - 1, 1);    // Just to avoid copying last empty row                
          Clipboard.SetData(System.Windows.Forms.DataFormats.Text, sb.ToString());
          // Removing selected items from the ListBox
           foreach (object ln in selectedItemList)
           {
                listBox1.Items.Remove(ln);
            }
     }
     catch (Exception ex)
     {
           MessageBox.Show(ex.Message);
      }
}

Clear All

Đây là vận hành đơn giản nhất. Chúng ta cần phải chỉ rõ ràng tất cả các mục từ ListBox sử dụng được xây dựng trong phương thức Clear().

private void clearAllToolStripMenuItem_Click(object sender, EventArgs e)
{
     listBox1.Items.Clear();
}

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML