带ComboBox的C#Messagebox

时间:2010-03-22 10:21:03

标签: c# winforms messagebox

如何在C#Win Forms应用程序中生成一个消息框,该应用程序显示一个组合框,其中包含一系列要选择的值以及通常的“确定”按钮?

我希望能够在调用MessageBox.Show()方法时触发此操作。我假设某种覆盖是必要的,但我还没有看到任何预先存在的例子。

6 个答案:

答案 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实现,而且你自己也很容易实现。好处是今天的用户习惯于任务对话,而不是自定义消息框。