Pregunta

Estoy tratando de usar este código para cerrar un formulario en una respuesta específica de un cuadro de mensaje. Sigo recibiendo un error diciendo que ni Yes ni No pertenece a DialogResult::. Básicamente copié este código directamente del sitio de MS, por lo que no tengo idea de lo que está mal. ¿Ayuda?

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);
                 }
             }

     }
¿Fue útil?

Solución

Hay un choque de nombres entre el DialogResult enumeración y el DialogResult propiedad de Form. Desea el primero, el compilador supone que se refiere al segundo.

Una forma de resolver la ambigüedad es calificar completamente su referencia al enum:

if((MessageBox::Show("CAN Watchdog ... Would you still like to quit?", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::No))

Encontré un segundo método en este hilo; mueve el using namespace System... declaraciones fuera del namespace Bloquear, luego consulte el Enum a través del espacio de nombres global.

if((MessageBox::Show("CAN Watchdog ... Would you still like to quit?", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == ::DialogResult::No))

Otros consejos

if((MessageBox::Show("...", "Watchdog Warning", MessageBoxButtons::YesNo, MessageBoxIcon::Question) == 
    System::Windows::Forms::DialogResult::No))                  
{
   e->Cancel = true;    // don't close              
}                  

Aquí hay una solución de trabajo que tiene algún código adicional para que pueda ver la imagen completa. En este ejemplo hay algo de trabajo BackgroundWorker Eso debe detenerse antes de que la aplicación esté cerrada.

#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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top