2010-01-18 5 views
1

J'ai un composant pour lequel je construis un éditeur. L'une des choses que fait ce composant est de permettre à d'autres contrôles, de mon propre type, d'être liés à ce composant.Quelle est la méthode correcte pour qu'un éditeur de composants modifie les propriétés d'autres contrôles?

L'éditeur détecte tous ces contrôles et l'éditeur me permet de modifier en masse cette liaison.

Toutefois, si le fichier de formulaire est actuellement enregistré lorsque j'appelle l'éditeur, la modification de ces propriétés me permet de voir les modifications sur ces contrôles lorsque je suis de retour dans le concepteur de formulaire normal, mais le fichier est toujours marqué comme "non modifié", et donc aucun changement n'est enregistré.

Que dois-je faire dans mon éditeur de composants pour signaler au concepteur que quelque chose s'est passé?

Est-ce un simple appel de drapeau ou de méthode, ou ai-je besoin d'un tutoriel plus important à ce sujet?

Laissez-moi essayer de mieux l'expliquer.

Je laisse tomber un composant sur une forme, il se trouve dans la zone grise au-dessous, et que le composant I ont une propriété avec son propre éditeur de propriété. Cela marche.

Quand j'invoque l'éditeur de propriété, il apporte une forme, et sous cette forme que je liste tous les autres contrôles sur la même forme qui a été abandonné le composant sur. Cela signifie que si j'ai une zone de texte et une zone de liste déroulante sur ce formulaire, ils apparaissent dans cette boîte de dialogue qui a été ouverte lorsque j'ai appelé l'éditeur de propriétés. Cela fonctionne aussi. Si mon éditeur de propriétés modifie les propriétés de cette zone de texte ou de la liste déroulante, disons que cela modifie la propriété .Text, puis revenez à mon formulaire en fermant l'éditeur de propriétés, je peux inspecter la zone de texte et la liste déroulante et voir la propriété .Text a en effet changé.

Cependant, et c'est le problème, le fichier n'est pas marqué comme modifié. Cela signifie que si j'appuie sur F5, le débogueur démarre sans reconstruction et si je ferme et rouvre le formulaire, les propriétés reviennent à leur dernière valeur enregistrée.

Je vais jeter un oeil à la méthode OnComponentChange à partir de l'une des réponses et voir si cela résout ce problème.

+0

Souhaitez-vous expliquer un peu plus la formulation (composant, contrôle, liaison)? (avec des exemples?) Voulez-vous dire par lier la liaison d'une propriété? – Karussell

Répondre

1

Pour autant que je peux comprendre votre question ...

Vous devriez être en mesure de gérer les notifications de créateurs de valeur avec des changements propriété OnComponentChanging and OnComponentChange transactions. Ces méthodes sont appelées automatiquement si SetValue a été appelé:

TypeDescriptor.GetProperties(theComponent).Find(
    theName, True).SetValue(theComponent, theNewValue); 

Il est également possible d'augmenter manuellement la notification OnComponentChange de dire le concepteur que quelque chose est arrivé et un changement déjà eu lieu.

+0

Merci, c'est la dernière phrase dont j'ai besoin, je n'ai pas besoin de réagir aux changements, mais mon composant doit changer les propriétés des autres contrôles sur le même formulaire. Je vais regarder OnComponentChange. –

+0

@Lasse - Oui, en quelque sorte compris la dernière phrase sera ce dont vous avez besoin. Je voulais juste donner quelques informations en premier. J'espère que ça aide. – mloskot

Questions connexes