Các bài tập Microsoft .NET 126 ' code goes here for normal processing Case actionCancel ' code goes here for user canceling End Select Unload Dialog ' Now we can unload the dialog box Có hai sự thay đổi quan trọng trong VB.NET, đó là dùng ShowDialog và DialogResult. ShowDialog thay vì Show vbModal Argument vbModal không được hỗ trợ trong VB.NET. Thay vào đó, một form có thể dùng method ShowDialog. Dưới đây là sự so sánh của coding trong VB6 và VB.NET. VB6 code: Dim Dialog As frmDialog Set Dialog = New frmDialog ' Instantiate a Dialog Box ' Show dialog box in Modal mode Dialog.Show vbModal VB.NET code: Dim Dialog As New frmDialog() ' Show dialog box in Modal mode Dialog.ShowDialog Để ý là trong VB.NET ở hàng code đầu ta có thể kết hợp hai chuyện khai báo và instantiate form mới trong một statement. Hàng code cuối cho thấy sự thay đổi từ Show vbModal qua ShowDialog. DialogResult Trong VB.NET, khi một form khải thị bằng method ShowDialog, nó đã dự bị sẵn một property tên là DialogResult để calling form có thể truy cập. DialogResult có thể mang một trong những trị số enumerated sau đây: • DialogResult.Abort Các bài tập Microsoft .NET 127 • DialogResult.Cancel • DialogResult.Ignore • DialogResult.No • DialogResult.None • DialogResult.OK • DialogResult.Retry • DialogResult.Yes Có điểm rất tiện là khi DialogResult được set cho một trị số thì dialog được dấu đi (hidden) một cách tự động. Cách đơn giản nhất để set trị số cho DialogResult là assign một trị số cho property DialogResult của một button. Khi user click button ấy thì DialogResult của hộp giao thoại lấy trị số của property DialogResult của button và hộp giao thoại Hide. Để biểu diễn ShowDialog trong VB.NET, kèm theo đây là mã nguồn của một thí dụ. Trong thí dụ này ta tạo một form tên frmDialog có hai button tên OK và Cancel. Ta set property DialogResult của button OK thành OK Các bài tập Microsoft .NET 128 và property DialogResult của button Cancel thành Cancel. Form frmDialog hoàn toàn không có một hàng code nào cả. Form chính của chương trình, Form1, chỉ có một button tên BtnShowDialog với code cho Event Click như dưới đây: Private Sub BtnShowDialog_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnShowDialog.Click ' Declare and instantiate a Dialog Box Dim Dialog As New frmDialog() ' Show the Dialog Box in Modal mode Dialog.ShowDialog() ' get here after user has clicked a button and the Dialog box has hidden ' Process the DialogResult Select Case Dialog.DialogResult Case DialogResult.OK MsgBox("User clicked OK, se please go ahead") Case DialogResult.Cancel MsgBox("Sorry, but User clicked Cancel") End Select Dialog = Nothing ' Dispose the Dialog Box End Sub Bạn có thể chạy chương trình rồi click button ShowDialog. Khi Dialog box hiển thị, thử click một trong hai buttons trên ấy. So sánh với VB6, ta thấy dùng Dialog Box trong VB.NET đơn giản và tự nhiên hơn. Nếu không dùng Property DialogResult của một button trong Dialog Box để trả về kết quả DialogResult, ta cũng có thể dùng code trong Dialog form như sau: Me.DialogResult = DialogResult.Retry Các bài tập Microsoft .NET 129 Hàng code trên set DialogResult của Dialog form thành DialogResult.Retry và kềm theo phản ứng phụ là Hide Dialog Box. Calling form sẽ truy cập được kết quả DialogResult.Retry này. Sự khác biệt về sắp đặt vị trí cho Forms và Controls VB.NET có những chức năng về positioning và layout tương tợ như trong VB6, nhưng cách thực thi hơi khác. Property Location Thay vào các properties Left và Top trong VB6, forms và controls trong VB.NET có property Location. Property Location nhận và trả về một structure tên Point, có tọa độ X và Y tương ứng với Left và Top mà ta dùng trước đây. Structure point được dùng trong nhiều áp dụng về đồ họa trong GDI+ (Graphic Devices Interface plus) của .NET. Thật ra, trong code ta vẫn còn dùng Top và Left được như xưa. Nhưng Top và Left không hiện ra trong cửa sổ Properties của forms hay controls. Để chỉ định một vị trí mới cho form, ta có thể code như sau: Me.Location = (New Point(200, 100)) Property Size Property Size trong VB.NET có cùng một ý niệm như property Location, có điều nó tương xứng với Width và Height. Property Size nhận và trả về một structure tên Size, có chiều cao và chiều rộng để áp dụng cùng một lúc thay vì tuần tự từng chiều. Giống như Left và Top, trong code ta vẫn còn dùng Width và Height được như xưa. Nhưng Width và Height không hiện ra trong cửa sổ Properties của forms hay controls. Để thay đổi Size của một form, ta có thể code như sau: Me.Size = (New Size(300, 400)) ReSize nhiều controls VS.NET cho ta một chức năng mới là Resize nhiều controls cùng một lúc. Trước hết bạn Select nhiều controls bằng cách drag một dây thun (rubber band) bao quanh chúng hay ấn nút Ctrl trong lúc click các Các bài tập Microsoft .NET 130 controls. Kế đó, tập trung việc resize vào một control, các controls kia cũng được resized theo. Các features thiết kế chung cho các Controls Tab Order của các Controls Sắp đặt thứ tự trong Tab của các controls (Tab Order) trên một form đôi khi rất phiền phức trong VB6. VS.NET cho ta một feature rất tiện dụng để làm việc này. Để khởi động feature ấy, ta dùng IDE menu command View | Tab Order. Nó sẽ hiển thị một con số nhỏ ở góc trên trái của mỗi control, cho thấy trị số Tab Index của mỗi control. Bây giờ ta chỉ cần click lên từng control một theo thứ tự mà ta muốn. Dưới đây là screenshot của một form sau khi user chỉ định Tab Order cho các controls. Muốn ra khỏi Tab Order mode, ta bấm menu command View | Tab Order một lần nữa. Ghi chú:Trong VB.NET nhiều controls có thể có cùng một Tab Index. Trong trường hợp ấy, thứ tự về Tab của chúng được quyết định dựa vào z-order. Control có z-order cao nhất sẽ nhận focus trước nhất trong nhóm. Z-order của một control có thể được thay đổi bằng cách right click control rồi chọn Bring to Front. Control Arrays Khi nghe nói VB.NET không hỗ trợ Control Arrays chắc bạn buồn năm phút. Có hai lý do tại sao bạn cần Control Arrays: 1. Dùng cùng một Event handler (thí dụ như Sub BtnBrowse_Click) để xử lý Event từ nhiều Controls tương tự. . một button trong Dialog Box để trả về kết quả DialogResult, ta cũng có thể dùng code trong Dialog form như sau: Me.DialogResult = DialogResult.Retry Các bài tập Microsoft .NET 129 Hàng code trên. thun (rubber band) bao quanh chúng hay ấn nút Ctrl trong lúc click các Các bài tập Microsoft .NET 130 controls. Kế đó, tập trung việc resize vào một control, các controls kia cũng được resized. frmDialog có hai button tên OK và Cancel. Ta set property DialogResult của button OK thành OK Các bài tập Microsoft .NET 128 và property DialogResult của button Cancel thành Cancel. Form frmDialog