Gắn sự kiện cho controls bằng cách dùng Me.Controls.Add

Liên hệ QC

vba_gpe

Thành viên thường trực
Tham gia
15/12/10
Bài viết
296
Được thích
44
Nghề nghiệp
Thất nghiệp
Chào anh chị trong diễn đàn.

Em có build các control bằng cách dùng phương thức Me.Controls.Add.
Tuy nhiên, em có vấn đề này vẫn chưa rõ nên nhờ anh/chị trong diễn đàn mình tư vấn.
1. Khi build nhiều control thì chỉ gắn sự kiện được cho controls cuối cùng:
Mã:
Option Explicit
Private WithEvents IMG  As Image

Private Sub bt_ok_Click()
    AddControl
End Sub

'Sự kiện  khi image click
Private Sub img_Click()
    MsgBox "Image Click"
End Sub

'Sự kiện  thêm cotrol vào form
Private Sub AddControl()
    Dim i As Long
'    10: Là số image em muốn add
    For i = 1 To 10
'Đây là ví dụ của em
        CreateImg "img" & i, i * 2 + 4, i * 3 + 10, i + 10, i + 2
'        CreateImg "img" & i, Left, Top, Width, height
'        Trong đó: Các thông số left, top, width, height: Là thông số để xác định  vị trí, kích thước của các  image mới được tạo (Thông số do mình thiết đặt. Trên code là ví dụ thôi ạ )
'        "img" & i: Là tên c?a controls
   Next
End Sub

'Sự kiện tạo image
Private Sub CreateImg(cName As String, cLeft As Single, cTop As Single, cWidth As Single, cHeight As Single)
Set IMG = Me.Controls.Add("Forms.Image.1", cName, True)
With IMG
    .Name = cName
    .Top = cTop
    .Left = cLeft
    .Width = cWidth
End With
End Sub
Em bị vướng:
- Hiện tại em chỉ gắn sự kiện được cho image số 10 (image cuối cùng). (Click vào imge 10 thì nó chạy sự kiện). Bây giờ em muốn 9 cái còn lại cũng đều hiểu sự kiện luôn .
- Nếu thay vì em phải sét 10 cái img khác nhau trên đầu cùng của code này thì có cách nào khác không ạ?

