2011-10-26 3 views
2

J'ai reçu un contrôle utilisateur appelé PicturePanel. Sur les événements de souris (MouseDown, MouseMove, MouseUp), je donne les résultats suivants:Comment définir les valeurs par défaut pour un contrôle utilisateur?

protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (marquee == true && e.Button == MouseButtons.Left && BackgroundImage != null) 
    { 
      //Code to create rectangular marquee 
    } 
    else 
    { 

    } 
} 

niveau variable de classe private bool marquee = false par défaut. Et un public.

private bool marquee = false; 
public bool Marquee 
{ 
    get { return marquee; } 
    set { marquee = value; } 
} 

J'ai même essayé assigner la false à l'initialisation:

public PicturePanel() 
{ 
    InitializeComponent(); 
    marquee = false; 
} 

Mais chapiteau est toujours vrai par défaut. Si je veux désactiver la marque, je dois la définir dans la variable publique picturePanel1.Marquee = false dans le formulaire. Comment est-ce que je peux faire le rectangle de sélection faux par défaut dans le contrôle d'utilisateur?

+0

La meilleure pratique consiste à utiliser par défaut (T) où T pourrait être tout type qui lots LHS lorsque votre confusion. bool someValue = default (bool); – Zenwalker

Répondre

1

Je ne sais pas si c'est ce dont vous parlez, mais si vous faites référence à la valeur par défaut que vous voyez dans le designer, il vous suffit d'ajouter l'attribut suivant à votre propriété :

[DefaultValue{false)] 
public bool Marquee 
... 
+0

Depuis que vous avez évoqué le concepteur, je suis retourné et vérifié. Je n'avais pas considéré que les contrôles existants que j'avais déplacés sur le formulaire n'étaient pas mis à jour avec les modifications de la classe de contrôle utilisateur. Nouveaux contrôles que je fais glisser sur le formulaire ont Marquee comme faux. – Ryder

0

Eh bien, les booléens sont toujours faux par défaut. Vous n'avez pas une variable locale appelée chapiteau ou quelque chose?

Il suffit de définir un point d'arrêt sur private bool marquee = false; et parcourir votre code et vous le trouverez assez rapidement.

+0

Non, il n'y a qu'une seule variable de sélection que j'ai déclarée en haut. En outre, si cela était vrai alors ma variable publique 'Marquee' ne me donnerait pas le comportement attendu. Je peux activer et désactiver le mode de sélection avec 'picturePanel1.Marquee = true' ou' picturePanel.Marquee = false'. Mais je veux que le défaut soit d'avoir le chapiteau. Et j'ai essayé de le définir explicitement à false dans la classe PicturePanel. – Ryder

+0

@Ryder Les booléens sont définitivement faux par défaut. Jetez un oeil à la documentation. http://msdn.microsoft.com/en-us/library/c8f5xwh7.aspx – alexn

0

Votre question est peut-être que lorsque vous utilisez le concepteur pour « dessiner » le contrôle sur la forme, il pourrait être enregistrer l'événement MouseDown, le réglage de la Marquee true. Vous pouvez empêcher cela en cochant this.DesignMode dans votre gestionnaire d'événements.

Exemple:

if (this.DesignMode) return; 
Questions connexes