Logo of Vovisoft

Các mẹo vặt trong VB

Gõ vào đầu đề phía bên trái để nhìn thấy các phần chọn. Muốn khép các phần chọn hãy gõ đầu đề thêm một lần hoặc gõ vào đầu đề khác.

VB Tips & Tricks

Forms
Controls
Làm biến mất control
Chọn controls thành nhóm
Xếp thứ tự TextBox
Cursor trong TextBox
Ðưa data vào List/ComBox
Chọn nhiều hàng trong ListBox
Sort hàng trong ListBox
Sắp ngay cột trong ListBox
Chuyển hàng giữa ListBox
Tìm control của Drag Source
In hàng chọn trong ListBox
Buộc click ComboBox chọn hàng
Controls hiện trên Tab Control
Command Button không hình
Ðặt icon lên Toolbar

Ngày Giờ
Files
Linh Tinh

Làm cho Controls biến mất

Bạn làm cho một Control như Label, Textbox, ListBox .v..v biến mất bằng cách cho Property 'visible' trở nên False, như:

    TxtName.visible = False

Dùng

    TxtName.visible = True

để làm Textbox txtName  hiện ra trở lại.  Khi muốn cho một nhóm Controls biến mất hay hiện ra cùng một lúc, chứa tất cả các Controls ấy trong một container như Frame hay PctureBox, rồi chỉ cần làm cho container ấy visible hay không.

Invisible Control rất tiện dụng khi ta dùng nó để chứa dữ kiện. Một TextBox tàn hình có thể Databound để lặng lẽ chứa data lấy từ một recordField của current Record cho bạn dùng. Bạn cűng có thể 'assign' (cho nó bằng) một value vào một Control tàn hình. Nếu Control ấy Databound, value sẽ được viết vào database khi đúng lúc,


Chọn nhiều Controls như một nhóm

Chọn nhiều Controls rất tiện cho việc assign một property cho cả nhóm qua Properties Window.  Ðể chọn nhiều Controls như một nhóm bạn có thể 'rubber band' (quấn dây thun) cả nhóm bằng cách 'drag' con trỏ thành một hình chừ nhật bao cả nhóm lại. Nếu các Controls ấy nằm trong một container như Frame hay Picture box, trước hết bạn phải 'click' Form rồi kế đó đè nút 'Ctrl'  xuống trong khi 'rubber band' như nói trên.  Một khi các Controls trong một nhóm đã được chọn rồi ta có thể dùng menu Format command để Align (ngang hàng) chúng hay làm cho chúng cùng cở.


Chọn nhiều hàng trong ListBox

Muốn cho user chọn nhiều hàng trong Listbox ta phải set Property Multiselct của Listbox ra Extended. Sau đó user có thể chọn nhiều hàng bằng cách bấm nút Shift hay Ctrl trong khi Click những hàng. Nhớ là nếu bấm nút Shift thì chọn những hàng liên tục giữa hai cái click, còn bấm nút Ctrl thì chọn hay không chọn thêm từng hàng một.

Mỗi hàng trong Listbox List1 được cho thứ tự từ 0 đến List1.ListCount-1.
Khi hàng i được selected thì List1.Selected(i) = True.
Muốn 'deselect' (không chọn) hàng đó thì dùng List1.Selected(i) = False.


'Sort' các hàng trong một Listbox

Nếu ta muốn những hàng trong một Listbox được sorted theo mẫu tự (alphabetical order) thì khi thiết kế (at design time) set Property Sorted của Listbox ra True. Trong khi xử lý ta không thay đổi value của Property Sorted được. Nếu một Listbox đã lỡ có Property Sorted = False mà ta muốn Sort nó trong khi xử lý thì làm sao? Bạn đặt thêm lên Form một Listbox khác. Listbox nầy có Property Sorted = True. Khi nào muốn Sort các hàng trong Listbox thứ nhất ta làm như sao:

1. Chép tất cả mọi hàng từ Listbox thứ nhất qua Listbox thứ nhì, các hàng sẽ được sorted tự đông trong Listbox thứ nhì.
2. Clear Listbox thứ nhất
3. Chép mọi hàng từ Listbox thứ nhì qua Listbox thứ nhất.
Nhớ đừng cho user thấy Listbox thứ nhì bằng cách set Property Visible của nó ra False (tàn hình).

