Những chức năng mới trong giao diện cửa sổ của VB.NET (phần II) Sự khác biệt trong các Hộp Giao Thoại (Dialog Boxes) Trong VB6, các hộp giao thoại thật ra là những form bình thường nhưng được hiển thị với parameter vbModal, tức là trong Modal mode. Điều nầy khíến cho hộp giao thoại trở nên form tích cực (active form) duy nhất trong chương trình cho đến khi nó đi khuất. Một hộp giao thoại cần một phương tiện để liên lạc với form gọi nó (calling form). Trong VB6, ta giải quyết vấn đề nầy bằng cách...
Bài Những chức giao diện cửa sổ VB.NET (phần II) Sự khác biệt Hộp Giao Thoại (Dialog Boxes) Trong VB6, hộp giao thoại thật form bình thường hiển thị với parameter vbModal, tức Modal mode Điều nầy khíến cho hộp giao thoại trở nên form tích cực (active form) chương trình khuất Một hộp giao thoại cần phương tiện để liên lạc với form gọi (calling form) Trong VB6, ta giải vấn đề nầy cách chế property tạm gọi Action Ta dùng Read-only property Action sau hộp giao thoại có hai buttons, OK Cancel: ' VB6 code used for Dialog Boxes Public Enum dialogAction actionOK = actionCancel = End Enum Dim mAction As dialogAction Public Property Get Action() As dialogAction Action = mAction End Property Private Sub cmdOK_Click() ' Get here when user click the OK button mAction = actionOK ' Hide the Dialog Box to return control to calling form Me.Hide End Sub Private Sub cmdCancel_Click() ' Get here when user click the Cancel button mAction = actionCancel ' Hide the Dialog Box to return control to calling form Me.Hide End Sub Chú ý ta dùng Enumerated type dialogAction Nó có hai trị số: actionOK actionCancel Property Action thuộc loại enumerated type nầy Khi user click button, ta set trị số cho local variable mAction Hide dialog box Cái Giao thoại phải dấu (hidden) không unloaded, calling form cịn phải truy cập dialog box để đọc trị số property Action để biết user vừa click button Giả dụ ta đặt tên cho hộp giao thoại frmDialog Để gọi hộp giao thoại từ form khác VB6 ta code sau: Dim Dialog As frmDialog Set Dialog = New frmDialog ' Instantiate a Dialog Box ' Show dialog box in Modal mode Dialog.Show vbModal Nhưng hiển thị hộp giao thoại thơi Sau hộp giao thoại Hide ta phải truy cập để đọc trị số property Action Do ta cần phải viết thêm codes cho đầy đủ sau đây: Dim Dialog As frmDialog Set Dialog = New frmDialog ' Instantiate a Dialog Box ' Show dialog box in Modal mode Dialog.Show vbModal ' Get here after the dialog box has hidden, but still loaded ' Now process the Action Select Case Dialog.Action Case actionOK ' 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 thay đổi quan trọng VB.NET, dùng ShowDialog DialogResult ShowDialog thay Show vbModal Argument vbModal khơng hỗ trợ VB.NET Thay vào đó, form dùng method ShowDialog Dưới so sánh coding VB6 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 Để ý VB.NET hàng code đầu ta kết hợp hai chuyện khai báo instantiate form statement Hàng code cuối cho thấy thay đổi từ Show vbModal qua ShowDialog DialogResult Trong VB.NET, form khải thị method ShowDialog, dự bị sẵn property tên DialogResult để calling form truy cập DialogResult mang trị số enumerated sau đây: • • • • • • • • DialogResult.Abort DialogResult.Cancel DialogResult.Ignore DialogResult.No DialogResult.None DialogResult.OK DialogResult.Retry DialogResult.Yes Có điểm tiện DialogResult set cho trị số dialog dấu (hidden) cách tự động Cách đơn giản để set trị số cho DialogResult assign trị số cho property DialogResult button Khi user click button DialogResult hộp giao thoại lấy trị số property DialogResult button hộp giao thoại Hide Để biểu diễn ShowDialog VB.NET, kèm theo mã nguồn thí dụ Trong thí dụ nầy ta tạo form tên frmDialog có hai button tên OK Cancel Ta set property DialogResult button OK thành OK property DialogResult button Cancel thành Cancel Form frmDialog hồn tồn khơng có hàng code Form chương trình, Form1, có button tên BtnShowDialog với code cho Event Click đâ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 chạy chương trình click button ShowDialog Khi Dialog box hiển thị, thử click hai buttons So sánh với VB6, ta thấy dùng Dialog Box VB.NET đơn giản tự nhiên Nếu không dùng Property DialogResult button Dialog Box để trả kết DialogResult, ta dùng code Dialog form sau: Me.DialogResult = DialogResult.Retry Hàng code set DialogResult Dialog form thành DialogResult.Retry kềm theo phản ứng phụ Hide Dialog Box Calling form truy cập kết DialogResult.Retry nầy Sự khác biệt đặt vị trí cho Forms Controls VB.NET có chức positioning layout tương tợ VB6, cách thực thi khác Property Location Thay vào properties Left Top VB6, forms controls VB.NET có property Location Property Location nhận trả structure tên Point, có tọa độ X Y tương ứng với Left Top mà ta dùng trước Structure point dùng nhiều áp dụng đồ họa GDI+ (Graphic Devices Interface plus) NET Thật ra, code ta dùng Top Left xưa Nhưng Top Left không cửa sổ Properties forms hay controls Để định vị trí cho form, ta code sau: Me.Location = (New Point(200, 100)) Property Size Property Size VB.NET có ý niệm property Location, có điều tương xứng với Width Height Property Size nhận trả structure tên Size, có chiều cao chiều rộng để áp dụng lúc thay chiều Giống Left Top, code ta dùng Width Height xưa Nhưng Width Height không cửa sổ Properties forms hay controls Để thay đổi Size form, ta code sau: Me.Size = (New Size(300, 400)) ReSize nhiều controls VS.NET cho ta chức Resize nhiều controls lúc Trước hết bạn Select nhiều controls cách drag dây thun (rubber band) bao quanh chúng hay ấn nút Ctrl lúc click controls Kế đó, tập trung việc resize vào control, controls resized theo Các features thiết kế chung cho Controls Tab Order Controls Sắp đặt thứ tự Tab controls (Tab Order) form phiền phức VB6 VS.NET cho ta feature 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ó hiển thị số nhỏ góc trái control, cho thấy trị số Tab Index control Bây ta cần click lên control theo thứ tự mà ta muốn Dưới screenshot form sau user định Tab Order cho controls Muốn khỏi Tab Order mode, ta bấm menu command View | Tab Order lần Ghi chú:Trong VB.NET nhiều controls có Tab Index Trong trường hợp ấy, thứ tự Tab chúng định dựa vào z-order Control có z-order cao nhận focus trước nhóm Z-order control thay đổi cách right click control chọn Bring to Front Control Arrays Khi nghe nói VB.NET không hỗ trợ Control Arrays bạn buồn năm phút Có hai lý bạn cần Control Arrays: Dùng Event handler (thí dụ Sub BtnBrowse_Click) để xử lý Event từ nhiều Controls tương tự Để dynamically tạo thêm Controls form lúc chạy program (at runtime) May thay, VB.NET cung cấp cho ta phương tiện khác để khỏi phải thua thiệt VB.NET cho phép ta linh động bổ nhiệm methods để xử lý Events controls Điểm thứ bạn ý bạn dùng tên cho nhiều controls Property Index bị khai tử Trong VB.NET bạn dùng Event handler để xử lý Events đến từ controls tương tự Trước ta dựa vào Index để biết Event phát xuất từ control Bây bạn dựa vào parameter Sender Để minh họa điểm nầy, ta viết chương trình có hai buttons, Button1 Button2, nằm form Double click Button1 để viết code xử lý Event Button1.Click Muốn dùng Event Sub nầy để xử lý Event Click đến từ Button2, bạn cần thêm chữ Button2.Click vào cuối Handles List Sub Button1_Click Để cho tổng quát ta rename Sub Button1_Click thành Sub Button_Click Bây ta viết vài dòng code đơn giản để hiển thị cho biết Event Click đến từ Button nào: ' Note that we change the name of the Sub from Button1_Click to Button_Click to ' make it more general, since we're going to use this same Sub to handle Click ' Events originated from many different Buttons ' Also note that we add the word Button2.Click to the end of Sub Button_Click declaration Private Sub Button_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click, Button2.Click Dim btnClicked As Button ' Type cast sender to Button btnClicked = CType(sender, Button) ' Show what button was clicked MessageBox.Show("You clicked """ & btnClicked.Text & """") End Sub Thử chạy chương trình click Button2, bạn thấy hình đây: Để biểu diễn chức quản lý Event Handling at runtime, ta đặt button tên BtnAddNewButton vào form để dynamically add button thứ ba tên Button3 Ta muốn button nầy dùng Sub Button_Click để xử lý Event Click Vì khơng thể đánh thêm chữ Button3.Click vào cuối câu Sub Button_Click trước ta làm với Button2.Click, nên at runtime ta dùng statement: ' Tell system to use Button_Click as Event Handler for the Event Button3.Click AddHandler newButton.Click, AddressOf Me.Button_Click Mã nguồn đầy đủ Sub BtnAddNewButton_Click liệt kê đây: Private Sub BtnAddNewButton_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAddNewButton.Click ' Declare and instantiate a Button Dim newButton As New Button() ' Set it up on the form With newButton Text = "Button3" ' Text of this new button Location = New Point(230, 120) ' define its location on the form Size = New Size(88, 40) ' define its size End With ' Add the new button to the form's collection of controls Me.Controls.Add(newButton) ' Tell system to use Button_Click as Event Handler for the Event Button3.Click AddHandler newButton.Click, AddressOf Me.Button_Click End Sub Khi user click BtnAddNewButton, Button3 với Size(88,40) tạo đặt Location(230,120) form Kế chương trình thực hai chuyện quan trọng: Add button nầy vào collection of controls form đăng ký (register) việc dùng Sub Button_Click làm Event Handler Event Click Làm xong chuyện nầy rồi, bạn chạy chương trình, click AddNewButton để thêm Button3 vào form, kế click Button3, bạn thấy hình đây: Bạn tải chương trình ControlArrays nầy Học Microsoft NET Vovisoft © 2000 All rights reserved Last Updated: Webmaster ... user click button DialogResult hộp giao thoại lấy trị số property DialogResult button hộp giao thoại Hide Để biểu diễn ShowDialog VB.NET, kèm theo mã nguồn thí dụ Trong thí dụ nầy ta tạo form tên... quan trọng VB.NET, dùng ShowDialog DialogResult ShowDialog thay Show vbModal Argument vbModal khơng hỗ trợ VB.NET Thay vào đó, form dùng method ShowDialog Dưới so sánh coding VB6 VB.NET VB6 code:... đặt vị trí cho Forms Controls VB.NET có chức positioning layout tương tợ VB6, cách thực thi khác Property Location Thay vào properties Left Top VB6, forms controls VB.NET có property Location Property