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

Tài liệu Windows Form Microsoft .NET Framework phần 4 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 (187.61 KB, 12 trang )

1.1
Sử dụng một phần menu chính cho menu ngữ cảnh
V
V


Bạn cần tạo một menu ngữ cảnh hiển thị các item giống với một số item trong
menu chính của ứng dụng.
#
#


Sử dụng phương thức CloneMenu của lớp MenuItem để sao lại một phần của
menu chính.
Trong nhiều ứng dụng, menu ngữ cảnh của một điều kiểm sao lại một phần của menu
chính. Tuy nhiên, .NET không cho phép bạn tạo một đối tượng MenuItem cùng lúc nằm
trong nhiều menu.
Giải pháp là tạo bản sao của một phần menu chính bằng phương thức CloneMenu.
Phương thức này không chỉ chép các item MenuItem (và các submenu), mà còn đăng ký
m
ỗi đối tượng MenuItem với cùng phương thức thụ lý sự kiện. Do đó, khi người dùng
nhắp vào một item trong menu ngữ cảnh (bản sao), phương thức thụ lý sự kiện tương ứng
sẽ được thực thi như thể người dùng nhắp vào item đó trong menu chính.
Ví dụ, xét ứng dụng thử nghiệm trong hình 6.6. Trong ví dụ này, menu ngữ cảnh cho
TextBox hiển thị các item giống như trong menu File. Đây chính là bản sao của các đối
t
ượng MenuItem, nhưng khi người dùng nhắp vào một item, phương thức thụ lý sự kiện
tương ứng sẽ được thực thi.


Hình 6.6 Chép một phần menu chính vào menu ngữ cảnh



Dưới đây là phần mã cho form để tạo ví dụ này. Nó sẽ sao lại các item trong menu chính
khi form được nạp (đáng tiếc là không thể thao tác với các item bản sao lúc thiết kế).
using System;
using System.Windows.Forms;
using System.Drawing;

The image part with relationship ID rId5 was not fo und in the file.
public class ContextMenuCopy : System.Windows.Forms.Form {

// (Bỏ qua phần mã designer.)

private void ContextMenuCopy_Load(object sender,
System.EventArgs e) {

ContextMenu mnuContext = new ContextMenu();

// Chép các item từ menu File vào menu ngữ cảnh.
foreach (MenuItem mnuItem in mnuFile.MenuItems) {

mnuContext.MenuItems.Add(mnuItem.CloneMenu());
}

// Gắn menu ngữ cảnh vào TextBox.
TextBox1.ContextMenu = mnuContext;
}

private void TextBox1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e) {


if (e.Button == MouseButtons.Right){

TextBox1.ContextMenu.Show(TextBox1, new Point(e.X, e.Y));
}
}

private void mnuOpen_Click(object sender, System.EventArgs e) {

MessageBox.Show("This is the event handler for Open.");
}

private void mnuSave_Click(object sender, System.EventArgs e) {

MessageBox.Show("This is the event handler for Save.");
}

private void mnuClick_Click(object sender, System.EventArgs e) {

MessageBox.Show("This is the event handler for Exit.");
}
}
1.2
Tạo form đa ngôn ngữ
V
V


Bạn cần tạo một form có thể bản địa hóa (localizable form); nghĩa là form này
có thể được triển khai ở nhiều ngôn ngữ khác nhau.
#

#


Lưu trữ tất cả các thông tin bản địa đặc thù trong các file resource (các file này
sẽ được biên dịch thành Satellite Assembly).
.NET Framework hỗ trợ sự bản địa hóa (localization) thông qua việc sử dụng file
resource. Ý tưởng cơ bản là lưu trữ các thông tin bản địa đặc thù (chẳng hạn, phần text
của một Button) trong một file resource. Sau đó, bạn có thể tạo nhiều file resource cho
nhiều bản địa khác nhau rồi biên dịch chúng thành Satellite Assembly. Khi chạy ứ
ng
dụng, .NET sẽ tự động sử dụng đúng Satellite Assembly dựa trên các thiết lập bản địa
(locale setting) của máy tính hiện hành.
Bạn có thể đọc và ghi các file resource bằng mã lệnh. Tuy nhiên, Visual Studio .NET
cũng hỗ trợ việc thiết kế các form được bản địa hóa:
1.
Trước tiên, thiết lập thuộc tính Localizable của form là true trong cửa sổ Properties.
1.
Thiết lập thuộc tính Language của form là bản địa bạn muốn nhập thông tin cho nó
(xem hình 6.7). Kế đó, cấu hình các thuộc tính có thể bản địa hóa của tất cả các điều
kiểm trên form. Thay vì lưu trữ những thay đổi này trong phần mã thiết kế form,
Visual Studio .NET tạo một file resource mới để lưu trữ dữ liệu của bạn.
2.
Lặp lại bước 2 cho mỗi ngôn ngữ bạn muốn hỗ trợ. Mỗi lần như thế, một file
resource mới sẽ được tạo ra. Nếu bạn thay đổi thuộc tính Language thành bản địa
mà bạn đã cấu hình thì các thiết lập trước đó sẽ xuất hiện trở lại, và bạn có thể chỉnh
sửa chúng.


Hình 6.7 Chọn một ngôn ngữ để bản địa hóa form


Bây giờ, bạn có thể biên dịch và thử nghiệm ứng dụng trên các hệ thống bản địa khác
nhau. Visual Studio .NET sẽ tạo một thư mục và một Satellite Assembly riêng biệt đối với
mỗi file resource trong dự án. Bạn có thể chọn Project | Show All Files từ thanh trình đơn
của Visual Studio .NET để xem các file này được bố trí như thế nào (xem hình 6.8).
Bạn c
ũng có thể buộc ứng dụng chấp nhận một bản địa cụ thể bằng cách thay đổi thuộc
tính Thread.CurrentUICulture. Tuy nhiên, bạn phải thay đổi thuộc tính này trước khi
form được nạp.


The image part with relationship ID rId6 was not fo und in the file.
The image part with relationship ID rId7 was not fo und in the file.
Hình 6.8 Satellite assembly cho bản địa Vietnamese
using System;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;

public class MultiLingualForm : System.Windows.Forms.Form {

private System.Windows.Forms.Label label1;

// (Bỏ qua phần mã designer.)

static void Main() {

Thread.CurrentThread.CurrentUICulture = new CultureInfo("vi");
Application.Run(new MultiLingualForm());
}
}

#
Bạn cũng có thể sử dụng tiện ích WinRes.exe (nằm trong thư mục \Program
Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin) để soạn thảo thông tin
resource. Nó cung cấp trình soạn thảo form thu nhỏ nhưng không có chức
năng chỉnh sửa mã nguồn, rất hữu dụng cho các nhà phiên dịch và các chuyên
gia phi lập trình cần nhập các thông tin bản địa đặc thù.


Hình 6.9 Tiện ích Windows Resource Localization Editor

The image part with relationship ID rId8 was not fo und in the file.

×