• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Kỹ thuật Multicasting trong Visual Basic

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Kỹ thuật Multicasting trong Visual Basic

Postby truongphu » Mon 12/05/2008 10:09 am

Tên bài viết: Kỹ thuật Multicasting trong Visual Basic
Tác giả: gửi bởi thuongall vào ngày Thứ 3 21/03/2006 12:32 pm
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Copy từ Diễn đàn cũ


Kỹ thuật Multicasting trong Visual Basic

1. Multicasting là gì

Theo đúng thuật ngữ Tin học thì Multicasting là một phương thức truyền văn bản, âm thanh hay video theo kiểu một – nhiều (one-to-many) đến một nhóm người trên mạng Internet hoặc mạng nội bộ, thay vì phải gửi thông tin tới từng cá nhân, thông tin sẽ được gửi cho cả nhóm Multicast.

Tuy nhiên Multicasting ở VB không phải được định nghĩa như vậy, nó chỉ kế thừa tư tưởng “một – nhiều” ở khái niệm trên. Multicasting là khả năng một đối tượng báo cho các đối tượng khác những dữ liệu, sự kiện xảy đến với nó, hay là khả năng một đối tượng có thể xử lý sự kiện thay cho rất nhiều đối tượng khác. Chẳng hạn ta có 10 đối tượng và có một đối tượng có khả năng Multicasting cho chúng, việc xử lý sự kiện cho đối tượng này được dùng chung cho cả 10 đối tượng kia. Điều này nghe có vẻ giống như việc xử lý sự kiện cho một mảng đối tượng, nhưng không phải. Để hiểu được khả năng của kỹ thuật này bạn hãy nghiên cứu vấn đề dưới đây.

2. Một vấn đề thí dụ

Giả sử chúng ta đang thiết kế một Form thông tin về sản phẩm trong đó có 2 TextBox để nhập tên sản phẩm và mã số sản phẩm.

Cho rằng tên sản phẩm chỉ gồm các ký tự in hoa (A-Z) và mã số sản phẩm chỉ gồm các chữ số (0-9). Khi nhập dữ liệu vào 2 TextBox không thoả mãn yêu cầu này thì chương trình phải xử lý và báo nhập lại. Đó quả là một điều phiền phức – nhưng lại là một điều thường thấy ở hầu hết mọi chương trình. Có một giải pháp chuyên nghiệp cho việc nhập liệu này được đưa ra thế này: Bằng cách nào đó ở TextBox1 người dùng gõ chữ thường tự động chuyển thành chữ hoa, gõ chữ số thì không có tác dụng (nghĩa là người dùng gõ chữ số 1, 2,… TextBox không thay đổi). Còn ở TextBox2 chỉ nhận gõ chữ số, gõ ký tự không có tác dụng.

Có thể bạn không nghĩ ra cách thực hiện giải pháp hay nghĩ ra một cách “láu lỉnh” nào đó, nhưng với Multicasting bạn sẽ thực hiện dễ dàng và khoa học hơn nhiều.

3. Multicasting cho Case TextBox

Multicasting cho TextBox1 và TextBox2 ở trên thì khá giống nhau, chúng ta sẽ chỉ giải quyết trường hợp TextBox1. Bạn mở một Project mới và thiết kế một Form với 3 TextBox có tên là Text1, Text2, Text3, khi thực hiện Form như sau:

Ta sẽ xây dựng một Multicasting cho 3 TextBox này để xử lý sự kiện gõ phím của người dùng, sao cho như bạn thấy – người dùng gõ vào “tinhoc” nhưng vẫn hiển thị “TINHOC” còn gõ bất kỳ phím nào khác đều không có hiệu lực trừ phím Back Space (xoá trái). Ngoài ra ta làm thêm tính năng khi nhận Focus, dữ liệu trong TextBox được bôi đen để có thể nhập mới, đây cũng là tính năng hữu ích. Đối tượng Multicasting này là một class trong VB có các hàm xử lý cần thiết tuỳ theo loại đối tượng cần Multicasting (Multicasting có thể áp dụng cho mọi loại đối tượng), ở đây là TextBox – ta xây dựng một class với các thủ tục xử lý sự kiện KeyPress và GotFocus. Sau đó với cú pháp đặc biệt đã quy định sẵn của VB, các sự kiện này được truyền sang cho 3 TextBox trên Form làm cho chúng có được tính năng như ta mong muốn.

Chọn menu Project, Add Class Module, nhập vào đoạn code cho Class Module như sau:

Code: Select all

  1. Public WithEvents MTB As TextBox
  2. Private Sub MTB_KeyPress(key As Integer)
  3. Select Case key
  4. Case 8, 65 To 90
  5. key = key
  6. Case 97 To 122
  7. key = key - 32
  8. Case Else
  9. key = 0
  10. End Select
  11. End Sub
  12.  
  13. Private Sub MTB_GotFocus()
  14. MTB.SelStart = 0
  15. MTB.SelLength = Len(MTB.Text)
  16. End Sub

