| |
VB.NET - Ein- und UmsteigerSlitcontainer bei Click | | | Autor: Bazi | Datum: 28.02.18 13:40 |
| Hallo,
ich nutzte Splitcontainer in einem Programm dass auf Tablets, also ohne Maus bedient wird.
Hier kommt es oft vor, dass sich der Splitter nicht verschieben lässt. Das wollte ich nun mit
folgendem Code verbessern:Private Sub SplitContainer_MouseClick(ByVal sender As Object, ByVal e As _
System.Windows.Forms.MouseEventArgs) Handles _
SplitContainerAufgabe.MouseClick, SplitContainerAufgabeLinks.MouseClick, _
SplitContainerAufgaben.MouseClick, SplitContainerAufgabenLinks.MouseClick, _
SplitContainerAufgabenRechts.MouseClick, _
SplitContainerAufgabeRechts.MouseClick, _
SplitContainerBerichtBesonderheiten.MouseClick, SplitContainerLv.MouseClick, _
SplitContainerLvRechts.MouseClick, SplitContainerNotiz.MouseClick, _
SplitContainerNotizLinks.MouseClick, SplitContainerNotizRechts.MouseClick, _
SplitContainerPlaene.MouseClick, SplitContainerPlaeneRechts.MouseClick, _
SplitContainerProjektMandant.MouseClick
Dim sc = CType(sender, SplitContainer)
If sc.Orientation = Orientation.Horizontal Then
If e.X < sc.Width * 0.5 Then
If sc.SplitterDistance > sc.SplitterIncrement + 1 Then _
sc.SplitterDistance -= sc.SplitterIncrement
Else
If sc.SplitterDistance < sc.Height - sc.SplitterIncrement - 1 _
Then sc.SplitterDistance += sc.SplitterIncrement
End If
'sc.Refresh()
ElseIf sc.Orientation = Orientation.Vertical Then
If e.Y < sc.Height * 0.5 Then
If sc.SplitterDistance < sc.Width - sc.SplitterIncrement - 1 _
Then sc.SplitterDistance = sc.SplitterIncrement
Else
If sc.SplitterDistance > sc.SplitterIncrement + 1 Then _
sc.SplitterDistance -= sc.SplitterIncrement
End If
'sc.Refresh()
End If
End Sub Jedoch wird der Splitter nicht verschoben, sondern zuckt nur und bleibt auf gleicher Stelle.
Im Einzelschritt werden die richtigen Werte zugewiesen. Lasse ich danach weiter laufen, wie gesagt Splitter an gleicher Position.
Habt Ihr eine Idee was ich ändern könnte?
Danke für die Hilfe
Gruß Christian | |
Re: Slitcontainer bei Click | | | Autor: Franki | Datum: 02.03.18 03:00 |
| Hallo Christian,
du hast da einen Gedankenfehler, denn einerseits schreibst du, dass es ohne Maus gehen soll, andererseits hast du ständig .MouseClick im Code stehen. Ohne Maus auch kein .Mousexxx.
Bei Tablets, Smartphones usw. die ohne Maus bedient werden musst du auf die entsprechenden Gesten reagieren die das jeweilige Gerät so bietet. Wenn du auf der sicheren Seite sein möchtest, führst du vorher eine Abfrage ein um welches Gerät PC/Tablet es sich handelt. Dann hast du auch wesentlich mehr Möglichkeiten auf die Interaktion der User auf Tablets zu reagieren.
Einfach die Maus auf ein Tablet zu übertragen funktioniert nicht, schon gar nicht wenn es sich mal um die rechte Maustaste handeln sollte.
Gruß
Frank | |
Re: Slitcontainer bei Click | | | Autor: Bazi | Datum: 02.03.18 06:58 |
| Hallo Frank,
laut Beschreibung von MS wird ein Touch ohne Move als Mouseklick interpretiert. Das funktioniert auch im Programm an allen Stellen.
Es scheint irgend etwas zu geben was dass verschieben verhindert, aber ich komme nicht drauf was es ist. Habe meinen Code schon mehrfach danach durchforstet.
Auch beim Debuggen am PC mit Maus habe ich das. Die Sub SplitContainer_MouseClick löst aus, die Werte des Splitters werden im Code richtig geändert, aber der Splitter nicht verschoben. Beim nächsten Klick habe ich wieder die alten Werte als Startwerte.
Danke für die Hilfe
Gruß Christian | |
Re: Slitcontainer bei Click | | | Autor: Kuno60 | Datum: 02.03.18 13:51 |
| Hallo Bazi,
Der SplitContainer behandelt das verschieben des Splitters intern. Setzt man im SplitterMoved-Ereignis einen Haltepunkt, so wird dieses Ereignis 2x ausgelöst. Einmal durch den Code im MouseClick-Ereignis und das zweite Mal durch die interne Verarbeitung. Da der Splitter aber nicht per Maus verschoben wurde, wird er wieder zurück auf die alte Position gesetzt.
Dein Code funktioniert, wenn du die Eigenschaft "IsSplitterFixed" auf True setzt. Dann kann der Splitter nicht mehr durch die Maus verschoben werden, sondern nur noch durch den Klick auf den Splitter.
Übrigend fehlt bei sc.SplitterDistance = sc.SplitterIncrement, das + vor dem = | |
Re: Slitcontainer bei Click | | | Autor: Bazi | Datum: 04.03.18 15:24 |
| Hallo Kuno,
ich konnte das von Dir beschriebene Verhalten im SplitterMoved beobachten.
Nun versuche ich das und zusätzlich ein manuelles Move im MouseMove einzubauen.
Danke, das + hatte ich übersehen.
Danke für die Hilfe
Gruß Christian
Beitrag wurde zuletzt am 04.03.18 um 15:28:45 editiert. | |
Re: Slitcontainer bei Click | | | Autor: Bazi | Datum: 04.03.18 15:57 |
| Habe nun das MouseDown und MouseMove noch entsprechend behandelt, nun funktioniert alles.
Besten Dank
Danke für die Hilfe
Gruß Christian | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|