How to Create a Message Box with "Yes", "No" Choices and a Dialogresult

How do I create a message box with Yes, No choices and a DialogResult?

This should do it:

DialogResult dialogResult = MessageBox.Show("Sure", "Some Title", MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
//do something
}
else if (dialogResult == DialogResult.No)
{
//do something else
}

Message box with “Yes”, “No” choices in C#?

If it's in main form close method you can use it like this:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Really close?", "Exit", MessageBoxButtons.YesNo) ==
System.Windows.Forms.DialogResult.No)
e.Cancel = true;
}

If user press "Yes" your form will be closed due to no close cancellation.
If it is not main form close doesn't mean application exit. In this case you can close parent form explicitly after ShowDialog call.

Custom MessageBox DialogResult

You are not comparing result of Show method with DialogResult.

Instead of using

if (CustomMessageBox.Show("Title", "TITLEEE", CustomMessageBox.CustomMessageBoxButtons.OkCancel) == CustomMessageBox.MsgBox.result.Yes)

Try using

if (CustomMessageBox.Show("Title", "TITLEEE", CustomMessageBox.CustomMessageBoxButtons.OkCancel) == DialogResult.Yes)

C# MessageBox dialog result

DialogResult result = MessageBox.Show("Do you want to save changes?", "Confirmation", MessageBoxButtons.YesNoCancel);
if(result == DialogResult.Yes)
{
//...
}
else if (result == DialogResult.No)
{
//...
}
else
{
//...
}

MessageBox with YesNoCancel - No & Cancel triggers same event

This should work fine:

Dim result As DialogResult = MessageBox.Show("message", "caption", MessageBoxButtons.YesNoCancel)
If result = DialogResult.Cancel Then
MessageBox.Show("Cancel pressed")
ElseIf result = DialogResult.No Then
MessageBox.Show("No pressed")
ElseIf result = DialogResult.Yes Then
MessageBox.Show("Yes pressed")
End If

Message Box with Yes and No buttons

You can use this custom Message Box

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();
}
}

}

And you can call this Message Box

For Yes No Buttons

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

For Only Ok Button

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

For Ok and Cancel Buttons

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

Edit:
And to check the result of the MessageBox what the user clicked

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
{
//...
}
}

C# How to make async MessageBox that returns DialogResult?

If you want to use the dialog result of a non-blocking message box and perform a job based on the result:

Task.Run(() =>
{
var dialogResult= MessageBox.Show("Message", "Title", MessageBoxButtons.OKCancel);
if (dialogResult == System.Windows.Forms.DialogResult.OK)
MessageBox.Show("OK Clicked");
else
MessageBox.Show("Cancel Clicked");
});

Note:

  • The code after Task.Run immediately runs regardless of messagebox.


Related Topics



Leave a reply



Submit