Какой простой способ создать MessageBox с пользовательским текстом кнопки в Managed C ++? - PullRequest
3 голосов
/ 17 сентября 2008

Я хотел бы сохранить накладные расходы на минимуме. Прямо сейчас у меня есть:

// Launch a Message Box with advice to the user
DialogResult result = MessageBox::Show("This may take awhile, do you wish to continue?", "Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Exclamation);

// The test will only be launched if the user has selected Yes on the Message Box
if(result == DialogResult::Yes)
{
    // Execute code
}

К сожалению, мой клиент предпочел бы "Продолжить" и "Отмена" вместо текста кнопки по умолчанию "Да" и "Нет". Кажется, должен быть простой способ сделать это.

Ответы [ 3 ]

2 голосов
/ 17 сентября 2008

Вы можете использовать «ОК» и «Отмена»

Заменив MessageBoxButtons::YesNo на MessageBoxButtons::OKCancel

MessageBoxButtons Enum

Кроме того, вам придется создать новую форму, поскольку я не верю, что Enum может быть расширен.

0 голосов
/ 16 ноября 2012

Измените сообщение, как показано ниже. Это может быть самый простой способ, я думаю.

DialogResult result = MessageBox::Show(
       "This may take awhile, do you wish to continue?**\nClick Yes to continue.\nClick No to cancel.**",
       "Warning",
       MessageBoxButtons::YesNo,
       MessageBoxIcon::Exclamation
);
0 голосов
/ 17 сентября 2008

Из всего, что я могу найти, похоже, Корин прав. Вот код, который я использовал для достижения первоначальной цели. Я обычно не программист на Managed C ++, поэтому любое редактирование приветствуется.

CustomMessageBox.h:

using namespace System::Windows::Forms;

/// <summary>
/// A message box for the test. Used to ensure user wishes to continue before starting the test.
/// </summary>
public ref class CustomMessageBox : Form
{
private:
    /// Used to determine which button is pressed, default action is Cancel
    static String^ Button_ID_ = "Cancel";

    // GUI Elements
    Label^ warningLabel_;
    Button^ continueButton_;
    Button^ cancelButton_;

    // Button Events
    void CustomMessageBox::btnContinue_Click(System::Object^ sender, EventArgs^ e);
    void CustomMessageBox::btnCancel_Click(System::Object^ sender, EventArgs^ e);

    // Constructor is private. CustomMessageBox should be accessed through the public ShowBox() method
    CustomMessageBox();

public:
    /// <summary>
    /// Displays the CustomMessageBox and returns a string value of "Continue" or "Cancel"
    /// </summary>
    static String^ ShowBox();
};

CustomMessageBox.cpp:

#include "StdAfx.h"
#include "CustomMessageBox.h"

using namespace System::Windows::Forms;
using namespace System::Drawing;

CustomMessageBox::CustomMessageBox()
{
    this->Size = System::Drawing::Size(420, 150);
    this->Text="Warning";
    this->AcceptButton=continueButton_;
    this->CancelButton=cancelButton_;
    this->FormBorderStyle= ::FormBorderStyle::FixedDialog;
    this->StartPosition= FormStartPosition::CenterScreen;
    this->MaximizeBox=false;
    this->MinimizeBox=false;
    this->ShowInTaskbar=false;

    // Warning Label
    warningLabel_ = gcnew Label();
    warningLabel_->Text="This may take awhile, do you wish to continue?";
    warningLabel_->Location=Point(5,5);
    warningLabel_->Size=System::Drawing::Size(400, 78);
    Controls->Add(warningLabel_);

    // Continue Button
    continueButton_ = gcnew Button();
    continueButton_->Text="Continue";
    continueButton_->Location=Point(105,87);
    continueButton_->Size=System::Drawing::Size(70,22);
    continueButton_->Click += gcnew System::EventHandler(this, &CustomMessageBox::btnContinue_Click);
    Controls->Add(continueButton_);

    // Cancel Button
    cancelButton_ = gcnew Button();
    cancelButton_->Text="Cancel";
    cancelButton_->Location=Point(237,87);
    cancelButton_->Size=System::Drawing::Size(70,22);
    cancelButton_->Click += gcnew System::EventHandler(this, &CustomMessageBox::btnCancel_Click);
    Controls->Add(cancelButton_);
}

/// <summary>
/// Displays the CustomMessageBox and returns a string value of "Continue" or "Cancel", depending on the button
/// clicked.
/// </summary>
String^ CustomMessageBox::ShowBox()
{
    CustomMessageBox^ box = gcnew CustomMessageBox();
    box->ShowDialog();

    return Button_ID_;
}

/// <summary>
/// Event handler: When the Continue button is clicked, set the Button_ID_ value and close the CustomMessageBox.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
void CustomMessageBox::btnContinue_Click(System::Object^ sender, EventArgs^ e)
{
    Button_ID_ = "Continue";
    this->Close();
}

/// <summary>
/// Event handler: When the Cancel button is clicked, set the Button_ID_ value and close the CustomMessageBox.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
void CustomMessageBox::btnCancel_Click(System::Object^ sender, EventArgs^ e)
{
    Button_ID_ = "Cancel";
    this->Close();
}

И, наконец, модификация исходного кода:

// Launch a Message Box with advice to the user
String^ result = CustomMessageBox::ShowBox();

// The test will only be launched if the user has selected Continue on the Message Box
if(result == "Continue")
{
    // Execute Code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...