2011-09-21 3 views
2

J'ai 2 gestionnaires d'événements attachés à des boutons sur le même formulaire. Je veux désactiver le formulaire et afficher un waitCursor pendant que la méthode est en cours d'exécution, puis activer le formulaire et remettre le curseur à la valeur par défaut.2 gestionnaires d'événements sur le même formulaire agissant différemment

Voici la partie étrange: avec presque le même code, un de ces événements fonctionne, et l'autre ne fonctionne pas! Quel pourrait être le problème ici?

Celui-ci fonctionne.

private void btnExceptionReport_Click(object sender, EventArgs e) 
    {    
     lblStatus.Text = "Printing exception report."; 

    ActiveForm.Cursor = Cursors.WaitCursor; 
    //Form.ActiveForm.Enabled = false; 

    if (DatabaseOps.printItemReport("Exceptions", cboEmployee.Text)) 
    { 
     lblStatus.Text = "Exception report printed."; 
    } 
    else 
    { 
     MessageBox.Show("Error printing exception report."); 
     lblStatus.Text = "Error printing Exception report."; 
    } 

    //Form.ActiveForm.Enabled = true; 
    ActiveForm.Cursor = Cursors.Default; 
} 

Alors que celui-ci renvoie une erreur lorsque je tente de changer le curseur à défaut, indiquant que ActiveForm est null.

private void btnWIPReport_Click(object sender, EventArgs e) 
{  
    lblStatus.Text = "Printing WIP Materials report."; 

    ActiveForm.Cursor = Cursors.WaitCursor; 
    //Form1.ActiveForm.Enabled = false; 

    if (DatabaseOps.printItemReport("WIP", cboEmployee.Text)) 
    { 
     lblStatus.Text = "WIP Materials report printed."; 
    } 
    else 
    { 
     MessageBox.Show("Error printing WIP Materials report."); 
     lblStatus.Text = "Error printing WIP Materials report."; 
    } 

    //Form1.ActiveForm.Enabled = true; 
    ActiveForm.Cursor = Cursors.Default; //This line gives error saying ActiveForm is null 
} 

Répondre

1

Vous n'avez pas besoin d'appeler ActiveForm. en utilisant simplement cela devrait fonctionner:

Cursor = Cursors.Default; 
+0

-Ce fonctionne! Est-ce que tu sais pourquoi? Pouvez-vous expliquer pourquoi? Je suis mystifié ici. – MAW74656

+1

Le rapport "WIP" détourne l'attention de votre application. Donc ActiveForm car nul, aucun formulaire n'est actif. –

+0

Ok, mais pourquoi WIP fait cela et que le rapport d'exception ne le fait pas? – MAW74656

0

Si vous utilisez uniquement du curseur et WaitCursor standard, il suffit de définir la propriété bool UseWaitCursor définie au contrôle.

Il semble que dans votre code vous avez votre formulaire accessible en tant que 'ceci'.

Ou facultativement, le formulaire est-il accessible si vous transtypez 'expéditeur' en bouton (?) Et appelez la méthode FindForm() sur le résultat tapé.

Et vous devez ajouter un peu de try/finally pour restaurer le curseur même en cas d'exception dans votre code « traitement »

Questions connexes