Lưu ý Clear một Listbox trước khi cho một số hàng mới vào và không muốn giữ những hàng cű bằng cách dùng method Clear như List1.Clear.

Sắp ngay cột những chữ trong các hàng khác nhau của Listbox
Nếu muốn tất cả các chữ cột thứ 8 của các hàng trong một Listbox đứng thẳng hàng chiều cao (vertically) bạn có thể set Font của Listbox ra Courier, một lọai Fixed Font. Tất cả các chữ của Fixed Font như Courier đều có cűng chiều rộng (character width). Ngược lại trong một Proportional spacing Font như "MS Sans Serif" chiều rộng của chừ 'í nhỏ hơn của chừ 'm'. Nếu bạn muốn dùng Tab trong Listbox thì phải gọi một API Function để làm cho Listbox chịu nhận Tab (support Tab feature).


Sắp ngay cột những chữ trong các hàng khác nhau của Listbox.

Nếu muốn tất cả các chữ cột thứ 8 của các hàng trong một Listbox đứng thẳng hàng chiều cao (vertically) bạn có thể set Font của Listbox ra Courier, một lọai Fixed Font. Tất cả các chữ của Fixed Font như Courier đều có cűng chiều rộng (character width). Ngược lại trong một Proportional spacing Font như "MS Sans Serif" chiều rộng của chừ 'í nhỏ hơn của chừ 'm'. Nếu bạn muốn dùng Tab trong Listbox thì phải gọi một API Function để làm cho Listbox chịu nhận Tab (support Tab feature).


Drag một hàng từ Listbox nầy bỏ vào Listbox khác

Giả sử bạn muốn Drag một hàng từ List1 bỏ vào List2 và display nó ở cuối List2.
Ta sẽ dùng Mousedown Event của List1 mà Drag. Khi bắt đầu Drag ta muốn MousePointer đổi ra hình một trang giấy. Do đó ta phải Browse directory để cho vào Property DragIcon của List1 tên một Icon File. Bạn có thể vào Folder C:Program File\Microsoft Visual Studio\Common\Graphics\IconsDragDrop lể chọn một Icon File.

Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Drag ' Bắt đầu drag
End Sub

Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single)
' Source ở đây là List1
List2.AddItem Source.Text ' Bỏ hàng từ List1 vô cuối List2
Source.RemoveItem Source.ListIndex ' Lấy hàng ra khỏi List1
List2.Listindex = List2.Listcount-1 ' Hilight hàng cuối và làm cho nó được display
End Sub


Làm sao biết Drag Source là control nào

Ta có thể dùng Function Typename như:
TypeName(Source) để xem nó là "ListBox" hay "TextBox" etc..
hay dùng TypeOf như:
If TypeOf Source Is ListBox Then
Msgbox " Drag source is a ListBox"
End If
Ta cűng có thể dùng Name của Source như:
If Source.Name = "List1" then
MsgBox "Drag source is List1"
End If
Ngoài ra ta cűng có thể dùng Property Tag của Source Control để chứa một biệt danh và dùng giống như tên của Drag Source như:
If Source.Tag = "MYLIST1" then
MsgBox "Tag of Drag Source is: " & Source.Tag
End If


In những hàng được chọn của một ListBox

Ta dùng Printer Object. Ráp tất cả những hàng được chọn lại thành một text string dài, thêm vào cuối mỗi hàng là Carriage Return / LineFeed ( vbCrLf ) .
Dim i
strOut = "" ' Initialise Output string không có gì cả
For i=0 to List1.Listcount-1
If List1.Selected(i) then
strOut = strOut & List1.List(i) & vbCrLf
End if
Next
Printer.Print strOut ' Gởi text String ra Printer
Printer.EndDoc ' Bắt đầu in ra
Nếu bạn muốn in từng hàng thì dùng:
Printer.Print List1.List(i) ' Không cần phải dùng vbVrLf
Muốn in chữ đậm thì mở BOLD lên bằng:
Printer.FontBold = True
và khi nào muốn tắt chữ đậm thì dùng:
Printer.FontBold = False


Bắt buộc user phải click ComboBox để chọn một hàng

Khi Form mới hiện ra, nếu đã có sẵn một hàng chữ nằm trong ComboBox, mà đó đúng là hàng user muốn dùng, ta không có dịp để dùng Event Click của ComboBox để làm chuyện gì tùy thuộc vào hàng mà user đã chọn.
Một mánh lới là trước khi cho các hàng vào ComboBox ta để một hàng trống, thí dụ như:
Combo1.AddItem " "
ComboBox sẽ như trống không khi Form mới hiện ra, bắt buộc user phải chọn một hàng chớ không dùng hàng đầu 'by default' (tự động có nếu không làm gì).


Làm một Control hiện ra trên mọi trang của Tab Control

Mỗi trang của Tab Control chứa riêng những Control của nó. Nếu bạn muốn một Textbox, Listbox hay CommandButton hiện ra trên mọi trang của Tab, bạn tạo control đó bên ngoài Tab và kéo nó vào đặt lên trên Tab. Nếy Control nằm phía dưới Tab, dùng VBIDE menu Comand "Format | Order | Bring to Front" để mang Control ra phía trước.


Sắp xếp thứ tự các TextBox cho Data Entry

Khi user điền các dữ kiện vào một Form (Data Entry), user rời mỗi TextBox bằng cách bấm nút Tab. Kế đó MouseCursor nhảy đến TextBox có Property TabIndex value theo thứ tự sau TabIndex value của TextBox vừa rời khỏi. Thường thường ta cho TabIndex value theo thứ tự từng cặp LblName, txtName rồi lblAddress, txtAddress, v.v. có TabIndex values thí dụ như 1,2,3,4.  Khi txtName (TabIndex=2)  mất Focus, mouseCursor dời đến lblAddress (TabIndex=3)  , nhưng vì lblAddress là một Label nên không chứa mouseCursor được, do đó mouseCursor nhảy  đến  txtAddress (TabIndex=4).  Nếu Caption của lblAddress  có một character underlined, như

   lblAddress.Caption = "Add&ess"     ' character  "e" underlined

khi user bấm Alt+e bất cứ lúc nào mousePointer sẽ nhảy đến lblAddress nhưng rốt cuộc rớt vào TextBox kế đó, tức là txtAddress trong trường hợp nầy.

Nếu bạn không muốn mousePointer đáp vào một TextBox nào set Property TabStop của nó ra False.  Bạn cűng có thể không cho user thay đổi dữ kiện ở một TextBox bằng cách set Property  Enabled ra False hay Locked ra True.


Làm sao cho data vào trong ListBox  hay ComboBox

Khi Design ta có thể dùng Property List của ListBox hay ComboBox để đánh vào các dòng data.  Mỗi khi xuống hàng phải nhớ dùng Ctrl+Enter chớ không phải Enter, nếu không VBIDE tưởng là bạn đã chấm dứt data entry.

Một cách khác để cho data vào ListBox hay ComboBox là dùng Method AddItem trong Sub Form_Load, như:

   Sub Form_Load()

    Dim i

       For i=1 to 10

          List1.AddItem "Line " & CStr(i)

       Next

       lstState.AddItem "NSW"

       lstState.AddItem "VIC"

       lstState.AddItem "QLD"

       lstState.AddItem "SA"

       lstState.AddItem "WA"

       lstState.AddItem "TAS"

   End Sub


Sao không thấy hình trong CommandButton?

Bạn dùng Properties Window để đặt một Picture vào một CommandButton bằng cách Browse và chọn một Image File.  Nhưng bạn không thấy Picture đâu cả. Bạn còn cần phải set Propety Style của CommandButton ra "Graphical", thay vì "Standard".


Làm sao đặt icon lên Toolbar làm shortcut cho một menu command của VBIDE?

Dùng Menu command View | Toolbars | Customize để display Dialog Customize. Kế đó chọn Tag Commands, bên trái sẽ là một Listbox chứa danh sách các Categories và bên phải là những Commands thuộc về Category đang được highlighted. Thử select từng Category để tìm trong Listbox bên phải cái Command có icon mà bạn muốn.  Drag icon đó lên Toolbar.  Nhân dịp nầy bạn có thể bỏ một icon có sẵn trên Toolbar bằng cách Drag nó ra chỗ khác.