Ghi Class Module với tên MTB (Multicasting TextBox). Để ý cú pháp Public WithEvents MTB As TextBox, từ khoá WithEvents làm cho MTB sẽ nhận mọi sự kiện của TextBox.

Tiếp theo vào code của Form nhập nội dung như sau:

Code: Select all

  1. Public txt1 As New MTB
  2. Public txt2 As New MTB
  3. Public txt3 As New MTB
  4. Private Sub Form_Load()
  5. Set txt1.MTB = Text1
  6. Set txt2.MTB = Text2
  7. Set txt3.MTB = Text3
  8. End Sub

Như ta thấy txt1, txt2, txt3 là các thể hiện của MTB, bằng việc gán các TextBox chuẩn là Text1, Text2, Text3 cho thuộc tính MTB của Class MTB, tất cả các sự kiện của 3 TextBox chuẩn đều qua MTB để xử lý. Trong thủ tục xử lý MTB_KeyPress(key As Integer), key được gán bằng giá trị nào thì TextBox hiển thị giá trị đó, key gán bằng 0 là không có tác dụng và dễ dàng thấy khi key thuộc khoảng 97..122 nghĩa là người dùng gõ ký tự thường, ta trừ bớt 32 để thành chữ hoa (chẳng hạn mã của ‘A’ là 65 còn ‘a’ là 97).

Thực thi chương trình bạn sẽ thấy kết quả thú vị.

4. Multicasting đối tượng bất kỳ

Như vậy quy trình tạo Multicasting rất dễ dàng, bạn có thể thực hiện Multicasting cho bất kỳ loại đối tượng nào theo đúng quy trình đó là được nhưng vấn đề chính là bạn biết xử lý sự kiện và dữ liệu như thế nào cho đạt được mục đích. Nhờ Multicasting, tính năng của các control được mở rộng và tạo cho người sử dụng sự bất ngờ độc đáo.

Đây là đoạn mã xử lý cho Multicasting Numeric TextBox:

Code: Select all

  1. Private Sub MTB_KeyPress(key As Integer)
  2. Select Case key
  3. Case 8, 48 To 57
  4. key = key
  5. Case Else
  6. key = 0
  7. End Select
  8. End Sub
  9.  
  10. Private Sub MTB_GotFocus()
  11. MTB.SelStart = 0
  12. MTB.SelLength = Len(MTB.Text)
  13. End Sub

Các bạn hãy thử làm với các control khác nữa để luyện tập kỹ thuật Multicasting. Chúc các bạn thành công!

(Tạp chí Tin học & Nhà trường)


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Kỹ thuật Multicasting trong Visual Basic

Postby truongphu » Fri 08/01/2010 8:44 pm

peterdrew wrote:Tôi thấy khai báo Set... (trong Form) và Public...(trong Module) cho từng Textbox một thì thật sự không ổn!


Bạn muốn tiện mặt nầy thì phải trả giá mặt kia chứ!

peterdrew wrote:có hàng trăm Textbox (trong một dự án) với các Name khác nhau (vậy thì không thể tạo mảng Textbox được nữa rồi!).


Sao lại không tạo mảng được nhỉ
Nguyên tắc Mảng thì chúng chỉ giống tên nhưng index phải khác

Ví dụ nhóm Lý lịch, bạn đã có các Textbox có tên: txtSTT, txtHoTen, txtNgaySinh, txtNoiSinh
Kệ nó, cứ sửa lại cho mang chung là nhóm Textbox tên LyLich: LyLich(0), LyLich(1), LyLich(2), LyLich(3)

Và chúng cùng nhận event GotFocus như sau:

Code: Select all

Private Sub LyLich_GotFocus(Index As Integer)
LyLich(Index).SelStart = 0
LyLich(Index).SelLength = Len(LyLich(Index).Text)
End Sub


event KeyPress cũng tương tự thế, vậy có gì khó?
Chưa kể nếu bạn tạo mảng, dùng vòng lặp còn êm hơn nữa đấy chứ!
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Kỹ thuật Multicasting trong Visual Basic

Postby truongphu » Wed 13/01/2010 8:50 pm

Thật ra thì đề tài nầy tôi không còn chú ý lâu rồi
Tuy nhiên, do bạn có vẻ thiết tha với nó nên bạn có thể dùng hình thức sau:

peterdrew wrote:Giả sử tôi có hàng trăm Textbox (trong một dự án) với các Name khác nhau (vậy thì không thể tạo mảng Textbox được nữa rồi!). Tôi muốn các Textbox trên phải được thừa hưởng những sự kiện Keypress và Gotfocus của Class.


Giả sử bạn có 200 textbox, vậy thì tôi cho con số sau đây là 250, OK?

  1. Private txt(250) As New MTB
  2.  
  3. Private Sub Form_Load()
  4. Dim i%, AA As Control
  5. For Each AA In Me.Controls
  6.     If TypeOf AA Is TextBox Then
  7.         Set txt(i).MTB = AA
  8.         i = i + 1
  9.     End If
  10. Next
  11. End Sub


Hy vọng bạn thỏa mãn
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Return to “[VB] Bài viết hướng dẫn”

Who is online

Users browsing this forum: No registered users and 0 guests