17

我想创建一个MessageBoxYes/No按钮和一个复选框的。

该应用程序是一个图片调整器,它将一次调整多张图片的大小;在此过程中,它将检查新位置文件名是否存在,并带有覆盖它的选项。

如果需要,它将为用户提供覆盖任何新文件的选项,而如果他们想要覆盖每个文件MessageBox,该复选框将防止必须单击Yes x次。

如何在MessageBox对话框中添加复选框?

4

3 回答 3

20

创建自定义对话框。这里有一些可以给你一个想法的东西:

public static class CheckboxDialog
{   
    public static bool ShowDialog(string text, string caption)
    {
        Form prompt = new Form();
        prompt.Width = 180;
        prompt.Height = 100;
        prompt.Text = caption;
        FlowLayoutPanel panel = new FlowLayoutPanel();
        CheckBox chk = new CheckBox();
        chk.Text = text;
        Button ok = new Button() { Text = "Yes" };
        ok.Click += (sender, e) => { prompt.Close(); };
        Button no = new Button() { Text = "No" };
        no.Click += (sender, e) => { prompt.Close(); };
        panel.Controls.Add(chk);
        panel.SetFlowBreak(chk, true);
        panel.Controls.Add(ok);
        panel.Controls.Add(no);
        prompt.Controls.Add(panel);
        prompt.ShowDialog();
        return chk.Checked;
    }
}

你可以这样使用它:

bool overwrite = CheckboxDialog.ShowDialog("overwrite", "Overwrite location?");
于 2013-06-30T00:26:06.060 回答
18

您不能将复选框添加到 MessageBox。正如 Tim 和 rsbarro 建议的那样,您应该创建一个自定义对话框。蒂姆的回答会很好,并且不需要创建新课程。如果你想在设计器中设计表单,你可以试试这个。

  • 使用两个按钮和您需要的复选框创建一个新表单。
  • 在表单设计器中,将按钮的DialogResult属性设置Yes为 Yes,将按钮的属性设置No为 No。这将让您发现用户单击了哪个按钮。
  • 在表单上创建一个反映复选框状态的属性(可选 - 我不喜欢从另一个表单引用一个表单上的控件,但如果您将复选框设为公开,那也可以)。
public bool DoForAll
{
    get { return checkBox.Checked; }
}
  • 在您的主窗体上,在需要时显示子窗体。例如:
var options = new Options();
var result = options.ShowDialog();
if (result == DialogResult.Yes)
{
    var doForAll = options.DoForAll;
}
于 2013-06-30T00:32:50.480 回答
0

对于vb.net(查看是这段代码,只显示一个按钮)

clsMsgBoxV1.ShowDialog("PDF solo de albaranes. (No avisarme mas)", "PDF")

并使用这个共享类:

Public Class clsMsgBoxV1

    Shared prompt As Form
    Shared chk As CheckBox
    Public Shared Function ShowDialog(Text As String, caption As String) As Boolean
        'frmUsuario


        prompt = New Form()
        chk = New CheckBox()

        prompt.StartPosition = FormStartPosition.CenterParent
        prompt.Width = 220
        prompt.Height = 150
        prompt.Text = caption

        prompt.MinimumSize = prompt.Size
        prompt.MaximumSize = prompt.Size

        prompt.MaximizeBox = False
        prompt.MinimizeBox = False

        Dim panel As FlowLayoutPanel =   New FlowLayoutPanel()

        chk.Text = Text
        chk.Width = chk.Width * 2
        chk.Height = 50
        Dim ok As Button = New Button() With {
            .Text = "Leido"
        }
        AddHandler ok.Click, AddressOf OKClick


        'Dim no As Button = New Button() With {
        '.Text = "No"
        '}
        'AddHandler no.Click, AddressOf NoClick


        ok.Width = prompt.Width - 30
        panel.Controls.Add(chk)
        panel.SetFlowBreak(chk, True)
        panel.Controls.Add(ok)
        'panel.Controls.Add(no)
        prompt.Controls.Add(panel)
        prompt.ShowDialog()
        prompt.Dispose()
        Return chk.Checked
    End Function

    Private Shared Sub NoClick(sender As Object, e As EventArgs)
        prompt.Close()
    End Sub
    Private Shared Sub OKClick(sender As Object, e As EventArgs)
        prompt.Close()

    End Sub

End Class
于 2022-02-16T13:20:48.140 回答