2. Cũng như trường hợp 1, nhưng thay vì sự kiện click chuột, thì có cách nào gắn thêm nhiều sự kiện khác tương ứng với các sự kiện mặc định phải có tương ứng của control mình vừa tạo (ví dụ: mouseUp, MouseDown..v.v.) ..thì kỹ thuật gắn thế nào ạ?
Trong .net có cách AddHandler theo cấu trúc AddHandler (Object as Event, Object as delegate) nhưng trên vba thì em tìm không ra ạ. :(

Em cảm ơn mọi người. Chúc mọi người 1 kỳ nghĩ lễ vui và thành công.
 
Chào anh chị trong diễn đàn.

Em có build các control bằng cách dùng phương thức Me.Controls.Add.
Tuy nhiên, em có vấn đề này vẫn chưa rõ nên nhờ anh/chị trong diễn đàn mình tư vấn.
1. Khi build nhiều control thì chỉ gắn sự kiện được cho controls cuối cùng:
Mã:
Option Explicit
Private WithEvents IMG  As Image

Private Sub bt_ok_Click()
    AddControl
End Sub

'Sự kiện  khi image click
Private Sub img_Click()
    MsgBox "Image Click"
End Sub

'Sự kiện  thêm cotrol vào form
Private Sub AddControl()
    Dim i As Long
'    10: Là số image em muốn add
    For i = 1 To 10
'Đây là ví dụ của em
        CreateImg "img" & i, i * 2 + 4, i * 3 + 10, i + 10, i + 2
'        CreateImg "img" & i, Left, Top, Width, height
'        Trong đó: Các thông số left, top, width, height: Là thông số để xác định  vị trí, kích thước của các  image mới được tạo (Thông số do mình thiết đặt. Trên code là ví dụ thôi ạ )
'        "img" & i: Là tên c?a controls
   Next
End Sub

'Sự kiện tạo image
Private Sub CreateImg(cName As String, cLeft As Single, cTop As Single, cWidth As Single, cHeight As Single)
Set IMG = Me.Controls.Add("Forms.Image.1", cName, True)
With IMG
    .Name = cName
    .Top = cTop
    .Left = cLeft
    .Width = cWidth
End With
End Sub
Em bị vướng:
- Hiện tại em chỉ gắn sự kiện được cho image số 10 (image cuối cùng). (Click vào imge 10 thì nó chạy sự kiện). Bây giờ em muốn 9 cái còn lại cũng đều hiểu sự kiện luôn .
- Nếu thay vì em phải sét 10 cái img khác nhau trên đầu cùng của code này thì có cách nào khác không ạ?

2. Cũng như trường hợp 1, nhưng thay vì sự kiện click chuột, thì có cách nào gắn thêm nhiều sự kiện khác tương ứng với các sự kiện mặc định phải có tương ứng của control mình vừa tạo (ví dụ: mouseUp, MouseDown..v.v.) ..thì kỹ thuật gắn thế nào ạ?
Trong .net có cách AddHandler theo cấu trúc AddHandler (Object as Event, Object as delegate) nhưng trên vba thì em tìm không ra ạ. :(

Em cảm ơn mọi người. Chúc mọi người 1 kỳ nghĩ lễ vui và thành công.
Bạn không có file đính kèm, cũng không nói rõ tạo controls để làm gì nên làm biếng xem code quá
Thôi thì có file này tôi làm cũng khá lâu rồi: Tạo form và tất tần tật các controls cùng các sự kiện đi kèm. Bạn mang về tham khảo trước nhé
 

File đính kèm

  • CreateFormAndControls_3.xlsb
    19.5 KB · Đọc: 45
Upvote 0
Bạn không có file đính kèm, cũng không nói rõ tạo controls để làm gì nên làm biếng xem code quá
Thôi thì có file này tôi làm cũng khá lâu rồi: Tạo form và tất tần tật các controls cùng các sự kiện đi kèm. Bạn mang về tham khảo trước nhé
Anh tạo Form ... xong xóa luôn Form xóa Class ........... chơi kiểu chốn tìm này mấy bạn mới học code ko biết đâu mà lần ... chạy xong nó thấy form chớp chớp nháy nháy đẹp ghê ..... xong mở coi ko thấy Form mô hết .............:D:eek:
 
Upvote 0
Anh tạo Form ... xong xóa luôn Form xóa Class ........... chơi kiểu chốn tìm này mấy bạn mới học code ko biết đâu mà lần ... chạy xong nó thấy form chớp chớp nháy nháy đẹp ghê ..... xong mở coi ko thấy Form mô hết .............:D:eek:
Bài này chủ yếu trả lời phần tạo controls và các sự kiện thôi (cụ thể là sự kiện MouseMove nên bạn thấy nó chớp chớp vậy đó). Đương nhiên, đã tạo được thì cũng xóa được
Code hồi trước viết chưa hay lắm nhưng vì tôi cũng không có nhu cầu sử dụng nên không sửa lại. Đưa lên đây để mọi người tham khảo, ai thích, cứ dùng, ai thấy chưa đúng yêu cầu, cứ sửa (nhưng sửa sao cho hay hay... đừng chơi chiêu "Function TV" giống lần trước, chẳng ra cái gì cả)
 
Upvote 0
Em cảm ơn thầy ndu96081631 và mọi người nhiều.
Mỗi lần thầy ndu96081631 comment bài viết là lại học được thêm nhiều điều mới và lạ.
Em sẽ nghiên cứu file mẫu thầy gửi để áp vào trường hợp của em.
 
Upvote 0
Bài này chủ yếu trả lời phần tạo controls và các sự kiện thôi (cụ thể là sự kiện MouseMove nên bạn thấy nó chớp chớp vậy đó). Đương nhiên, đã tạo được thì cũng xóa được
Code hồi trước viết chưa hay lắm nhưng vì tôi cũng không có nhu cầu sử dụng nên không sửa lại. Đưa lên đây để mọi người tham khảo, ai thích, cứ dùng, ai thấy chưa đúng yêu cầu, cứ sửa (nhưng sửa sao cho hay hay... đừng chơi chiêu "Function TV" giống lần trước, chẳng ra cái gì cả)
Cảm ơn thầy NDu nhiều ah
 
Upvote 0
Web KT

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

Back
Top Bottom