2010-06-23 5 views
1

Cette question est liée à C#. Le scénario est que lorsque je clique sur le bouton les opérations comme la lecture de fichier, manipulation de données, et le dumping de fichiers vont se produire.Après l'achèvement de chaque opération, je vais mettre à jour le statut lecture des fichiers est terminée, la manipulation des données terminée) sur l'étiquette qui est dans l'interface utilisateur (FORM-frmTesting)Délégués et événements?

l'événement click bouton est

namespace frmTesting 
     { 
     public partial class Form1 : Form 
     { 
       private void button1_Click_1(object sender, EventArgs e) 
       { 
       class1 l_objClass1 = new class1(); 
        l_objClass1.DoOperation(); 

       } 
      } 


     public class class1 
     { 

      public int DoOperation() 
      { 
        ReadTextFile(); 
        ParsingData(); 
        SaveTextFile(); 
        return 0; 
      } 

      private int ReadTextFile() 
      { 
       //Read the text File 
       return 0; 

      } 

      private int ParsingData() 
      { 
       // Data manipulation 
       return 0; 

      } 

      private int SaveTextFile() 
      { 

       // save the file 
       return 0; 
      } 
     } 
    } 

est-il possible à l'aide des délégués et des événements .... si vous avoir des requêtes plz me reculer

Répondre

0

La réponse courte est oui. Vous ajoutez des événements à class1 et ajoutez des gestionnaires à Form1 avec la logique appropriée. Voici un exemple de la façon de le faire

public partial class Form1 : Form 
    { 


     private void button1_Click_1(object sender, EventArgs e) 
     { 
      class1 obj = new class1(); 
      obj.FileReadingComplete += HandleFileReadingComplete; 
      obj.DataManipulationComplete += HandleDataManipulationComplete; 

      obj.DoOperation(); 

      obj.FileReadingComplete -= HandleFileReadingComplete; 
      obj.DataManipulationComplete -= HandleDataManipulationComplete; 

     } 

     private void HandleFileReadingComplete(object sender, EventArgs args){ 
      //code here 
     } 

     private void HandleDataManipulationComplete(object sender, EventArgs args) 
     { 
      //code here 
     } 

    } 


    public class class1 
    { 

     public event EventHandler FileReadingComplete; 
     public event EventHandler DataManipulationComplete; 

     public int DoOperation() 
     { 
      ReadTextFile(); 
     OnFileReadingComplete(); 
     ParsingData(); 
     OnDataManipulationComplete(); 
     SaveTextFile(); 
     return 0; 
     } 

     private int ReadTextFile() 
     { 
      //Read the text File 
      return 0; 

     } 

     private int ParsingData() 
     { 
      // Data manipulation 
      return 0; 

     } 

     private int SaveTextFile() 
     { 

      // save the file 
      return 0; 
     } 

     public void OnFileReadingComplete() 
     { 
      EventHandler handler = FileReadingComplete; 

      if (handler != null) { 
       handler(this, EventArgs.Empty); 
      } 
     } 

     public void OnDataManipulationComplete() 
     { 
      EventHandler handler = DataManipulationComplete; 

      if (handler != null) { 
       handler(this, EventArgs.Empty); 
      } 
     } 
    } 
2

Vous devez modifier Class1 pour diffuser des événements que d'autres classes peuvent écouter:

public class class1 
{ 
    // Not necessary, but will allow you to add custom EventArgs later 
    public delegate void StatusChangedEventHandler(object sender, EventArgs e); 

    public event StatusChangedEventHandler FileRead; 
    public event StatusChangedEventHandler FileParsed; 
    public event StatusChangedEventHandler FileSaved; 

    public int DoOperation()  
    {  
     ReadTextFile();  
     ParsingData();  
     SaveTextFile();  
     return 0;  
    }  

    private int ReadTextFile()  
    {  
     //Read the text File 
     OnFileRead(EventArgs.Empty); 
     return 0; 
    }  

    private int ParsingData()  
    {  
     // Data manipulation 
     OnFileParsed(EventArgs.Empty); 
     return 0;  
    }  

    private int SaveTextFile()  
    {  
     // save the file 
     OnFileSaved(EventArgs.Empty); 
     return 0;  
    } 

    protected virtual void OnFileRead(EventArgs e) 
    { 
     if(FileRead != null) 
      FileRead(this, e); 
    } 

    protected virtual void OnFileParsed(EventArgs e) 
    { 
     if(FileParsed != null) 
      FileParsed(this, e); 
    } 

    protected virtual void OnFileSaved(EventArgs e) 
    { 
     if(FileSaved != null) 
      FileSaved(this, e); 
    } 
} 

Et alors votre formulaire écouter ces événements et changer l'étiquette appropriée:

public partial class Form1 : Form 
{ 
    private void button1_Click_1(object sender, EventArgs e) 
    { 
     class1 l_objClass1 = new class1(); 

     l_objClass1.FileRead += 
      delegate { lblStatus.Text = "File Read..."; }; 

     l_objClass1.FileParsed += 
      delegate { lblStatus.Text = "File Parsed..."; }; 

     l_objClass1.FileSaved += 
      delegate { lblStatus.Text = "File Saved..."; }; 

     l_objClass1.DoOperation(); 
    } 
} 
+0

salut, justin ..... vous pouvez me dire l'appel de séquence à utiliser dans événement Button_Click – user374191

+0

@ user374191 - Je ne sais pas exactement ce que vous voulez dire. –

+0

FileRead (EventArgs.Empty); ----- comment c'est possible .... il ne faut qu'un argument – user374191

Questions connexes