I want to use a custom icon in MessageBox.Show(\"Message\", \"Title\", MessageBoxButton.OK, MeesageBoxIcon.myIcon)
Method.
Any suggestion please?
You can't override this behavior of MessageBox
. The solution is either use some custom message box, check this, or implement your own MessageBoxForm
and add your custom settings to it, check this.
I wrote one a little while ago, it works exactly like the regular messagebox class.
CustomMessageBox (Class): http://pastebin.com/m8evBmZi
using System;
using System.Drawing;
using System.Windows.Forms;
public static class CustomMessageBox
{
public static DialogResult Show(string Text, string Title, eDialogButtons Buttons, Image Image)
{
MessageForm message = new MessageForm();
message.Text = Title;
if (Image.Height < 0 || Image.Height > 64)
throw new Exception("Invalid image height. Valid height ranges from 0 to 64.");
else if (Image.Width < 0 || Image.Width > 64)
throw new Exception("Invalid image width. Valid width ranges from 0 to 64.");
else
{
message.picImage.Image = Image;
message.lblText.Text = Text;
switch (Buttons)
{
case eDialogButtons.OK:
message.btnYes.Visible = false;
message.btnNo.Visible = false;
message.btnCancel.Visible = false;
message.btnOK.Location = message.btnCancel.Location;
break;
case eDialogButtons.OKCancel:
message.btnYes.Visible = false;
message.btnNo.Visible = false;
break;
case eDialogButtons.YesNo:
message.btnOK.Visible = false;
message.btnCancel.Visible = false;
message.btnYes.Location = message.btnOK.Location;
message.btnNo.Location = message.btnCancel.Location;
break;
case eDialogButtons.YesNoCancel:
message.btnOK.Visible = false;
break;
}
if (message.lblText.Height > 64)
message.Height = (message.lblText.Top + message.lblText.Height) + 78;
return (message.ShowDialog());
}
}
public enum eDialogButtons { OK, OKCancel, YesNo, YesNoCancel }
}
MessageForm (Form): http://pastebin.com/jawHZDzY
using System;
using System.Windows.Forms;
internal partial class MessageForm : Form
{
internal MessageForm() => InitializeComponent();
private void btnYes_Click(object sender, EventArgs e) =>
DialogResult = DialogResult.Yes;
private void btnNo_Click(object sender, EventArgs e) =>
DialogResult = DialogResult.No;
private void btnCancel_Click(object sender, EventArgs e) =>
DialogResult = DialogResult.Cancel;
private void btnOK_Click(object sender, EventArgs e) =>
DialogResult = DialogResult.OK;
}
MessageForm (Designer Code): http://pastebin.com/CRXjeUFN
partial class MessageForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.picImage = new System.Windows.Forms.PictureBox();
this.lblText = new System.Windows.Forms.Label();
this.btnYes = new Dark.WinForms.Controls.dButton();
this.btnNo = new Dark.WinForms.Controls.dButton();
this.btnCancel = new Dark.WinForms.Controls.dButton();
this.btnOK = new Dark.WinForms.Controls.dButton();
((System.ComponentModel.ISupportInitialize)(this.picImage)).BeginInit();
this.SuspendLayout();
//
// picImage
//
this.picImage.ErrorImage = null;
this.picImage.InitialImage = null;
this.picImage.Location = new System.Drawing.Point(15, 15);
this.picImage.Name = "picImage";
this.picImage.Size = new System.Drawing.Size(64, 64);
this.picImage.TabIndex = 0;
this.picImage.TabStop = false;
//
// lblText
//
this.lblText.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblText.AutoSize = true;
this.lblText.Location = new System.Drawing.Point(85, 15);
this.lblText.MaximumSize = new System.Drawing.Size(294, 0);
this.lblText.Name = "lblText";
this.lblText.Size = new System.Drawing.Size(28, 13);
this.lblText.TabIndex = 0;
this.lblText.Text = "Text";
//
// btnYes
//
this.btnYes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnYes.FocusDuesEnabled = false;
this.btnYes.Location = new System.Drawing.Point(139, 88);
this.btnYes.Name = "btnYes";
this.btnYes.Size = new System.Drawing.Size(75, 23);
this.btnYes.TabIndex = 2;
this.btnYes.Text = "Yes";
this.btnYes.Tooltip = "";
this.btnYes.UseVisualStyleBackColor = true;
this.btnYes.Click += new System.EventHandler(this.btnYes_Click);
//
// btnNo
//
this.btnNo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnNo.FocusDuesEnabled = false;
this.btnNo.Location = new System.Drawing.Point(220, 88);
this.btnNo.Name = "btnNo";
this.btnNo.Size = new System.Drawing.Size(75, 23);
this.btnNo.TabIndex = 3;
this.btnNo.Text = "No";
this.btnNo.Tooltip = "";
this.btnNo.UseVisualStyleBackColor = true;
this.btnNo.Click += new System.EventHandler(this.btnNo_Click);
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.FocusDuesEnabled = false;
this.btnCancel.Location = new System.Drawing.Point(301, 88);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 1;
this.btnCancel.Text = "Cancel";
this.btnCancel.Tooltip = "";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// btnOK
//
this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnOK.FocusDuesEnabled = false;
this.btnOK.Location = new System.Drawing.Point(220, 88);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 4;
this.btnOK.Text = "OK";
this.btnOK.Tooltip = "";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// MessageForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(394, 129);
this.Controls.Add(this.btnYes);
this.Controls.Add(this.btnNo);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.picImage);
this.Controls.Add(this.lblText);
this.Controls.Add(this.btnOK);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "MessageForm";
this.Padding = new System.Windows.Forms.Padding(15);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Title";
((System.ComponentModel.ISupportInitialize)(this.picImage)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
internal Dark.WinForms.Controls.dButton btnCancel;
internal Dark.WinForms.Controls.dButton btnNo;
internal Dark.WinForms.Controls.dButton btnYes;
internal Dark.WinForms.Controls.dButton btnOK;
internal System.Windows.Forms.PictureBox picImage;
internal System.Windows.Forms.Label lblText;
}
You can not directly change an icon of MessageBox so I googled it and I found the solution for that. we can change an icon of message box using window hook.
Hear is the MSDN Magazine link.
MSDN on the Internet archive
You can use Task Dialog Indirect API from Microsoft, which will help you to show custom dialogs.