Điều khiển ListView và Kỹ thuật DrapDrop

nguyenac

Administrator
Staff member
18/11/08
22.554
1
38
ListView thường được dùng để liệt kê danh sách có kèm theo biểu tượng như khung phải trên Windows Explorer.

1/- ListView
Các thuộc tính của ListView :

View
Quy định cách hiển thị của điều khiển :
- LargeIcon : với biểu tượng lớn (mặc định).
- SmallIcon : với biểu tượng nhỏ.
- Details : với các thông tin chi tiết.
- List : dạng danh sách.

Items
Tập hợp các mục thông tin của ListView.

CheckBoxes
Có hiển thị CheckBox hay không.

GridLines
Có hiển thị đường kẻ dòng cột khi ViewDetails hay không. Mặc định là không.

LargeImageList, SmallImageList
Nguồn hình ảnh sử dụng cho các mục trên ListView.

CheckedItems
Tập hợp các mục chọn khi có CheckBox (được chọn).

SelectedItems
Tập hợp các mục chọn.

Columns
Tập hợp các cột hiển thị khi ViewDetails. Các thông tin cần lưu ý khi tạo cột là Text - tiêu đề cột, TextAlign - canh lề nội dung cột và Width - độ rộng cột.
Thiết kế các cột trên ListView
ListViewItem
Các mục thông tin trên ListView được gọi là ListViewItem với các thông tin sau :

BackColor, ForeColor
Màu nền, màu chữ.

Bounds
Các biên của ListViewItem.

Checked
Có được chọn hay không khi có CheckBox.

Focused
Có đang nhận focus hay không.

Font
Font chữ hiển thị.

Selected
Có được chọn hay không khi không có CheckBox.

Text
Nội dung hiển thị (giá trị cột đầu tiên).

ImageIndex, ImageKey
Quy định thứ tự hay khóa của hình ảnh nào trên ImageList hiển thị trên ListItem.

SubItems
Các mục tin khác của ListViewItem.

Các thao tác trên ListViewItem :

Tạo mới ListViewItem :

Hoặc

Thêm ListViewItem vào Items :

Loại bỏ ListViewItem khỏi Items :

Hoặc

Loại bỏ tất cả ListViewItem khỏi Items :

Các sự kiện của ListViewItem :
ItemCheck, ItemChecked
Nếu ListViewCkeckBoxes = True, sự kiện xảy ra khi trạng thái Checked của ListItem thay đổi.

ItemSelectionChanged
Sự kiện xảy ra khi một ListItem được chọn.

2/- Kỹ thuật DragDrop
DragDrop là kỹ thuật cho phép người dùng kéo thông tin từ điều khiển này thả trên điều khiển khác để sao chép, di chuyển thông tin một cách trực quan như thao tác với tập tin, thư mục trên Windows Explorer.

Về phía người lập trình phải xử lý các sự kiện để di chuyển hay sao chép dữ liệu tương ứng. Sau đây là một số điểm cần chú ý khi thực hiện kỹ thuật này :

Điều khiển nguồn
Sự kiện MouseDown
Sự kiện xảy ra khi nhấn chuột trên điều khiển. Trong xử lý sự kiện này, bạn kiểm tra xem người dùng có nhấn chuột trái với ý định xác định vùng chọn thông tin cần di chuyển. Nếu có, ghi nhận vùng bắt đầu chọn.

Sự kiện MouseMove
Sự kiện xảy ra khi chuột di chuyển trên điều khiển. Trong xử lý sự kiện này, bạn kiểm tra xem người dùng có nhấn chuột trái với ý định kéo thông tin trên điều khiển này đi đến nơi khác. Nếu có, gọi thực hiện phương thức DoDragDrop mô tả bên dưới.

Phương thức DoDragDrop
Khi gọi phương thức này, cần xác định các tham số :
- Thông tin người dùng cần di chuyển tùy thuộc vùng chọn đã xác định ở trên.
- Xác định hình thức di chuyển. Các giá trị có thể là :

Sự kiện GiveFeedBack
Sự kiện xảy ra khi phương thức DoDragDrop đã được gọi thành công. Sự kiện này được dùng để xử lý biểu tượng chuột (Cursor) tùy theo hình thức di chuyển, …

Sự kiện QueryContinueDrag
Sự kiện xảy ra khi thay đổi phím nhấn hay khi muốn kiểm tra vùng di chuyển lạc ra khỏi màn hình để xử lý tương ứng.

Điều khiển đích

Thuộc tính AllowDrop

Các điều khiển đều có thuộc tính này và giá trị mặc định là False, không phát sinh sự kiện để tiếp nhận dữ liệu thả trên nó.

Nếu là True, điều khiển sẽ phát sinh các sự kiện sau để cho phép tiếp nhận thông tin thả trên điều khiển từ các điều khiển khác.

