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ư:
Mã lệnh (VB) |
TxtName.visible = False |
Dùng
Mã lệnh (VB) |
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àng 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àng hình. Nếu Control ấy Databound, value sẽ được viết vào database khi đúng lúc,
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ở.
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.
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:
Nhớ đừng cho user thấy Listbox thứ nhì bằng cách set Property Visible của nó ra False (tàng hình).
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).
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.
Mã lệnh (VB) |
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 |
Ta có thể dùng Function Typename như:
TypeName(Source) để xem nó là "ListBox" hay "TextBox" ... hay dùng TypeOf như:
Mã lệnh (VB) |
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ư:
Mã lệnh (VB) |
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ư:
Mã lệnh (VB) |
If Source.Tag = "MYLIST1" then
MsgBox "Tag of Drag Source is: " & Source.Tag End If |
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 ) .
Mã lệnh (VB) |
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:
Mã lệnh (VB) |
Printer.Print List1.List(i) ' Không cần phải dùng vbCrLf |
Muốn in chữ đậm thì mở BOLD lên bằng:
Mã lệnh (VB) |
Printer.FontBold = True |
và khi nào muốn tắt chữ đậm thì dùng:
Mã lệnh (VB) |
Printer.FontBold = False |
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ư:
Mã lệnh (VB) |
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ì).
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.
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ư
Mã lệnh (VB) |
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.
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ư:
Mã lệnh (VB) |
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 |
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".
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.