IT干货网

c#之带有是和否按钮的消息框

findumars 2025年05月04日 编程设计 101 0

我在 Windows Phone 8 上工作,我遇到了在消息框中询问用户的情况,因此用户必须单击"is"或“否”。

但是消息框只有确定和取消按钮,我不需要它。

这是我的代码:

MessageBoxResult m = MessageBox.Show("Are you sure? This will delete all your data", "Attention!", MessageBoxButton.OKCancel); 
            if (m == MessageBoxResult.Cancel) 
            { 
 
            } 
            else 
            { 
                MessageBox.Show("Data Deleted", "Done", MessageBoxButton.OK); 
            }  

我如何将其修改为是和否按钮?我还可以有 3 个按钮以及按钮上的自定义文本吗?

请您参考如下方法:

您可以使用这个自定义消息框

SLMessageBox.xaml

<controls:ChildWindow x:Class="SLMessageBoxEX.SLMessageBox" 
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                  xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
                  xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" 
                  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
                  Title="SL Custom Message Box" 
                  Width="320" 
                  Height="150"> 
<controls:ChildWindow.Resources> 
    <Style x:Key="TextBoxStyle" TargetType="TextBox"> 
        <Setter Property="Template"> 
            <Setter.Value> 
                <ControlTemplate TargetType="TextBox"> 
                    <Grid x:Name="RootElement"> 
                        <ScrollViewer x:Name="ContentElement" 
                                      Background="{TemplateBinding Background}" 
                                      BorderThickness="0" 
                                      Padding="{TemplateBinding Padding}" /> 
                    </Grid> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 
</controls:ChildWindow.Resources> 
<controls:ChildWindow.Style> 
    <StaticResource ResourceKey="AlertBoxStyle" /> 
</controls:ChildWindow.Style> 
 
<Grid x:Name="LayoutRoot" Margin="2"> 
     <Grid.RowDefinitions> 
        <RowDefinition Height="80" /> 
        <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
 
    <TextBox x:Name="txtMsg" 
             Width="195" 
             Margin="59,22,0,22" 
             HorizontalAlignment="Left" 
             VerticalAlignment="Center" 
             Background="#02FFFFFF" 
             BorderBrush="{x:Null}" 
             Cursor="Arrow" 
             FontSize="11" 
             FontWeight="SemiBold" 
             IsReadOnly="True" 
             SelectionBackground="#FF727272" 
             Style="{StaticResource TextBoxStyle}" 
             Text="SysInformation Healthcare India Pvt Ltd." 
             TextAlignment="Center" 
             TextWrapping="Wrap" /> 
    <StackPanel Grid.Row="1" 
                HorizontalAlignment="Center" 
                Orientation="Horizontal"> 
        <Button x:Name="btnYes" 
                Width="65" 
                Height="23" 
                Margin="10,0,5,0" 
                Click="OKButton_Click" 
                Content="Yes" 
                Style="{StaticResource ButtonStyle1}" /> 
        <Button x:Name="btnNo" 
                Width="65" 
                Height="23" 
                Margin="5,0,5,0" 
                Click="btnNo_Click" 
                Content="No" 
                Style="{StaticResource ButtonStyle1}" /> 
        <Button x:Name="btnCancel" 
                Width="65" 
                Height="23" 
                Margin="5,0,5,0" 
                Click="CancelButton_Click" 
                Content="Cancel" 
                Style="{StaticResource ButtonStyle1}" /> 
    </StackPanel> 
 
    <Image x:Name="imgIcon" 
           Width="45" 
           Height="40" 
           Margin="10,20,0,20" 
           HorizontalAlignment="Left" 
           VerticalAlignment="Center"> 
        <Image.Effect> 
            <DropShadowEffect Color="#FF434343" /> 
        </Image.Effect> 
    </Image> 
 
</Grid> 

SLMessageBox.xaml.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 
 
namespace SLMessageBoxEX 
{ 
public partial class SLMessageBox : ChildWindow 
{ 
    public delegate void MessageBoxClosedDelegate(MessageBoxResult result); 
    public event MessageBoxClosedDelegate OnMessageBoxClosed; 
    public MessageBoxResult Result { get; set; } 
 
    public SLMessageBox(string title, string message, MessageBoxButtons buttons,MessageBoxIcon icon) 
    { 
        InitializeComponent(); 
        this.Closed += new EventHandler(MessageBoxChildWindow_Closed); 
 
        this.Title = title; 
        this.txtMsg.Text = message; 
        DisplayButtons(buttons); 
        DisplayIcon(icon); 
    } 
 
