[VB 2005] Mausereignisse - Codeorganisation

15/08/2010 - 12:59 von Josef Morlo | Report spam
Hallo!
Ich habe ein Zeichnungsprojekt, bei dem nacheinander auf ein und derselben
Form einzelne Zeichenmodi mit jeweils unterschiedlicher Belegung der
Mausereignisse zum Einsatz kommen. Wenn man mit Flags oder ‚Select
Zeichenmodus’ in der jeweiligen Ereignisbehandlung arbeitet, wird der Code
sehr schnell sehr unübersichtlich. Selbst mit Add-/RemoveHandler und
jeweiligen Delegaten verliert man den Überblick.

Ums etwas konkreter zu machen: Der Nutzer kann sich beispielsweise zunàchst
anhand von Maus, Hilfslinien usw. ein kartesisches Koordinatensystem mit
frei wàhlbarem Ursprung entwerfen. Für den weiteren Verlauf des Projekts
brauche ich davon nur ein Punktearray fürs Neuzeichnen meiner Form. Die
Mausereignisse selbst können und müssten anderweitig belegt werden. Ok, das
sind zwar bis jetzt nur eine Handvoll Codezeilen, im Endeffekt wird das
Ganze nicht mehr überschaubar. ... Danach geht’s weiter mit dem Zeichnen
diverser geometrischer Figuren

Ich habe versucht, die einzelnen Funktionseinheiten auf Klassen zu
verteilen und diese nacheinander zu instanziieren, komme aber nicht recht
weiter. Etwa so:

Public Class AxesOrigin
Private WithEvents mFrm As Form

Sub New(ByVal frm As Form)
mFrm = frm
End Sub
...
End

Public Class Form1
Private mAxesOrigin As AxesOrigin

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
mAxesOrigin = New AxesOrigin(Me)
End Sub

...
End Class

Damit kann ich mir zwar die Klasse mitsamt den Mausereignissen in meine
Form holen, werde sie aber dann nicht mehr los.

Frage 1: Wie müsste man beim zitierten Versuch korrekt ansetzen?

Frage 2: Welche Möglichkeiten, Gliederungsprinzipien gàbe es, in Fàllen mit
mehrfacher Ereignisbelegung, den Code übersichtlich und wartbar zu halten?

Ich hoffe, ich konnte halbwegs verstàndlich machen, worum’s mir geht.

Danke für Ideen und Anregungen.
Grüße

Josef Morlo
 

Lesen sie die antworten

#1 Armin Zingler
15/08/2010 - 13:23 | Warnen spam
Am 15.08.2010 12:59, schrieb Josef Morlo:
Hallo!
Ich habe ein Zeichnungsprojekt, bei dem nacheinander auf ein und derselben
Form einzelne Zeichenmodi mit jeweils unterschiedlicher Belegung der
Mausereignisse zum Einsatz kommen. Wenn man mit Flags oder ‚Select
Zeichenmodus’ in der jeweiligen Ereignisbehandlung arbeitet, wird der Code
sehr schnell sehr unübersichtlich. Selbst mit Add-/RemoveHandler und
jeweiligen Delegaten verliert man den Überblick.

Ums etwas konkreter zu machen: Der Nutzer kann sich beispielsweise zunàchst
anhand von Maus, Hilfslinien usw. ein kartesisches Koordinatensystem mit
frei wàhlbarem Ursprung entwerfen. Für den weiteren Verlauf des Projekts
brauche ich davon nur ein Punktearray fürs Neuzeichnen meiner Form. Die
Mausereignisse selbst können und müssten anderweitig belegt werden. Ok, das
sind zwar bis jetzt nur eine Handvoll Codezeilen, im Endeffekt wird das
Ganze nicht mehr überschaubar. ... Danach geht’s weiter mit dem Zeichnen
diverser geometrischer Figuren

Ich habe versucht, die einzelnen Funktionseinheiten auf Klassen zu
verteilen und diese nacheinander zu instanziieren, komme aber nicht recht
weiter. Etwa so:

Public Class AxesOrigin
Private WithEvents mFrm As Form

Sub New(ByVal frm As Form)
mFrm = frm
End Sub
...
End

Public Class Form1
Private mAxesOrigin As AxesOrigin

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
mAxesOrigin = New AxesOrigin(Me)
End Sub


End Class

Damit kann ich mir zwar die Klasse mitsamt den Mausereignissen in meine
Form holen, werde sie aber dann nicht mehr los.

Frage 1: Wie müsste man beim zitierten Versuch korrekt ansetzen?

Frage 2: Welche Möglichkeiten, Gliederungsprinzipien gàbe es, in Fàllen mit
mehrfacher Ereignisbelegung, den Code übersichtlich und wartbar zu halten?

Ich hoffe, ich konnte halbwegs verstàndlich machen, worum’s mir geht.

Danke für Ideen und Anregungen.




Also ich habe es mir jetzt drei Mal durchgelesen, verstehe aber immer
noch irgendwas zwischen 'Bahnhof' und 'Flughafen'. ;-)

Halte die darzustellenden Objekte im entsprechenden Objektmodell fest.
Zeichne sie im OnPaint. In den Mausereignissen kannst du abhàngig vom
aktuellen Zeichenmodus die entsprechende Aktion ausführen. Wenn
das x verschiedene Modi sind, dann sind das eben x verschiedene "Case"es.
Den jeweiligen Code für einen Case kannst du in eine eigene Funktionen
stecken. Alternativ - evtl ist das das, was du selbst schon beschrieben
hast - kannst du verschiedene Ereignishandler anlegen und beim Wechsel
des Zeichenmodus' mit RemoveHandler+Addhandler den aktuell zu verwendenden
Ereignishandler setzen.

Ich hoffe, das hat irgendetwas mit deiner Aufgabenstellung zu tun.
Ich weiß nicht, was es mit dem Koordinatensystem auf sich hat, warum
es einen Verweis auf die Form benötigt und welches Problem es damit gibt.


Armin

Ähnliche fragen