226
Chương 6: Windows Form
}
}
18.
18.
Th c hi n thao tác kéo-và-th
ự ệ
ả
Th c hi n thao tác kéo-và-th
ự ệ
ả
Bạn cần sử dụng tính năng kéo-và-thả để trao đổi thông tin giữa hai điều kiểm
(cũng có thể trong các cửa sổ hoặc các ứng dụng khác nhau)
Khởi động thao tác kéo-và-thả bằng phương thức
DoDragDrop
của lớp
Control
, và
đáp ứng cho sự kiện
DragEnter
và
DragDrop
.
Thao tác kéo-và-thả cho phép người dùng chuyển thông tin từ nơi này đến nơi khác bằng cách
nhắp vào một item và rê nó đến một vị trí khác. Thao tác kéo-và-thả gồm ba bước cơ bản sau
đây:
1. Người dùng nhắp vào điều kiểm, giữ chuột, và bắt đầu rê. Nếu điều kiểm hỗ trợ tính
năng kéo-và-thả, nó sẽ thiết lập riêng một vài thông tin.
2. Người dùng rê chuột lên một điều kiểm khác. Nếu điều kiểm này chấp nhận kiểu nội
dung được rê đến, con trỏ chuột sẽ đổi thành hình mũi tên với trang giấy
. Nếu
không, con trỏ chuột sẽ đổi thành hình tròn với một vạch thẳng bên trong
.
3. Khi người dùng thả chuột, dữ liệu được gửi đến điều kiểm, và điều kiểm này có thể xử
lý nó một cách thích hợp.
Để hỗ trợ tính năng kéo-và-thả, bạn phải thụ lý các sự kiện
DragEnter
,
DragDrop
, và
MouseDown
. Ví dụ này sử dụng hai
TextBox
, đây là đoạn mã gắn các phương thức thụ lý sự kiện
mà chúng ta sẽ sử dụng:
this.TextBox2.MouseDown += new MouseEventHandler(this.TextBox_MouseDown);
this.TextBox2.DragDrop += new DragEventHandler(this.TextBox_DragDrop);
this.TextBox2.DragEnter += new DragEventHandler(this.TextBox_DragEnter);
this.TextBox1.MouseDown += new MouseEventHandler(this.TextBox_MouseDown);
this.TextBox1.DragDrop += new DragEventHandler(this.TextBox_DragDrop);
this.TextBox1.DragEnter += new DragEventHandler(this.TextBox_DragEnter);
Để bắt đầu một thao tác kéo-và-thả, bạn hãy gọi phương thức
DoDragDrop
của điều kiểm
nguồn. Lúc này, bạn cần cung cấp dữ liệu và chỉ định kiểu hoạt động sẽ được hỗ trợ (chép, di
chuyển…). Ví dụ dưới đây sẽ khởi tạo một thao tác kéo-và-thả khi người dùng nhắp vào một
TextBox
:
private void TextBox_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {
TextBox txt = (TextBox)sender;