2010-12-22 13 views
0

Ich habe eine benutzerdefinierte Komponente, die im Wesentlichen eine Anzahl von Steuerelementen in einem Formular überprüfen muss. Die Idee ist, dass der Programmierer zur Entwurfszeit eine Liste von Steuerelementen auswählen kann, die er validieren möchte. Zur Laufzeit möchte ich das Change-Ereignis der einzelnen ausgewählten Steuerelemente behandeln und den Validierungsprozess starten.Behandeln von Ereignissen mit Steuerelementen in benutzerdefinierten Komponenten Windows Forms

Ich habe meine Komponente erstellt. Es hat eine List-Eigenschaft, die die Liste der Steuerelemente speichert, die der Programmierer zur Entwurfszeit auswählte (ich habe meinen eigenen ListEditor implementiert, um das zu erreichen). Jetzt, zur Laufzeit, möchte ich die geänderten Ereignisse der Steuerelemente in der Liste an die Validate-Methode anschließen ... Und hier bleibe ich stecken. Wenn die Komponente zur Laufzeit debuggt, geht sie niemals in die Konstruktoren. Wenn ich die Ereignishandler zur Entwurfszeit hinzufüge, werden sie zur Laufzeit nicht ausgelöst.

irgendwelche Ideen?

dank

+0

Könnten Sie ein bisschen Code wie melden Sie die Ereignisse? –

+0

im Grunde, AddHandler theControl.TextChanged, AddressOf ValidateMethod – tardomatic

Antwort

1

Hoffentlich ist meine Antwort ein wenig aussagekräftiger als die ursprüngliche Frage.

Grundsätzlich ist mein Problem ziemlich einfach. Ich habe eine benutzerdefinierte Komponente, deren Hauptaufgabe es ist, eine Validierung für eine Gruppe von Steuerelementen in dem Formular durchzuführen, in dem sich die Komponente befindet. Zur Entwurfszeit wählt der Benutzer diese Komponenten aus einer Liste aus. Die ausgewählten Steuerelemente werden in einer Eigenschaft der Komponente (einer allgemeinen Liste) gespeichert/serialisiert. Wenn zur Laufzeit eines der Steuerelemente in der Liste geändert wird (d. H. TextChanged wird ausgelöst), muss die Validierungsroutine für alle ausgewählten Steuerelemente ausgeführt werden.

Mein Problem war, dass ich zur Laufzeit jedem der ausgewählten Steuerelemente einen Ereignishandler hinzufügen musste. Der Setter für die Eigenschaft, die die Liste speichert, wird nur zur Entwurfszeit aufgerufen (nachdem der Benutzer die Steuerelemente ausgewählt hat, die er validieren möchte), was bedeutet, dass das Hinzufügen des Handlers zu diesem Zeitpunkt nicht funktionieren wird.

Die Lösung? Anstatt eine generische Liste zu verwenden, habe ich eine BindingList verwendet (kann ObservableCollection ... .net 2.0 nicht verwenden) und habe das ListChanged-Ereignis behandelt. Wenn zur Laufzeit ein neues Steuerelement zur Liste hinzugefügt wird, verdrahte ich das Ereignis für dieses Steuerelement. Das Ereignis wird dann ausgelöst und alles funktioniert wie es sollte.

Verwandte Themen