[Hỏi] Sự kiện giữ chuột và kéo (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

khongtu19bk

Thành viên hoạt động
Tham gia
5/12/09
Bài viết
147
Được thích
69
Cho mình hỏi sự kiện giữ chuột và kéo được không?
Giả thiết mình có một cái Label trên userform.

Như các sự kiện trên VBA thì chỉ làm được là: click vào label đó, sau đó di chuyển chuột đi nơi khác thì label di chuyển theo.
< sự kiện click vào label, sự kiện move mouse trên userform, sự kiện click vào userform >

Mình muốn bắt sự kiện click và giữ label kéo đi.
Ai biết xin mách dùm.
 
Cho mình hỏi sự kiện giữ chuột và kéo được không?
Giả thiết mình có một cái Label trên userform.

Như các sự kiện trên VBA thì chỉ làm được là: click vào label đó, sau đó di chuyển chuột đi nơi khác thì label di chuyển theo.
< sự kiện click vào label, sự kiện move mouse trên userform, sự kiện click vào userform >

Mình muốn bắt sự kiện click và giữ label kéo đi.
Ai biết xin mách dùm.
Sự kiện thì không có nhưng nếu biết cụ thể bạn muốn làm gì thì có thể có cách.
 
Upvote 0
re

Sự kiện thì không có nhưng nếu biết cụ thể bạn muốn làm gì thì có thể có cách.

Mình muốn bấm vào label , giữ và kéo ra vị trí khác.
Hiện tại thì mình chỉ có thể làm là bấm vào, ko giữ mà di chuyển chuột, sau đó bấm vào vị trí khác trên userform thì label di chuyển tới vị trí đó :(
 
Upvote 0
Mình muốn bấm vào label , giữ và kéo ra vị trí khác.
Hiện tại thì mình chỉ có thể làm là bấm vào, ko giữ mà di chuyển chuột, sau đó bấm vào vị trí khác trên userform thì label di chuyển tới vị trí đó :(

Dựa vào sự kiện MouseDown và MouseMove để làm:
Mã:
Private PosX As Double, PosY As Double
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  PosX = X: PosY = Y
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If Button > 0 Then
    Me.Label1.Left = Me.Label1.Left + X - PosX
    Me.Label1.Top = Me.Label1.Top + Y - PosY
  End If
End Sub
 
Upvote 0
re

Dựa vào sự kiện MouseDown và MouseMove để làm:
Mã:
Private PosX As Double, PosY As Double
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  PosX = X: PosY = Y
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If Button > 0 Then
    Me.Label1.Left = Me.Label1.Left + X - PosX
    Me.Label1.Top = Me.Label1.Top + Y - PosY
  End If
End Sub
Quá ngưỡng mộ thầy ndu.
Lần đầu thầy live qua yahoo với em là năm 2011, đến bây giờ thầy vẫn còn lợi hại quá :)

Em tạm thời memo như thế này
l1.jpg

Em hiểu dòng code button >0 là để ám chỉ chừng nào sự kiện click vào đối tượng label1 còn được thực thi cho tới khi nào nhả chuột thì dừng.
Thực sự thì cái button này là gì hả thầy?
 
Lần chỉnh sửa cuối:
Upvote 0
Em hiểu dòng code button >0 là để ám chỉ chừng nào sự kiện click vào đối tượng label1 còn được thực thi cho tới khi nào nhả chuột thì dừng.
Thực sự thì cái button này là gì hả thầy?

Nghĩa là: chừng nào tay bạn còn nhấn nút trái chuột thì còn.. chơi, thả tay ra mới được nghỉ
 
Upvote 0
Ủa sao em thấy cứ muốn lôi Label trong Userform đi đâu thì cứ Click vào Label đó, giữ chuột và lôi đi chổ khác là được chứ cần chi Code Sự Kiện.
Mong các Anh giải thích.
 
Upvote 0
Ủa sao em thấy cứ muốn lôi Label trong Userform đi đâu thì cứ Click vào Label đó, giữ chuột và lôi đi chổ khác là được chứ cần chi Code Sự Kiện.
Mong các Anh giải thích.
Bạn làm được điều đó? Tôi không tin đâu!
Bạn quay phim quá trình bạn click vào Label và lôi nó đi tôi xem thử
 
Upvote 0
Thầy cho em hỏi có phải là trong thiết kế Form phải không Thầy.
Em làm như sau, vào VBE -> Insert Userform -> chọn Label -> vẻ Label1 lên Userform(góc trái của Userform).
Nếu muốn Label1 nằm ở góc phải Userform thì em click chọn Label1, giữ chuột kéo về góc phải Userform.
Nếu muốn copy thì nhấn Ctrl + giữ chuột kéo ra chổ nào muốn thì được them một Label.
Em không có chương trình quay phim màn hình Thầy ơi.
 
Upvote 0
Thầy cho em hỏi có phải là trong thiết kế Form phải không Thầy.
Em làm như sau, vào VBE -> Insert Userform -> chọn Label -> vẻ Label1 lên Userform(góc trái của Userform).
Nếu muốn Label1 nằm ở góc phải Userform thì em click chọn Label1, giữ chuột kéo về góc phải Userform.
Nếu muốn copy thì nhấn Ctrl + giữ chuột kéo ra chổ nào muốn thì được them một Label.
Em không có chương trình quay phim màn hình Thầy ơi.
Nếu xem bài #1 chưa rõ thì nhìn hình ở bài #5 phải rõ hơn chứ?
 
Upvote 0
Em hơi ngu, nên nhìn hình 5 em cũng chả hiểu.
Em xin hỏi lại là trong cửa sổ VBE, hay Show Form.
1/nếu trong VBE thì em lôi Label đi đâu cũng được.
2/nếu Show Form thì click vào Label không ăn thua.
Em hơi chậm tiêu, mong mọi người nói rỏ là ở đâu ah!
 
Upvote 0
em không xem kỹ code ^^
tại coi tấm ảnh cuối cùng của #5 thì thấy left = left +..... viết vầy thì kéo form chứ sao thầy
Bỏ qua việc hiểu lầm thì thật ra hiểu như bài 5 cũng chưa đúng lắm
- PosX không phải là Left của Label mà là Left tại vị trí ta click chuột
- PosY không phải là Top của Label mà là Top tại vị trí ta click chuột
---------------
Có thể thử nghiệm bằng cách:
- Vẽ 1 Label trên UserForm (nên tô màu Label cho dễ nhìn)
- Xong chèn code này vào:
Mã:
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Me.Caption = X & " - " & Y
End Sub
- Show form rồi click chuột đâu đó trên Label, nhìn lên thanh tiêu đề của UserForm để xem kết quả. Click tiếp nơi khác vài lần và kiểm tra kết quả
===> Suy ra chân lý
Đương nhiên, sự kiện MOUSE thì các đối số của code cũng phải liên quan đến MOUSE chứ nhỉ!
 
Upvote 0
Web KT

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

Back
Top Bottom