Question

Je suis nouveau en C #, mais pas nouveau pour le codage --being faire pour presque deux decades--, et ont un problème avec des propriétés dans un contrôle personnalisé Je construis, qui hérite d'un groupe spécial. Quand je mets mes propriétés, je peux les voir dans les propriétés Designer liste et peut même les mettre, mais lors de l'exécution ma petite application, il semble que ces propriétés de valeurs ne sont pas utilisées. Le même si je change une propriété programatically: aucune erreur mais mon contrôle ne fait rien, il est comme ils ne sont pas correctement réglés. Cependant, si je le fais whithin la classe programatically, ils travaillent. Je pense que quelque chose dans mes propriétés set / get choses n'est pas juste. S'il vous plaît voir le morceau de code suivant la façon dont je le fais:

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 endroit d'événement de clic, si je mets colorStrip1.showButtons = false; ou colorStrip1.showButtons = true; quel que soit (colorStrip1 serait le nom d'instance après avoir placé le contrôle sous la forme en mode design) ... console.écrire dit toujours « faux »; Même si je l'ai mis dans la liste des propriétés de conception comme « vrai », il ne reflète pas la valeur réglée, même si je default à vrai, il ne changera jamais à l'extérieur. Des idées? Non des méthodes et obtenir la nouvelle valeur de la propriété à l'extérieur réglé non plus, évidemment la chose getter / setter ne fonctionne pas. Il me semble que je ne suis pas en train de faire le jeu de I manière ou d'obtenir mes propriétés extérieur la classe. Il fonctionne seulement à l'intérieur, comme un charme ... Toute aide ... très apprécier!

Vive

lithium

p.s. POUR CLARIFIER LA SOLUTION:

Définition de la propriété dans ce cas n'a pas fonctionné 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 I changer la valeur de la propriété en mode Création> éditeur de propriétés ou dans le code externe à l'objet, par exemple dans le cas de charge de forme mère de lui, il va changer mais lisible pour toutes les méthodes sauf le constructeur , bien sûr:)

Était-ce utile?

La solution

Il est probable une question de l'ordre d'exécution. Votre poseur de propriété définit simplement une variable, mais ne fait rien de déclenchement sur le contrôle de mettre à jour l'état lié à cette variable (par exemple en ajoutant ou en montrant les boutons, je suppose).

Lorsque vous définissez la propriété befre le reste de l'initialisation est fait, la valeur est utilisée, sinon il est pas parce que lors de la remise initiale, la valeur par défaut est toujours la valeur de la propriété.

Vous devez agir sur le poseur, voici quelques pseudocode pour illustrer:

set {
  _showButtons = value;
  if (alreadyInitialized) {
    UpdateButtons();
  }
}

Remarque: assurez-vous d'abord définir la valeur, agir - sinon vous finissez à l'aide de l'ancienne valeur (comme votre Console.Write() fait)

.

Autres conseils

Le code cité ne semble pas problématique. Etes-vous sûr que vous référencez la même instance de Colorstrip? En outre, vérifiez votre fichier .Designer.cs pour faire en sorte que le code définissant la propriété est là.

En fait, essayez de simplifier votre code en utilisant des propriétés auto mise en œuvre:

public int clusterSize { get;set;}
public Boolean showButtons {get;set;}

public ColorStrip() { ... clusterSize = 20; ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top