如何在C#Win Forms应用程序中生成一个消息框,该应用程序显示一个组合框,其中包含一系列要选择的值以及通常的“确定”按钮?
我希望能够在调用MessageBox.Show()
方法时触发此操作。我假设某种覆盖是必要的,但我还没有看到任何预先存在的例子。
答案 0 :(得分:8)
使用自定义Form
代替.ShowDialog()
答案 1 :(得分:3)
你做不到。 Windows MessageBox功能有限。您可以将类似的外观窗口显示为Dialog,但如果使用MessageBox,则仅限于MessageBox所具有的功能。
答案 2 :(得分:2)
最近我需要为一个非常小的问题做这个,而不是创建一个类,我使用我的组合框和一个“确定”按钮生成一个简单的表单。这是我的函数,它生成一个表单,填充它,并获得结果。这很麻烦,但对我来说效果很好。
/// <summary>
/// Generate a tiny form that prompts the user for the language to use.
/// </summary>
private void prompt_for_language()
{
QuestionForm.Text = "Language";
Label lbLanguageChoice = new Label();
lbLanguageChoice.Text = "Choose a Language";
lbLanguageChoice.Location = new Point(1, 1);
lbLanguageChoice.Size = new Size(200, lbLanguageChoice.Size.Height);
ComboBox LanguageChoices = new ComboBox();
LanguageChoices.Location = new Point(1, lbLanguageChoice.Location.Y + lbLanguageChoice.Height + 5);
List<string> language_list = LanguageList();
language_list.Sort();
for (int loop = 0; loop < language_list.Count; loop++)
LanguageChoices.Items.Add(language_list[loop]);
int def = language_list.IndexOf(CurrentLanguage);
if (def < 0) def = language_list.IndexOf(DefaultLanguage);
if (def < 0) def = 0;
if (language_list.Count < 1) return; //we cannot prompt when there are no languages defined
if (def >= 0) LanguageChoices.SelectedIndex = def;
Button Done = new Button();
Done.Click += btnClose_Click;
Done.Text = "Done";
Done.Location = new Point(1, LanguageChoices.Location.Y + LanguageChoices.Height + 5); ;
QuestionForm.Controls.Add(LanguageChoices);
QuestionForm.Controls.Add(Done);
QuestionForm.Controls.Add(lbLanguageChoice);
QuestionForm.FormBorderStyle = FormBorderStyle.FixedDialog;
QuestionForm.AutoSize = true;
QuestionForm.Height = Done.Location.Y + Done.Height + 5; //This is too small for the form, it autosizes to "big enough"
QuestionForm.Width = LanguageChoices.Location.X + LanguageChoices.Width + 5;
QuestionForm.ShowDialog();
if (LanguageChoices.SelectedIndex >= 0)
{
SetLanguage(LanguageChoices.SelectedItem.ToString());
}
}
/// <summary>
/// Used by prompt_for_language -> done button.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnClose_Click(object sender, EventArgs e)
{
if(QuestionForm != null)
QuestionForm.Close();
}
答案 3 :(得分:1)
如果你想要的不仅仅是OK(是的,没有取消等),请尝试以下链接: http://msdn.microsoft.com/en-us/library/system.windows.forms.messageboxbuttons.aspx
这是一个如何使用它的示例: http://msdn.microsoft.com/en-us/library/0x49kd7z.aspx
但是如果你想要自己的,你必须从头开始写。创建一个新表单并添加带有所需参数的构造函数。
完成后只需使用
YourDialog dialog = new YourDialog("Button 1", "Button 2");
dialog.ShowDialog();
答案 4 :(得分:0)
你需要创建自己的表单,here是一个如何操作的教程,它在VB.NET中,但它很简单,可以改为C#。
答案 5 :(得分:0)
如果消息框不够,您可能需要使用Task Dialog。如果你必须支持Windows XP,那么就不能使用原生API,但是Windows Forms和WPF都有很多.NET实现,而且你自己也很容易实现。好处是今天的用户习惯于任务对话,而不是自定义消息框。