Je suis nouveau en C# mais je ne suis pas nouveau en matière de codage - je le fais depuis presque deux décennies - et j'ai un problème avec les propriétés d'un contrôle personnalisé que je construis, qui hérite d'un Panel. Lorsque je mets mes propriétés, je peux les voir dans la liste des propriétés de Designer et même les définir, mais lors de l'exécution de ma petite application, il semble que ces valeurs de propriétés ne sont pas utilisées. De même si je change une propriété par programmation: pas d'erreur mais mon contrôle ne fait rien, c'est comme s'ils n'étaient pas correctement positionnés. Cependant, si je le fais par programme en classe, ils fonctionnent. Ma conjecture est que quelque chose dans mes propriétés set/get stuff n'est pas correct. S'il vous plaît voir le morceau de code suivant la façon dont je le fais:Pourquoi les propriétés de mon contrôle ne changeront pas en dehors de sa classe?
public class ColorStrip : Panel
{
// properties
// ------------------------------------------
// size of color clusters (boxes)
private int _clusterSize = 20;
// controls if show the buttons panel
private Boolean _showButtons;
// property setters/getters
// ------------------------------------------
// clusterSize...
public int clusterSize
{
get { return _clusterSize; }
set { _clusterSize = value; }
}
// showButtons...
public Boolean showButtons
{
get { return _showButtons; }
set { Console.Write(_showButtons); _showButtons = value; }
}
....
Donc, dans ma forme, par exemple dans la charge ou même dans un événement de clic quelque part, si je mets colorStrip1.showButtons = false; ou colorStrip1.showButtons = true; quelquechose (colorStrip1 serait le nom de l'instance après avoir placé le contrôle dans le formulaire en mode design) ... console.write dit toujours 'false'; Même si je le place dans la liste des propriétés de conception comme 'vrai', il ne reflétera pas la valeur établie, même si je l'ai par défaut à vrai, il ne changera jamais à l'extérieur. Des idées? Non des méthodes n'obtiennent pas la valeur de la propriété nouvelle et réglée à l'extérieur non plus, évidemment la chose getter/setter ne fonctionne pas. Il me semble que je ne fais pas exactement comme je l'ai défini ou obtenir mes propriétés en dehors de la classe. Ca ne marche qu'à l'intérieur, comme un charme ... Toute aide ... très appréciée!
Vive
lithium
P.S. POUR CLARIFIER LA SOLUTION:
Définition de la propriété dans ce cas ne fonctionne pas parce que je tentais d'utiliser une nouvelle valeur définie dans le constructeur, qui semble ne peut pas obtenir les nouvelles valeurs car il est, bien, bâtiment la chose. Si modifiez la valeur de la propriété en mode Conception> Editeur de propriétés ou dans le code externe de l'objet, par exemple dans son événement de chargement, il sera modifié mais lisible pour toutes les méthodes sauf le constructeur, bien sûr :)
Existe-t-il plusieurs threads obtenant et définissant les propriétés? Pouvez-vous nous donner le code de test? – DVD
Gardez à l'esprit que vous écrivez la valeur * old * de '_showButtons' - si vous faites deux séries à la suite, voyez-vous la nouvelle valeur? –
Notez que les propriétés dans .NET * doivent être nommées en utilisant pascal-case, c'est-à-dire que la première lettre doit être en majuscule. – Lucero