none
Mouse.SetCursor(cursors.SizeAll) Methode funktioniert nicht RRS feed

  • Frage

  • Hallo liebe msdn Gemeinde,

    ich habe ein kleines Problem mit dem Verändern der Form des Mauszeigers zur Laufzeit.
    In diesem Programmbeispiel tut sich garnichts mit dem Mauszeiger.
    Er behält immer die Form .Arrow, sollte beim Auftreten des MouseMove Ereignisses
    die Form .SizeAll annehmen.

    In der Bibliothek habe ich zwei SetCursor Methoden gefunden.
    IToolboxService.SetCursor-Methode
    Namespace:  System.Drawing.Design
    und
    Mouse.SetCursor-Methode
    Namespace:  System.Windows.Input
    Welches ist die Richtige?

    In der Bilbiothek bin ich auf dieses Beispiel gekommen.
    http://msdn.microsoft.com/de-de/library/ms771569.aspx


    Hilft mir nicht weiter, da in xaml erstellt.

    Habe schon sämtliche Foren abgesucht. Nichts zu diesem Thema gefunden.

    Grüße
    Ellen

    'dieses Programm hat die Aufgabe ein Steuerelement auf einer Form zu verschieben
    
    'mit MouseDown wird es "angefasst""
    
    'mit MouseMove bei gehaltener Maustaste verschoben 
    
    'mit MouseUp wieder "losgelassen" und verbleibt in der Position
    
    
    
    Private moveControl As Boolean = False
    
    Private locStart, ptStart, newloc, mouseloc As Point
    
    Private parentClass As Control
    
    
    
     
    
    Private Sub GrLabel1_mouseMove(ByVal sender As Object, _
    
                      ByVal e As System.EventArgs) _
    
                      Handles GrLabel1.MouseMove
    
    
    
        'der Name der parent class oder form:
    
        parentClass = CType(sender, Control).Parent
    
        
    
        'die Größe des verfügbaren Client Bereiches innerhalb der
    
        'ich das Steuerelement verschieben kann:
    
        Dim parentsize As Size = CType(sender, Control).Parent.ClientSize
    
    
    
        'die Größe des Steuerelementes (Grlabel1):
    
        Dim clSize As Size = CType(sender, Control).ClientSize
    
    
    
        mouseloc = Me.PointToClient(MousePosition)
    
    
    
        If moveControl Then
    
    
    
          newloc = locStart + mouseloc - ptStart
    
    
    
          ' verschieben nur innerhalb von parent.clientsize
    
          If newloc.X + clSize.Width <= parentsize.Width And _
    
            newloc.X >= 0 And _
    
            newloc.Y + clSize.Height <= parentsize.Height And _
    
            newloc.Y >= 0 Then GrLabel1.Location = newloc
    
          
    
        End If
    
    
    
      End Sub
    
      
    
    
    
      'Debugger liefert bei SetCursor in beiden Fällen False zurück
    
      'statusDown: False
    
      'statusUp: False
    
      Private Sub GrLabel1_mouseDown(ByVal sender As Object, _
    
                      ByVal e As System.EventArgs) _
    
                      Handles GrLabel1.MouseDown
    
        'Ursprungskoordinate des Label
    
        locStart = CType(sender, Control).Location
    
        moveControl = True
    
        'Startkoordinate MouseDown
    
        ptStart = Me.PointToClient(MousePosition)
    
    
    
        'folgendes funktioniert auch nicht
    
        'DisplayArea.Cursor = Cursors.Arrow
    
        'Mouse.OverrideCursor = Cursors.SizeAll
    
        'Mouse.UpdateCursor()
    
        Dim i As Boolean = Mouse.SetCursor(Cursors.SizeAll)
    
        Debug.Print("statusDown: " + i.ToString)
    
      End Sub
    
    
    
      Private Sub GrLabel1_mouseUp(ByVal sender As Object, _
    
                      ByVal e As System.EventArgs) _
    
                      Handles GrLabel1.MouseUp
    
        moveControl = False
    
        'Mouse.OverrideCursor = crsArrow
    
        Dim i As Boolean = Mouse.SetCursor(Cursors.Arrow)
    
        Debug.Print("statusUp: " + i.ToString)
    
      End Sub
    
    


    • Bearbeitet Ellen Ramcke Samstag, 5. Juni 2010 20:47 link als hyperlink
    Montag, 4. Januar 2010 12:02

Antworten

  • Hallo Ellen,

    in Windows Forms Anwendungen veränderst Du den Cursor normal über die Cursor-Eigenschaft des betreffenden Objects oder allgemein für Deine Anwendung über Cursor.Current:

      Private Sub Button1_MouseDown(ByVal sender As Object, _
                                    ByVal e As System.Windows.Forms.MouseEventArgs _
                                          ) Handles Button1.MouseDown
    
        Cursor.Current = Cursors.SizeAll
      End Sub
    
      Private Sub Button1_MouseUp(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.MouseEventArgs _
                                        ) Handles Button1.MouseUp
    
        Cursor.Current = Cursors.Default
      End Sub

    Die Mouse.SetCursor Methode ist eher spezifisch für Windows Presentation Foundation (WPF).

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Montag, 4. Januar 2010 13:08
    Moderator

Alle Antworten

  • Hallo Ellen,

    in Windows Forms Anwendungen veränderst Du den Cursor normal über die Cursor-Eigenschaft des betreffenden Objects oder allgemein für Deine Anwendung über Cursor.Current:

      Private Sub Button1_MouseDown(ByVal sender As Object, _
                                    ByVal e As System.Windows.Forms.MouseEventArgs _
                                          ) Handles Button1.MouseDown
    
        Cursor.Current = Cursors.SizeAll
      End Sub
    
      Private Sub Button1_MouseUp(ByVal sender As Object, _
                                  ByVal e As System.Windows.Forms.MouseEventArgs _
                                        ) Handles Button1.MouseUp
    
        Cursor.Current = Cursors.Default
      End Sub

    Die Mouse.SetCursor Methode ist eher spezifisch für Windows Presentation Foundation (WPF).

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Montag, 4. Januar 2010 13:08
    Moderator
  • Hallo Thorsten,


    ich musste erst einen Verweis aus dem Projekt entfernen (System.Windows.Input). Jetzt geht es.
    Die Cursor Klasse gibt es in zwei Namespaces. Das ist schon verwirrend.
    Richtig ist die Cursor Klasse in System.Windows.Forms
    Naja, habe mich auch zu sehr auf setCursor fixiert.


    Vielen Dank und schöne Grüße
    Ellen

    Montag, 4. Januar 2010 16:08