Guten Morgen,
nachdem ich nun fast die ganze Nacht nachgedacht und ausprobiert habe, habe ich keine Idee mehr und hoffe, es findet sich jemand, der/die mir helfen kann.
Folgende Ausgangssituation:
Ich habe diverse CustomControls geschrieben. Wenn nötig ist dabei über den Quelltext der Class ein ContextMenu mit eingebunden. Das alles läuft fehlerfrei.
Nun sind einzelne CustomControls im Laufe der Zeit immer größer geworden und aus Gründen der Übersichtlichkeit wollte ich die ContextMenus in eine eigene Class geben, um diese dann im CustomControl mit den gewünschten MenüOptionen einzubinden.
Mein Code sind dabei folgendermaßen aus (ich beschränke ihn hier auf 1 Option, weil's wohl mehr nicht braucht):
Zunächst die Class für's ContextMenu
Dann die relevanten Zeilen im CustomControl:
Wenn ich nun das CustomControl in der Form einbinde und mit MouseRechts abrufe, läuft alles ganz normal. Das ContextMenu sieht wie gewünscht aus, die einzelnen Optionen sind aktiviert oder deaktiviert wie's sein soll. Auch der Event wird über die Zeile RaiseEvent CM_Copy() angesteuert. Nur ausgelöst wird dieser Event nicht, zumindest kommt in der Form nichts davon an. Bei der Gestaltung des CustomControls wurde mir der Handler myContext_Menu.CM_Copy ganz normal angeboten, so wie z.B. der Handler Me.TextChanged, der völlig normal ausgeführt werden würde.
Weiß jemand Rat, wie der Event CM_Copy im CustomControl ausgelöst werden kann und feuert (also Zeile 11-13 ausführt)?
So weit, so gut (oder eben schlecht). Ich hoffe nun, ich habe hier nichts vergessen und meine Beschreibung ist verständlich geblieben. Der Editor hier hat's mir nicht leichtgemacht und meistens gemacht, was er aber nicht ich wollte. 2 x neu angefangen und jetzt sieht's immer noch nicht so aus, wie's soll. Die vielen Leezeilen z.B. sind nicht gewollt, aber kommen auch nach dem löschen immer wieder. Geht es da anderen eigentlich genauso oder bin nur ich zu doof, um ihn richtig zu bedienen?
Also, ich brauch jetzt noch 'ne Mütze Schlaf.
Vielen Dank für Eure Hilfe.
Nachtrag: Die ungewünschten Leerzeilen sind jetzt, nach dem zweiten Mal, löschen weg, aber ich traue mich nicht, die Zeilen wie im .Net-Editor einzurücken. Darum siehts jetzt so aus.
nachdem ich nun fast die ganze Nacht nachgedacht und ausprobiert habe, habe ich keine Idee mehr und hoffe, es findet sich jemand, der/die mir helfen kann.
Folgende Ausgangssituation:
Ich habe diverse CustomControls geschrieben. Wenn nötig ist dabei über den Quelltext der Class ein ContextMenu mit eingebunden. Das alles läuft fehlerfrei.
Nun sind einzelne CustomControls im Laufe der Zeit immer größer geworden und aus Gründen der Übersichtlichkeit wollte ich die ContextMenus in eine eigene Class geben, um diese dann im CustomControl mit den gewünschten MenüOptionen einzubinden.
Mein Code sind dabei folgendermaßen aus (ich beschränke ihn hier auf 1 Option, weil's wohl mehr nicht braucht):
Zunächst die Class für's ContextMenu
VB.NET-Quellcode
- Public Class TBox_KontextMenu
- Inherits ContextMenu
- Public Event CM_Copy() ' aus Platzgründen hier nur mit einer Option!!!
- Public WithEvents MenuItem_Copy As New MenuItem()
- Public Sub New()
- MyBase.New()
- Me.Name = "FirstMenu"
- Call Created_ContextMenu()
- End Sub
- Friend Sub Created_ContextMenu()
- Me.MenuItems.Add(MenuItem_Copy)
- With MenuItem_Copy
- .Name = "CMI_Copy" : .Text = "Kopieren" : .ShowShortcut = True : .Shortcut = Shortcut.CtrlC
- AddHandler .Click, AddressOf MenuItem_Click
- End With
- End Sub
- Private Sub ContextMenu_Popup(sender As Object, e As EventArgs) Handles Me.Popup
- Dim SelLength As Integer = DirectCast(Me.SourceControl, CV_TextBox).SelectionLength
- MenuItem_Copy.Enabled = CBool(SelLength > 0)
- End Sub
- Private Sub MenuItem_Click(sender As Object, e As EventArgs)
- Select Case DirectCast(sender, MenuItem).Name
- Case "CMI_Copy"
- RaiseEvent CM_Copy()
- End Select
- End Sub
- End Class
Dann die relevanten Zeilen im CustomControl:
Wenn ich nun das CustomControl in der Form einbinde und mit MouseRechts abrufe, läuft alles ganz normal. Das ContextMenu sieht wie gewünscht aus, die einzelnen Optionen sind aktiviert oder deaktiviert wie's sein soll. Auch der Event wird über die Zeile RaiseEvent CM_Copy() angesteuert. Nur ausgelöst wird dieser Event nicht, zumindest kommt in der Form nichts davon an. Bei der Gestaltung des CustomControls wurde mir der Handler myContext_Menu.CM_Copy ganz normal angeboten, so wie z.B. der Handler Me.TextChanged, der völlig normal ausgeführt werden würde.
Weiß jemand Rat, wie der Event CM_Copy im CustomControl ausgelöst werden kann und feuert (also Zeile 11-13 ausführt)?
So weit, so gut (oder eben schlecht). Ich hoffe nun, ich habe hier nichts vergessen und meine Beschreibung ist verständlich geblieben. Der Editor hier hat's mir nicht leichtgemacht und meistens gemacht, was er aber nicht ich wollte. 2 x neu angefangen und jetzt sieht's immer noch nicht so aus, wie's soll. Die vielen Leezeilen z.B. sind nicht gewollt, aber kommen auch nach dem löschen immer wieder. Geht es da anderen eigentlich genauso oder bin nur ich zu doof, um ihn richtig zu bedienen?
Also, ich brauch jetzt noch 'ne Mütze Schlaf.
Vielen Dank für Eure Hilfe.
Nachtrag: Die ungewünschten Leerzeilen sind jetzt, nach dem zweiten Mal, löschen weg, aber ich traue mich nicht, die Zeilen wie im .Net-Editor einzurücken. Darum siehts jetzt so aus.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „claus“ ()