Bonjour,

Je m'initie un peu avec Visual C# Express.

J'ai voulu compiler le composant SourceGrid initialement prévu pour le framework 1.1

Je tombe sur une erreur que j'arrive très facilement à contourner.
Le pb est que je ne m'explique pas le pourquoi de l'erreur (et j'aime pas, pas comprendre).

Cette dernière est la suivante :

SourceGrid défini dans l'espace de nom SourceGrid2 (utilisé par tous les modules qui compose le contrôle) un enum AutoSizeMode

Manque de bol, ce nom AutoSizeMode est déjà défini dans System.Windows.Forms
(visiblement une nouveauté du FW 2.0, même si je n'en suis pas certain)

Il y a 8 ou 10 fois des construction du type :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
if ((Rows[i].AutoSizeMode & AutoSizeMode.EnableStretch) == AutoSizeMode.EnableStretch)
Là le compilo retourne une erreur, parce que pour lui EnableStretch ne fait pas parti de AutoSizeMode - ce qui indique qu'il fait référence à celui de System.Windows.Forms et non à celui de SourceGrid2 (ce sont des enum dans les 2 cas).

Pourquoi ?

Pour résoudre AutoSizeMode, le compilateur ne devrait-il pas chercher d'abord dans l'espace de nom en cours (SourceGrid2) ?

(à noter que l'enum est bien dans le même espace de nom que la ligne provoquant l'erreur, mais pas dans le même fichier source).

Je passe le problème en corrigeant le code de cette façon :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
if ((Rows[i].AutoSizeMode & SouceGrid2.AutoSizeMode.EnableStretch) == SouceGrid2.AutoSizeMode.EnableStretch)
Ce que je ne comprend pas c'est pourquoi, le compilateur (ainsi que la fonction Goto Definition de l'EDI) va chercher la définition la moins locale (ou de portée la plus éloignée).

Mon incompréhension vient certeinement de ma méconaissance du C# et que je tente de lui appliquer des principes venant d'autres langages.

Mais avez vous l'explication sharpienne de ce comportement ?

Merci d'avance.

Cordialement
Vanquish