Как показать MessageBox с помощью флажка?

Я хотел бы создать MessageBox, у которого есть кнопки Yes/No И флажок.

Приложение - это изменение размера изображения, и оно будет повторно отображать сразу несколько изображений; в этом процессе он проверяет, существует ли новое имя файла местоположения с возможностью его перезаписывания.

MessageBox предоставит пользователю возможность перезаписывать любые новые файлы, если это необходимо, в то время как флажок запрещает вам нажимать Yes x количество раз, если они хотят перезаписать каждый файл.

Как добавить флажок в диалог MessageBox?

Ответ 1

Вы не можете добавить флажок в MessageBox. Как предлагает Tim и rsbarro, вы должны создать настраиваемый диалог. Ответ Тима будет хорошо работать и не требует создания нового класса. Если вы хотите создать форму в дизайнере, вы можете попробовать это.

  • Создайте новую форму с двумя кнопками и установите флажок.
  • В конструкторе форм установите для свойства DialogResult кнопку Yes значение "Да", а кнопка "t31" - "Нет". Это позволит вам узнать, на какую кнопку нажал пользователь.
  • Создайте свойство в форме, которая отражает состояние флажка (необязательно - мне не нравится ссылаться на элемент управления в одной форме из другой формы, но если вы сделаете этот флажок общедоступным, это тоже сработает).
public bool DoForAll
{
    get { return checkBox.Checked; }
}
  • В вашей основной форме покажите дочернюю форму, когда это необходимо. Например:
var options = new Options();
var result = options.ShowDialog();
if (result == DialogResult.Yes)
{
    var doForAll = options.DoForAll;
}

Ответ 2

Создайте настраиваемый диалог. Вот что может дать вам идею:

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?");

Ответ 3

Попробуйте это Использование класса MsgBoxCheck так же просто, как использование Windows MessageBox. Во-первых, добавьте ссылку на MsgBoxCheck.dll в свой проект С#. Большинство людей будут ссылаться на класс следующим образом:

MsgBoxCheck.MessageBox dlg = new MsgBoxCheck.MessageBox();
DialogResult dr =
        dlg.Show(@"Software\PricklySoft\TestMsgBoxCheck",
        "DontShowAgain",DialogResult.OK,
        "Don't ask me this again",
        "Now is the time for all good men to check this message box",
        "Hello",
        MessageBoxButtons.OK, MessageBoxIcon.Information);