在Managed C ++中使用自定义按钮文本创建MessageBox的简便方法是什么?
时间:2020-03-05 18:57:15 来源:igfitidea点击:
我想将开销最小化。现在我有:
// 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 }
不幸的是,我的客户希望使用"继续"和"取消"来代替默认的"是"和"否"按钮文字。似乎应该有一种简单的方法可以做到这一点。
解决方案
回答
我们可以使用"确定"和"取消"
通过用MessageBoxButtons :: OKCancel
替换MessageBoxButtons :: YesNo
MessageBoxButtons枚举
否则,我们将不得不创建一个新表单,因为我认为Enum不能扩展。
回答
从我所能找到的一切来看,科林看起来是正确的。这是我用来实现最初目标的代码。我通常不是托管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 }