vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Slitcontainer 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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 =
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel