Content of
tạo chữ chạy trên TitleBar của form:
Giới thiệu:
Bạn hãy thêm một Timer (với thuộc tính Interval là 10) và đoạn code sau đây vào Form.
Private Sub Form_Load()
'Form1.WindowState = 2
Form1.Caption = Space(100) & "Visual Basic"
End Sub
Private Sub Timer1_Timer()
Form1.Caption = Right(Form1.Caption, Len(Form1.Caption) - 1)
If Form1.Caption = "" Then
Form1.Caption = Space(100) & "Visual Basic"
End If
End Sub
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 rogram FileMicrosoft Visual StudioCommonGraphicsIconsDragDrop 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.
new page