Winform 消息框,如何在 C# 中禁用 YESNO 选项
Winform messagebox, How to disable YESNO options in C#
我想在消息框中显示 YesNoCancel 按钮,但同时我想禁用 YesNo 按钮并仅启用 Cancel 按钮。
我想这样做的原因是我正在做一个演示应用程序,我想向用户展示特定功能可用,但同时我不想给他们保存访问权限。
以下是我的代码,现在介绍如何禁用 YesNo 按钮。
DialogResult result = MessageBox.Show("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?",
"Save confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
实际上我想显示 YesNo 按钮,但我想禁用它的点击权限。我想向用户显示 3 个按钮 YES 、 No 和 Cancel 但点击访问应该只给取消按钮。那可能吗?
编辑:
谢谢大家的回答。
我找到了解决问题的方法
我的自定义消息框代码,希望这对某人有所帮助
customMsgBox.cs
enter code here { public partial class CustomMsgBox : Form
{
static CustomMsgBox MsgBox;
static string Button_id;
public CustomMsgBox()
{
InitializeComponent();
}
internal static string ShowBox(string txtMessage, enumMessageIcon messageIcon)
{
MsgBox = new CustomMsgBox();
MsgBox.labelCustomMsg.Text = txtMessage;
MsgBox.addIconImage(messageIcon);
MsgBox.ShowDialog();
return Button_id;
}
/// <summary>
/// We can use this method to add image on message box.
/// I had taken all images in ImageList control so that
/// I can easily add images. Image is displayed in
/// PictureBox control.
/// </summary>
/// <param name="MessageIcon">Type of image to be displayed.</param>
private void addIconImage(enumMessageIcon MessageIcon)
{
switch (MessageIcon)
{
case enumMessageIcon.Error:
pictureBox1.Image = imageList1.Images["Error"]; //Error is key
//name in imagelist control which uniquely identified images
//in ImageList control.
break;
case enumMessageIcon.Information:
pictureBox1.Image = imageList1.Images["Information"];
break;
case enumMessageIcon.Question:
pictureBox1.Image = imageList1.Images["Question"];
break;
case enumMessageIcon.Warning:
pictureBox1.Image = imageList1.Images["Warning"];
break;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Button_id = "Cancel";
MsgBox.Dispose();
}
private void btnNo_Click(object sender, EventArgs e)
{
Button_id = "No";
MsgBox.Dispose();
}
private void btnYes_Click(object sender, EventArgs e)
{
Button_id = "Yes";
MsgBox.Dispose();
}
}
#region constant defiend in form of enumration which is used in showMessage class.
internal enum enumMessageIcon
{
Error,
Warning,
Information,
Question,
}
internal enum enumMessageButton
{
OK,
YesNo,
YesNoCancel,
OKCancel
}
#endregion
}
main.cs
String customResult = CustomMsgBox.ShowBox("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?", enumMessageIcon.Question);
MessageBoxButtons
枚举没有这样的选项,它包含以下成员
所以对你来说更好的选择是自定义消息框,为此你可以尝试 this, this or this,或者简单地按照食谱,
- 使用构造函数创建一个表单(让它成为
frmMessage
)接受一个字符串值,该字符串值是您想要显示的消息,
- 给一个合适的标题Text,让它成为
Save confirmation
,
- 放置一个 Label 以在构造函数的标签中显示消息。
- 放置三个按钮,为它们命名和文本,
- 禁用两者(Yes/No),您的消息框已准备就绪
用法示例:
现在您需要创建一个 object 这个消息框,并像下面这样调用它们:
frmMessage frmMessageInstance = new frmMessage("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?");
frmMessageInstance.ShowDialog();
正如 Un-lucky 所解释的那样,您唯一可以做到这一点的方法是创建您自己的自定义 messageBox
。我会做这样的事情
/// <summary>
/// The form internally used by <see cref="CustomMessageBox"/> class.
/// </summary>
internal partial class CustomMessageForm : Form
{
/// <summary>
/// This constructor is required for designer support.
/// </summary>
public CustomMessageForm ()
{
InitializeComponent();
}
public CustomMessageForm (string title, string description)
{
InitializeComponent();
this.titleLabel.Text = title;
this.descriptionLabel.Text = description;
}
}
/// <summary>
/// Your custom message box helper.
/// </summary>
public static class CustomMessageBox
{
public static void Show (string title, string description)
{
// using construct ensures the resources are freed when form is closed
using (var form = new CustomMessageForm (title, description)) {
form.ShowDialog ();
}
}
}
从 Dan Abramov for question How to create a custom MessageBox?
的回答中慷慨复制
我想在消息框中显示 YesNoCancel 按钮,但同时我想禁用 YesNo 按钮并仅启用 Cancel 按钮。
我想这样做的原因是我正在做一个演示应用程序,我想向用户展示特定功能可用,但同时我不想给他们保存访问权限。
以下是我的代码,现在介绍如何禁用 YesNo 按钮。
DialogResult result = MessageBox.Show("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?",
"Save confirmation", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
实际上我想显示 YesNo 按钮,但我想禁用它的点击权限。我想向用户显示 3 个按钮 YES 、 No 和 Cancel 但点击访问应该只给取消按钮。那可能吗?
编辑: 谢谢大家的回答。
我找到了解决问题的方法
我的自定义消息框代码,希望这对某人有所帮助
customMsgBox.cs
enter code here { public partial class CustomMsgBox : Form
{
static CustomMsgBox MsgBox;
static string Button_id;
public CustomMsgBox()
{
InitializeComponent();
}
internal static string ShowBox(string txtMessage, enumMessageIcon messageIcon)
{
MsgBox = new CustomMsgBox();
MsgBox.labelCustomMsg.Text = txtMessage;
MsgBox.addIconImage(messageIcon);
MsgBox.ShowDialog();
return Button_id;
}
/// <summary>
/// We can use this method to add image on message box.
/// I had taken all images in ImageList control so that
/// I can easily add images. Image is displayed in
/// PictureBox control.
/// </summary>
/// <param name="MessageIcon">Type of image to be displayed.</param>
private void addIconImage(enumMessageIcon MessageIcon)
{
switch (MessageIcon)
{
case enumMessageIcon.Error:
pictureBox1.Image = imageList1.Images["Error"]; //Error is key
//name in imagelist control which uniquely identified images
//in ImageList control.
break;
case enumMessageIcon.Information:
pictureBox1.Image = imageList1.Images["Information"];
break;
case enumMessageIcon.Question:
pictureBox1.Image = imageList1.Images["Question"];
break;
case enumMessageIcon.Warning:
pictureBox1.Image = imageList1.Images["Warning"];
break;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
Button_id = "Cancel";
MsgBox.Dispose();
}
private void btnNo_Click(object sender, EventArgs e)
{
Button_id = "No";
MsgBox.Dispose();
}
private void btnYes_Click(object sender, EventArgs e)
{
Button_id = "Yes";
MsgBox.Dispose();
}
}
#region constant defiend in form of enumration which is used in showMessage class.
internal enum enumMessageIcon
{
Error,
Warning,
Information,
Question,
}
internal enum enumMessageButton
{
OK,
YesNo,
YesNoCancel,
OKCancel
}
#endregion
}
main.cs
String customResult = CustomMsgBox.ShowBox("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?", enumMessageIcon.Question);
MessageBoxButtons
枚举没有这样的选项,它包含以下成员
所以对你来说更好的选择是自定义消息框,为此你可以尝试 this, this or this,或者简单地按照食谱,
- 使用构造函数创建一个表单(让它成为
frmMessage
)接受一个字符串值,该字符串值是您想要显示的消息, - 给一个合适的标题Text,让它成为
Save confirmation
, - 放置一个 Label 以在构造函数的标签中显示消息。
- 放置三个按钮,为它们命名和文本,
- 禁用两者(Yes/No),您的消息框已准备就绪
用法示例:
现在您需要创建一个 object 这个消息框,并像下面这样调用它们:
frmMessage frmMessageInstance = new frmMessage("Save changes to " + this.Text.Substring(0, this.Text.Length - 1) + "?");
frmMessageInstance.ShowDialog();
正如 Un-lucky 所解释的那样,您唯一可以做到这一点的方法是创建您自己的自定义 messageBox
。我会做这样的事情
/// <summary>
/// The form internally used by <see cref="CustomMessageBox"/> class.
/// </summary>
internal partial class CustomMessageForm : Form
{
/// <summary>
/// This constructor is required for designer support.
/// </summary>
public CustomMessageForm ()
{
InitializeComponent();
}
public CustomMessageForm (string title, string description)
{
InitializeComponent();
this.titleLabel.Text = title;
this.descriptionLabel.Text = description;
}
}
/// <summary>
/// Your custom message box helper.
/// </summary>
public static class CustomMessageBox
{
public static void Show (string title, string description)
{
// using construct ensures the resources are freed when form is closed
using (var form = new CustomMessageForm (title, description)) {
form.ShowDialog ();
}
}
}
从 Dan Abramov for question How to create a custom MessageBox?
的回答中慷慨复制