Formgröße beim Start mit Mausklick festlegen

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Formgröße beim Start mit Mausklick festlegen

    Hallo Zusammen,

    hätte jemand eine Idee, wie ich mit vb.net beim öffnen einer Form realisiere, dass der Nutzer mit dem 1. Klick die linke obere Ecke der Form platziert und mit dem 2. Klick die rechte untere Ecke platziert?

    Ich habe Google damit schon genervt und keine Lösung des Problems gefunden.

    Gruß,
    Tim

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Was mir so in der Schnelle in den Sinn kommt, wäre das du beim Starten nicht das Hauptprogramm startest, sondern ein kleines Tool mit welchem du die 2 Klicks per Maus-Koordinaten speicherst und diese an dein Hauptprogramm übergibst.
    somit sollte es dann möglich sein sicher mal die grösse zu definieren und die Startposition müsste ja der erste klick sein.

    .Scare schrieb:

    Was mir so in der Schnelle in den Sinn kommt, wäre das du beim Starten nicht das Hauptprogramm startest, sondern ein kleines Tool mit welchem du die 2 Klicks per Maus-Koordinaten speicherst und diese an dein Hauptprogramm übergibst.
    somit sollte es dann möglich sein sicher mal die grösse zu definieren und die Startposition müsste ja der erste klick sein.


    Klingt umsetzbar, jedoch hätte ich ne Frage zur Umsetzung, der Nutzer soll nämlich sehen, wo er hingeklickt hat...
    Also wenn er 1 mal geklickt hat, soll von dem Punkt aus ein graues "Viereck" dem Zeiger folgen.
    Hat da vlt. noch jemand ne Idee? vlt. sogar nen Codeschnipsel? :D

    Gruß,
    Tim

    DerTim schrieb:

    Codeschnipsel?


    Haette ich. Musste nur noch die Position und Groesse uebernehmen.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. Using f As New FrmSizeSelection
    4. f.ShowDialog()
    5. End Using
    6. End Sub
    7. End Class


    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class FrmSizeSelection
    3. <DllImport("user32.dll")>
    4. Private Shared Function GetAsyncKeyState(ByVal key As Keys) As Short
    5. End Function
    6. Private r As Rectangle
    7. Private WithEvents Ticker As New Timer With {.Enabled = True, .Interval = 1}
    8. Public Sub New()
    9. SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.ResizeRedraw, True)
    10. InitializeComponent()
    11. FormBorderStyle = Windows.Forms.FormBorderStyle.None
    12. Opacity = 0.01F
    13. TopMost = True
    14. End Sub
    15. Private Sub Ticker_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Ticker.Tick
    16. Dim lDown As Boolean = (GetAsyncKeyState(Keys.LButton) <> 0)
    17. Static wasDown As Boolean = lDown
    18. If lDown Then
    19. Opacity = 1
    20. wasDown = True
    21. If Not r = Nothing Then
    22. Dim w As Integer = Cursor.Position.X - r.X
    23. Dim h As Integer = Cursor.Position.Y - r.Y
    24. If w < 0 Then w = 0
    25. If h < 0 Then h = 0
    26. r.Width = w
    27. r.Height = h
    28. Else
    29. r = New Rectangle(Cursor.Position, New Size(0, 0))
    30. End If
    31. Else
    32. If wasDown Then
    33. Hide()
    34. Else
    35. Location = Cursor.Position
    36. End If
    37. End If
    38. If Not r = Nothing Then
    39. Location = r.Location
    40. Size = r.Size
    41. End If
    42. End Sub
    43. Private Sub FrmSizeSelection_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    44. Using pencil As New Pen(Color.Gray, 5)
    45. e.Graphics.DrawRectangle(pencil, 0, 0, Width - 1, Height - 1)
    46. End Using
    47. End Sub
    48. End Class

    And i think to myself... what a wonderfuL World!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eddy“ ()

    DerTim schrieb:

    es gibt einen Error:


    Tja das liegt daran das du geschrieben hast:

    DerTim schrieb:

    wie ich mit vb.net beim öffnen einer Form


    Also System.Windows.Forms ist nun mal nicht System.Windows.Window. Das bissl Code duerfte aber leicht nach WPF zu portieren sein. ;)
    And i think to myself... what a wonderfuL World!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eddy“ ()

    DerTim schrieb:

    Error BC30456 'Forms' is not a member of 'Windows'.
    Du hast Deinen Thread falsch getauft.
    Bearbeite bitte den Titel entsprechend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!