    public enum MessageBoxButtons 
    { 
        Ok, YesNo, YesNoCancel, OkCancel 
    } 
 
    public enum MessageBoxIcon 
    { 
        Question, Information, Error, None, Warning, Logout, ThankYou 
    } 
 
    private void DisplayIcon(MessageBoxIcon icon) 
    { 
        switch (icon) 
        { 
            case MessageBoxIcon.Error: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBox;component/Images/error.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.Information: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/Information.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.Question: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/SIHIImages/question.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.Warning: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/warning.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.None: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBox;component/Images/Information.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.Logout: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/logout1.png", UriKind.Relative)); 
                break; 
 
            case MessageBoxIcon.ThankYou: 
                imgIcon.Source = new BitmapImage(new Uri("/SLMessageBoxEX;component/Images/ThankYou.png", UriKind.Relative)); 
                break; 
        } 
    } 
 
    private void DisplayButtons(MessageBoxButtons buttons) 
    { 
 
        switch (buttons) 
        { 
            case MessageBoxButtons.Ok: 
                btnCancel.Visibility = Visibility.Collapsed; 
                btnNo.Visibility = Visibility.Collapsed; 
                btnYes.Visibility = Visibility.Visible; 
                btnYes.Content = "Ok"; 
                break; 
 
            case MessageBoxButtons.OkCancel: 
                btnCancel.Visibility = Visibility.Visible; 
                btnNo.Visibility = Visibility.Collapsed; 
                btnYes.Visibility = Visibility.Visible; 
                btnYes.Content = "Ok"; 
                break; 
 
            case MessageBoxButtons.YesNo: 
                btnCancel.Visibility = Visibility.Collapsed; 
                btnNo.Visibility = Visibility.Visible; 
                btnYes.Visibility = Visibility.Visible; 
                break; 
 
            case MessageBoxButtons.YesNoCancel: 
                btnCancel.Visibility = Visibility.Visible; 
                btnNo.Visibility = Visibility.Visible; 
                btnYes.Visibility = Visibility.Visible; 
                break; 
        } 
    } 
 
    private void MessageBoxChildWindow_Closed(object sender, EventArgs e) 
    { 
        if (OnMessageBoxClosed != null) 
            OnMessageBoxClosed(this.Result); 
    } 
 
    private void OKButton_Click(object sender, RoutedEventArgs e) 
    { 
        if (btnYes.Content.ToString().ToLower().Equals("yes") == true) 
        { 
            //yes button 
            this.Result = MessageBoxResult.Yes; 
        } 
        else 
        { 
            //ok button 
            this.Result = MessageBoxResult.OK; 
        } 
 
        this.Close(); 
    } 
 
    private void CancelButton_Click(object sender, RoutedEventArgs e) 
    { 
        this.Result = MessageBoxResult.Cancel; 
        this.Close(); 
    } 
 
    private void btnNo_Click(object sender, RoutedEventArgs e) 
    { 
        this.Result = MessageBoxResult.Cancel; 
        this.Close(); 
    } 
} 

你可以调用这个消息框

对于是否按钮

SLMessageBox messBox; 
messBox = new SLMessageBox("Message", "Yes or No Message Box...!", SLMessageBox.MessageBoxButtons.YesNo, SLMessageBox.MessageBoxIcon.Information); 
messBox.Show(); 

仅用于确定按钮

SLMessageBox messBox; 
messBox = new SLMessageBox("Message", "Ok Message Box...!", SLMessageBox.MessageBoxButtons.Ok, SLMessageBox.MessageBoxIcon.Information); 
messBox.Show(); 

对于确定和取消按钮

SLMessageBox messBox; 
messBox = new SLMessageBox("Message", "Ok and Cancel Message Box...!", SLMessageBox.MessageBoxButtons.OkCancel, SLMessageBox.MessageBoxIcon.Information); 
messBox.Show(); 

编辑: 并检查用户点击的 MessageBox 的结果

SLMessageBox messBox; 
messBox = new SLMessageBox("Message", "Yes, No and Cancel Buttons Message Box...!", SLMessageBox.MessageBoxButtons.YesNoCancel, , SLMessageBox.MessageBoxIcon.Information); 
messBox.Show(); 
messBox.OnMessageBoxClosed += messBox_OnDeleteMessageBoxClosed; 
 
private void messBox_OnDeleteMessageBoxClosed(MessageBoxResult result) 
{ 
   if(result==MessageBoxResult.Yes) 
   { 
     //.... 
   } 
   else if(result==MessageBoxResult.No) 
   { 
     //.... 
   } 
   else 
   { 
     //... 
   } 
} 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!