Formular auf MessageBox -Antwort Ärger schließen
-
27-10-2019 - |
Frage
Ich versuche diesen Code zu verwenden, um ein Formular für eine bestimmte Antwort eines Nachrichtenfelds zu schließen. Ich erhalte immer wieder einen Fehler, der sagt, dass auch nicht Yes
Noch No
gehören DialogResult::
. Ich habe diesen Code im Grunde direkt von der MS -Site kopiert, daher habe ich keine Ahnung, was los ist. Hilfe?
private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
if(!watchdog->Checked)
{
if((MessageBox::Show("CAN Watchdog is currently OFF. If you exit with these settings, the SENSOWheel will still be engaged. To prevent this, please enable CAN Watchdog before closing. Would you still like to quit?", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == DialogResult::No))
{
return;
}
else
{
close_Click(this, e);
}
}
}
Lösung
Es gibt einen Namenskampf zwischen den DialogResult
Aufzählung und die DialogResult
Eigentum von Form
. Sie möchten erstere, der Compiler geht davon aus, dass Sie sich auf das letztere beziehen.
Eine Möglichkeit, die Unklarheit zu lösen, besteht darin, Ihren Verweis auf den Enum vollständig zu qualifizieren:
if((MessageBox::Show("CAN Watchdog ... Would you still like to quit?", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::No))
Ich habe eine zweite Methode darin gefunden Faden; Beweg den using namespace System...
Aussagen aus dem namespace
Blockieren Sie und beziehen Sie sich dann über den globalen Namespace auf die Enum.
if((MessageBox::Show("CAN Watchdog ... Would you still like to quit?", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == ::DialogResult::No))
Andere Tipps
if((MessageBox::Show("...", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::No)) { e->Cancel = true; // don't close }
Hier ist eine Arbeitslösung, die einen zusätzlichen Code enthält, damit Sie das gesamte Bild sehen können. In diesem Beispiel funktioniert einige BackgroundWorker
Das muss gestoppt werden, bevor die App geschlossen wird.
#pragma region Start/Stop/Exit
private: System::Void backgroundWorker1_RunWorkerCompleted(System::Object^ sender, System::ComponentModel::RunWorkerCompletedEventArgs^ e) {
if(e->Cancelled)
{
rtbLog->Text = rtbLog->Text + ">>> Application stopped \n";
}
else
{
rtbLog->Text = rtbLog->Text + ">>> Application completed \n";
}
}
private: System::Void startToolStripMenuItemStart_Click(System::Object^ sender, System::EventArgs^ e)
{
if (backgroundWorker1->IsBusy == false)
{
backgroundWorker1->RunWorkerAsync(1); //starting background worker
}
}
private: System::Void stopToolStripMenuItemStop_Click(System::Object^ sender, System::EventArgs^ e)
{
if (backgroundWorker1->IsBusy == true && backgroundWorker1->WorkerSupportsCancellation == true)
{
backgroundWorker1->CancelAsync();
}
}
private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
if((MessageBox::Show("Would you still like to quit?", "Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) ==
System::Windows::Forms::DialogResult::No))
{
e->Cancel = true; // Don't close and BackgroundWoker is executing.
}
else
{
if (backgroundWorker1->IsBusy == true && backgroundWorker1->WorkerSupportsCancellation == true)
{
backgroundWorker1->CancelAsync();
}
}
}
private: System::Void exitToolStripMenuItemExit_Click(System::Object^ sender, System::EventArgs^ e) {
Application::Exit(); // The user wants to exit the application. Close everything down.
}
#pragma endregion