Tải bản đầy đủ (.pdf) (9 trang)

Tài liệu Những chức năng mới trong giao diện cửa sổ của VB.NET (phần II) doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (174.79 KB, 9 trang )


Bài 9
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 chế ra một property tạm
gọi là Action. Ta dùng Read-only property Action như sau trong một hộp
giao thoại có hai buttons, OK và Cancel:
' VB6 code used for Dialog Boxes
Public Enum dialogAction
actionOK = 1
actionCancel = 2
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 và
actionCancel. Property Action thuộc loại enumerated type nầy. Khi user click
một button, ta set trị số cho local variable mAction rồi Hide cái dialog box. Cái
Giao thoại phải được dấu đi (hidden) nhưng không unloaded, vì cái calling form
còn phải truy cập dialog box để đọc trị số của property Action để biết user vừa
mới click button nào.

Giả dụ ta đặt tên cho hộp giao thoại đó là frmDialog. Để gọi một hộp giao thoại
từ một form khác trong VB6 ta có thể code như sau:
Dim Dialog As frmDialog
Set Dialog = New frmDialog ' Instantiate a Dialog Box
' Show dialog box in Modal mode
Dialog.Show vbModal
Nhưng bao nhiêu đó chỉ là hiển thị hộp giao thoại thôi. Sau khi hộp giao thoại đã
Hide rồi ta còn phải truy cập nó để đọc trị số của 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 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

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 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
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))

×