This article is currently in the process of being translated into Vietnamese (~99% done).
The MessageBox
WPF đề xuất ra nhiều loại hộp thoại khác nhau cho ứng dụng của bạn dể sử dụng. Trong đó đơn giản nhất là MessageBox. Nó có múc đích chính là hiển thị lời nhắn (message) cho người dùng và sau đó đưa ra các cách khác nhau để người dùng trả lời lại lời nhắn đó.
MessageBox được sử dụng bằng cách gọi phương thức static Show(). Phương thức này sẽ nhận các loại tham số khác nhau và có các cách hiển thị hay hoạt động mà bạn muốn. Chúng ta sẽ xem qua các loại khác nhau của MessageBox trong chủ đề này này thông qua cách hiển thị khác nhau của nó. Khi kết thúc chủ đề này, bạn sẽ có cái nhìn tổng quan thông qua các ví dụ hoàn thiện khác nhau của MessageBox.
Với loại hình đơn giản nhất, MessageBox chỉ nhận một tham số, đó là lời nhắn cần hiển thị
MessageBox.Show("Hello, world!");
MessageBox với tựa đề
Ví dụ dưới đây có chút khác biệt, đó là tựa đề của cửa sổ hiển thị lời nhắn. Để làm hiển thị tựa đề như vậy, chỉ cần sử dụng và tùy biến tham số thứ hai của MessageBox.show().
MessageBox.Show("Hello, world!", "My App");
MessageBox với các nút bấm
Mặc định, MessageBox chỉ có nút bấm OK, nhưng chúng ta có thể thay đổi điều đó trong trường hợp bạn muốn dùng để hỏi người dùng chứ không phải thông tin lời nhắn. Ngoài ra, bạn còn có thể có lời nhắn gồm nhiều dòng, chỉ cần sử dụng kí tự xuống dòng (\n):
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Bạn chỉ cần điều chỉnh các nút bấm hiển thị thông qua danh sách của MessageBoxButton ở tham số thứ ba của MessageBox.Show()- trong trường hợp này là các nút bấm Yes, No và Cancel. Các giá trị sau là các giá trị liệt kê trong danh sách của MessageBoxButton mà bạn có thể sử dụng:
- OK
- OKCancel
- YesNoCancel
- YesNo
Giờ đây, với sự lựa chọn đa dạng, bạn cần có cách để xem rằng người dùng đã chọn gì, không thể may mắn hơn là phương thức MessageBox.Show() luôn trả về giá trị đó thông qua danh sách liệt kê MessageBoxResult. Sau đây là ví dụ:
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
Bằng cách sử dụng biến kết quả của phương thức MessageBox.Show(), bạn có thể phản hồi lại lựa chọn của người dùng như bạn đã thấy ở ví dụ code trên cũng như là hình ảnh kết quả.
MessageBox với biểu tượng (icon)
MessageBox có cấu trúc hiển thị biểu tượng (icon) được định nghĩa sẵn ở phía bên trái lời nhắn bằng cách sử dụng tham số thứ tư của MessageBox .Show().
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Sử dụng danh sách liệt kê MessageBoxImage, bạn chọn giữa danh sách các biểu tượng (icon) với các trang thái khác nhau. Sau đây là danh sách các biểu tượng (icon) đó:
- Asterisk
- Error
- Exclamation
- Hand
- Information
- None
- Question
- Stop
- Warning
Cái tên sẽ nói cho bạn biết nó sẽ hiển thị như thế nào, nhưng bạn cứ thoải mái thử nghiệm nó hoặc xem chủ đề MSDN này, mỗi giá trị đều được giải thích và mô tả: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx
MessageBox với lựa chọn mặc định
MessageBox sẽ lựa chọn nút bấm mặc định, trong trường hợp người dùng bấm ngay Enter khi hộp thoại hiển tị. Ví dụ điển hình, nếu bạn hiển thị MessageBox với nút bấm Yes và No. Yes sẽ là câu trả lời mặc định. Bạn chỉ cần thay đổi và sử dụng tham số thứ năm của MessageBox.Show():
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Chú ý trong hình chụp trên, nút bấm No được in đậm "nhẹ nhàng" thể hiện rằng nó đang được chọn và sẽ thực thi khi bạn bấm Enter hay Space.
Ví dụ hoàn chỉnh
Như đã nói, đây là ví dụ hoàn chỉnh được sử dụng trong chủ đề này.
<Window x:Class="WpfTutorialSamples.Dialogs.MessageBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MessageBoxSample" Height="250" Width="300">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="0,0,0,10" />
</Style>
</StackPanel.Resources>
<Button Name="btnSimpleMessageBox" Click="btnSimpleMessageBox_Click">Simple MessageBox</Button>
<Button Name="btnMessageBoxWithTitle" Click="btnMessageBoxWithTitle_Click">MessageBox with title</Button>
<Button Name="btnMessageBoxWithButtons" Click="btnMessageBoxWithButtons_Click">MessageBox with buttons</Button>
<Button Name="btnMessageBoxWithResponse" Click="btnMessageBoxWithResponse_Click">MessageBox with response</Button>
<Button Name="btnMessageBoxWithIcon" Click="btnMessageBoxWithIcon_Click">MessageBox with icon</Button>
<Button Name="btnMessageBoxWithDefaultChoice" Click="btnMessageBoxWithDefaultChoice_Click">MessageBox with default choice</Button>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Dialogs
{
public partial class MessageBoxSample : Window
{
public MessageBoxSample()
{
InitializeComponent();
}
private void btnSimpleMessageBox_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!");
}
private void btnMessageBoxWithTitle_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App");
}
private void btnMessageBoxWithButtons_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
}
private void btnMessageBoxWithResponse_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
}
private void btnMessageBoxWithIcon_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void btnMessageBoxWithDefaultChoice_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
}
}
}