2010-07-02 14 views
1

Je travaille actuellement sur une application qui a des navigateurs Web multiples sur un onglet de contrôle avec des barres de progression sur eux. Pour me sauver le code de duplication j'ai voulu créer une méthode où je passe le nom de barre de progression dans une fonction. J'ai créé ce qui suit ci-dessous, mais je reçois cette erreur.Barre de progression, C#

« string » ne contient pas une définition pour « Maximum » et aucune méthode d'extension « maximum » d'accepter un premier argument de type « string » n'a pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?)

private void PassPBName(string PBName) 
     { 

      // Event for the browser 
      AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e; 

      /* The CurrentProgress variable from the raised event 
        * gives you the current number of bytes already downloaded 
        * while the MaximumProgress is the total number of bytes 
        * to be downloaded */ 
      if (e.progress < e.progressMax) 
      { 
       // Check if the current progress in the progress bar 
       // is >= to the maximum if yes reset it with the min 
       if (PBName.Value >= PBName.Maximum) 
        PBName.Value = PBName.Minimum; 
       else 
        // Just increase the progress bar 
        PBName.PerformStep(); 
      } 
      else 
       // When the document is fully downloaded 
       // reset the progress bar to the min (0) 
       PBName.Value = PBName.Minimum; 
     } 
     private void WBIntranet_ProgressChange(object sender, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e) 
     { 

      string progressBar = PBIntranet.Value.ToString(); 
      PassPBName(progressBar); 
     } 

Merci

Répondre

0

J'ai trouvé la solution si quelqu'un d'autre voulait savoir comment faire.

private void PassPBName(ToolStripProgressBar PBName, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e) 
    { 
       /* The CurrentProgress variable from the raised event 
       * gives you the current number of bytes already downloaded 
       * while the MaximumProgress is the total number of bytes 
       * to be downloaded */ 
     if (e.progress < e.progressMax) 
     { 
      // Check if the current progress in the progress bar 
      // is >= to the maximum if yes reset it with the min 
      if (PBName.Value >= PBName.Maximum) 
       PBName.Value = PBName.Minimum; 
      else 
       // Just increase the progress bar 
       PBName.PerformStep(); 
     } 
     else 
      // When the document is fully downloaded 
      // reset the progress bar to the min (0) 
      PBName.Value = PBName.Minimum; 
    } 

    private void WBIntranet_ProgressChange(object sender, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e) 
    { 

     //Pass the PB bar name to PassPBName function to show current progress. 
     PassPBName (PBIntranet, e); 
    } 
1

Si vous envoyez le nom de la barre de progression, vous devez utiliser quelque chose comme la méthode FindControl pour trouver le contrôle. Il est préférable si vous envoyez une référence au lieu contrôle ProgressBar:

private void PassPBReference(ProgressBar PBName) { 
    ... 
} 

et appelez en utilisant seulement:

PassPBReference(PBIntranet); 

(Vous devez bien sûr faire un meilleur nom pour la méthode, qui reflète ce que il le fait et pas seulement comment vous lui passez les paramètres.)

1

Vous avez une chaîne nommée PBName, mais vous l'utilisez comme s'il s'agissait d'une classe de barre de progression. Peut-être que vous vouliez faire passer la classe? En supposant que PBIntranet est la classe de barre de progression réelle, il semble que vous devriez passer cela dans votre fonction PassPBName. Il suffit de deviner, vous devez également passer e à partir de votre événement WBIntranet_ProgressChange, et ne pas en déclarer un autre en PassPBName, ce qui ne fonctionnera pas comme prévu.

0

Vous ne pouvez pas référencer un objet en ayant simplement son nom dans une variable. Vous devriez y accéder par réflexion. Quelque chose comme ceci:

Using System.Reflection; 

ProgressBar myProgress = (ProgressBar)this.GetType().GetField(PBName).GetValue(this); 

Je suis un peu schématique sur la syntaxe, mais peut-être que cela vous aidera à aller plus loin. Une fois que vous avez l'objet réel, vous pouvez accéder au Maxmimum/Minimum/etc.