Sự kiện DragOver
Sự kiện xảy ra khi thông tin từ điều khiển khác rê trên điều khiển. Trong xử lý sự kiện này, bạn sẽ kiểm tra dữ liệu rê có tồn tại và đúng kiểu dữ liệu có thể tiếp nhận hay không để có thể có quy định giá trị DragDropEffects tương ứng.

Sự kiện DragDrop
Sự kiện xảy ra khi thông tin từ điều khiển khác thả vào điều khiển. Trong xử lý sự kiện này, bạn cũng sẽ kiểm tra dữ liệu thả có tồn tại và đúng kiểu dữ liệu để tiếp nhận hay không. Nếu phù hợp, xử lý để cập nhật thông tin trên điều khiển đích theo giá trị của DragDropEffects.

Ví dụ minh họa
Yêu cầu
Trên màn hình có hai ListBox ListA và ListB, cho phép người dùng chọn nhiều dòng trên ListA kéo thả trên ListB, các dòng chọn sẽ chuyển sang ListB và mất trên ListA.

Thiết kế
Định thuộc tính SelectionMode của ListA là MultiExtended cho phép chọn nhiều dòng.
Thuộc tính AllowDrop của ListB là True cho phép phát sinh sự kiện DragDrop khi thông tin từ điều khiển khác thả trên nó.

Cài đặt
Sự kiện Load của Form : xuất các giá trị cho ListA

Sự kiện MouseMove của ListA : kiểm tra có nhấn chuột trái và có các dòng chọn thì gọi DoDragDrop của ListA với các dòng chọn của ListA theo hình thức chuyển đi DragDropEffects.Move.

Sự kiện DragOver của ListB : kiểm tra thông tin rê đến có phải thông tin có thể tiếp nhận hay không, trường hợp cụ thể ở đây là tập hợp các dòng chọn (SelectedObjectCollection). Nếu phù hợp, xét thêm hình thức chuyển là sao chép hay chuyển dời để gán cho tham biến e.Effects giá trị tương ứng vì tham số này sẽ chuyển cho sự kiện DragDrop sau đó.

Sự kiện DragDrop của ListB : kiểm tra thông tin thả trên điều khiển có phải thông tin có thể tiếp nhận hay không, trường hợp cụ thể ở đây là tập hợp các dòng chọn (SelectedObjectCollection) và chuyển thành loại dữ liệu như lúc gởi. Nếu phù hợp, xét thêm hình thức chuyển là sao chép hay chuyển dời để xử lý tương ứng. Trường hợp ở đây là chuyển dời nên sau khi thêm vào cần loại bỏ khỏi điều khiển nguồn.

Trên đây là các xử lý chính, ngoài ra các xử lý sau chỉ nhằm làm sinh động các thao tác kéo thả của người dùng chứ không ảnh hưởng đến thông tin di chuyển.

Nếu muốn thay đổi biểu tượng chuột, xử lý sự kiện GiveFeedBack của ListA để thay đổi, nhưng cần thay đổi giá trị của e.UseDefaultCursorsFalse, trước khi thay đổi Cursor.Current (đây là đối tượng Shared dùng chung).

Sử dụng sự kiện QueryContinueDrag để ngưng hành động kéo rê, nếu người dùng kéo ra khỏi màn hình. Trong quá trình kéo rê, nếu người dùng nhấn phím Escape cũng sẽ ngưng hành động kéo rê. Trong đoạn lệnh sau, bạn sử dụng thuộc tính shared MousePosition của lớp Control cho biết tọa độ của trỏ chuột hiện tại trên màn hình (Screen) để so sánh với tọa độ của vùng làm việc màn hình trên Screen xem có vượt ngoài phạm vi trên bốn phía : trái, phải, trên, dưới hay chưa mà xử lý ngưng kéo rê.

Nếu muốn thay đổi biểu tượng chuột, xử lý sự kiện GiveFeedBack của ListA để thay đổi, nhưng cần thay đổi giá trị của e.UseDefaultCursorsFalse trước khi thay đổi Cursor.Current (đây là đối tượng Shared dùng chung).

Đối với các loại điều khiển khác, bạn cũng xử lý tương tự.

Thông tin di chuyển có thể là chuỗi, hình ảnh, tập tin, đối tượng, …

Lưu ý : kiểu của dữ liệu khi thả trên đích phải tương ứng với kiểu dữ liệu khi rê từ nguồn, nếu không sẽ không thực hiện được DragDrop.
 

Facebook Comment

Find Diễn đàn Công nghệ thông tin và truyền thông on mobile

Thành viên trực tuyến

Không có thành viên nào trực tuyến.

Thống kê diễn đàn

Chủ đề
31.050
Bài viết
33.103
Thành viên
5.957
Thành viên mới nhất
susu93439

Mobile app users
0
Latest mobile user

Tài nguyên mới