Question

Je décompile une DLL en C#.L'un des projets générés par le décompilateur contient plus de 1000 lignes boguées, comme ci-dessous :

this.pictureBox1.BeginInit();

Erreur 385 'System.Windows.Forms.PictureBox' ne contient pas de définition de 'BeginInit' et aucune méthode d'extension 'BeginInit' acceptant un premier argument de type 'System.Windows.Forms.PictureBox' en utilisant la directive ou une référence d'assemblage?)

Il n’existe pas de méthode BeginInit() pour Picturebox standard.J'ai simplement commenté les lignes :

//this.pictureBox1.BeginInit();

Ensuite, j'ai examiné la sortie d'un autre décompilateur, elle ressemble à ci-dessous et le compilateur VS n'a pas d'erreur précédente :

((ISupportInitialize)this.pictureBox1).BeginInit();

A cause d'un crash, je n'ai pas pu exporter toutes les sources d'un coup avec le deuxième décompilateur.Maintenant, je ne suis pas sûr de ce que je dois faire.Je n'ai pas pu exécuter et déboguer le projet car d'autres erreurs doivent d'abord être effacées.Mes options sont :

  1. Commentez simplement les lignes.
  2. Modifier et insérer la balise (ISupportInitialize).
  3. Créez une méthode d'extension si possible.

La dernière option me semble la plus simple.Puis-je créer la méthode d’extension BeginInit(), cela fonctionnera-t-il sans aucun problème ?Et comment puis-je implémenter et utiliser ISupportInitialize ?

Était-ce utile?

La solution

Essaye ça:

public static class PictureBoxExtension {
   public static void BeginInit(this PictureBox pb){
     ((ISupportInitialize)pb).BeginInit();
   }
}

Ou encore mieux, vous pouvez essayer ceci pour tous les contrôles prenant en charge ISupportInitialize.Ceci est masqué pour l'accès normal car il est implémenté explicitement, nous pouvons donc utiliser cette extension pour l'exposer (sans casting) :

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top