formdrag benutzen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Zodiak24.

    formdrag benutzen

    Hallo leute ich will seit ewigzeit mal wieder ein Form Border Style = Noe benutzen um etwas ohne den rahmen zu machen... nun habe ich auch damals das Form Drag benutzt nur leider finde ich mein alten code-schnipsel nicht wieder und bin gerade überfragt habe auch schon zu dem formdrag was hier im Forum gefunden jetzt ist meine frage wenn ich im Code fenster das formdrag (und tab-taste drücken) mache kann ich dann mein fenster sofort bewegen oder gehört noch etwas rein ich benutze das Aktuelle Visual Studio 2015.. weil ich habe es ausprobiert aber es geht nicht vielleicht kann mir einer helfen.... das ich meine form ohne rahmen bewegen kann mit hilfe dieses form drag

    Edit: Ich kann es zwar jetzt bewegen aber ich habe jetzt so ein komisches kleines schwarzes kästchen was ziemlich stört kann ich dies irgendwie ändern das ich die form bewegen kann ohne das man das sehen muss?


    das ist der Code:

    Quellcode

    1. Dim mouseOffset As Point
    2. Private Sub Me_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
    3. mouseOffset = New Point(-e.X, -e.Y)
    4. End Sub
    5. Private Sub Me_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
    6. If e.Button = MouseButtons.Left Then
    7. Dim mousePos = Control.MousePosition
    8. mousePos.Offset(mouseOffset.X, mouseOffset.Y)
    9. Location = mousePos
    10. End If
    11. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Zodiak24“ ()

    Zodiak24 schrieb:

    so ein komisches kleines schwarzes kästchen
    Kannst Du mal ein Bild davon machen? Malst Du da iwas?
    Dein Code funktioniert problemlos, ich sehe da nix.
    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!
    ich habe diesen obigen Code erweitert mit nem Panel zum benutzen weil ohne dem geht es anscheinend nicht
    das rot eingekreiste ist der Panel in den Bereich muss ich klicken um es zu verschieben aber das sieht doof aus

    wenn ich nur dieses Formdrag benutze geht es garnicht also wenn ich nur den obigen Code benutze..

    hier ein bild... das roteingekreiste ist das Panel und worum es geht

    C#-Quellcode

    1. int dX, dY;
    2. private void frmMain_MouseDown(object sender, MouseEventArgs e) {
    3. dX = -e.X;
    4. dY = -e.Y;
    5. }
    6. private void frmMain_MouseMove(object sender, MouseEventArgs e) {
    7. if (e.Button == MouseButtons.Left)
    8. this.Location = new Point(this.Location.X + e.X + dX, this.Location.Y + e.Y + dY);
    9. }


    VB.NET-Quellcode

    1. Private dX, dY As Integer
    2. Private Sub frmMain_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
    3. dX = -e.X
    4. dY = -e.Y
    5. End Sub
    6. Private Sub frmMain_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
    7. If e.Button = MouseButtons.Left Then
    8. Me.Location = New Point(Me.Location.X + dX + e.X, Me.Location.Y + dY + e.Y)
    9. End Sub


    funktioniert bei mir einwandfrei, selbst wenn ich es auf ein Panel anwende. Habe deinen Code nicht getestet.

    Edit:
    Sorry. Hab das eigentliche Problem übersehen. Hätte wohl besser ganz lesen sollen, sorry.

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

    @Zodiak24 Was ganz genau stört Dich an diesem Panel?
    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!
    ja das stört einfach im login bildschirm meines programmes ich hab schon versucht farbe usw. auf transparent aber es nicht nicht wie du siehst an dem bild das es ein selbst gestalltetes login bild ist stört es einfach wenn es hinter der picturebox mache dann kann ich es nciht benutzen

    RodFromGermany schrieb:

    @Zodiak24 Was ganz genau stört Dich an diesem Panel?

    Aus dem ersten Post geht hervor, dass das Panel die Form zwar draggen lässt, aber seine schwarze Erscheinung stört.

    Das Problem wird wohl sein, dass da eine PictureBox oder ähnliches hinten dran sitzt. Mit einer PictureBox im Hintergrund funktioniert bei mir die Transparency auch nicht.

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

    Das Problem ist, dass das Panel über einer Picturebox liegt, bei dem Panel als Parent aber logischerweise die Form eingestellt ist. So wird die Transparency nicht gescheit angewendet. Abhilfe kannst du schaffen in dem du dir ne abgeleitete PictureBox-Klasse schreibst, die erlaubt schon im Designer als Container zu dienen. Oder du fügst nach InitializeComponent() ein Panel.Parent = PictureBox ein, musst dann aber manuell die Position einstellen, da diese sich dann verstellt durch den Parent-Change.

    @Zodiak24
    Füge deinem Projekt einen Verweis auf System.Design hinzu und erstelle diese Klasse:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Imports System.Windows.Forms.Design
    3. <Designer(GetType(ParentControlDesigner))>
    4. Public Class ContainerPictureBox
    5. Inherits PictureBox
    6. End Class

    Wenn kein neues UserControl in deiner Designer Toolbox auftaucht musst du eventuell speichern oder so, damit sich das aktualisiert. Dann kannst du unter der Kategorie UserControls einfach die ContainerPictureBox in deine Form reinziehen. Die kannst du dann verwenden wie eine ganz normale PictureBox, musst aber dein Panel welches du transparent machen wolltest, in die PictureBox ziehen, da diese jetzt als Container gelten soll. Wie du das mit deinem Layout anstellst bleibt dir überlassen. Könnte bloß Probleme mit überlappenden PictureBoxen geben. Du brauchst eigentlich auch nur eine Grafik, schneide dir halt deinen Hintergrund schon vorher zurecht und nicht erst im Designer. Wenn das nicht hilft, nimm einfach ein BackgroundImage oder "male" das Bild selbst auf die Form über das Paint-Event.

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

    @Fortender Dies beantwortet meine Frage nicht.
    @Zodiak24 Würdest Du bitte mal meine Frage aus Post #5 beantworten?
    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!
    @RodFromGermany
    Ab und zu mal richtig lesen würde nicht schaden. No offense.
    Er hat ein Fenster mit BorderStyle.None und muss jetzt selbst dafür sorgen, dass er das Fenster ziehen kann. Dazu hat er sich eine Leiste in Form eines Panels erstellen wollen (das ist diese kleine schwarze Box oben im Fenster).
    Diese sollte aber transparent sein, liegt aber über den PictureBoxen in die er Bilder bzw. sein Design lädt. Somit funktioniert Panel.BackColor=Transparent nicht wie er möchte, da das Parent eben die Form ist und nicht das darunterliegende Control.
    Deshalb ist da jetzt ein "gefärbtes" Panel, was ihn stört, da dies ja transparent sein soll. Um das zu fixen hat man mehrere Möglichkeiten, die ich schon genannt habe. Das einfachste wäre seine Bilder zusammenzufügen und das als BackgroundImage zu laden und nicht mit mehreren Picboxen.
    Ich habe aber auch noch gezeigt, dass man es über ein UserControl bewerkstelligen kann.

    Ich weiß echt nicht wie man ihn da falsch oder gar nicht verstehen kann. Tut mir leid.

    Fortender schrieb:

    richtig lesen
    kann ich wohl, nur ist das Problem doch eher hausgemacht.
    @Zodiak24 Wenn Du willst, dass das FormDrag nur im oberen Formbereich funktioniert, brauchst Du kein Panel oder sonst was, es genügt, beim Start nur den betreffenden Bereich zu berücksichtigen:

    VB.NET-Quellcode

    1. Private mouseOffset As Point
    2. Private DragEnable As Boolean = False
    3. Private Sub Me_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
    4. If e.Button = MouseButtons.Left Then
    5. If e.Y < 30 Then ' Hier den Bereich vorgeben
    6. Me.mouseOffset = New Point(-e.X, -e.Y)
    7. Me.DragEnable = True
    8. End If
    9. End If
    10. End Sub
    11. Private Sub Me_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
    12. If Me.DragEnable Then
    13. Dim mousePos = Control.MousePosition
    14. mousePos.Offset(Me.mouseOffset)
    15. Me.Location = mousePos
    16. End If
    17. End Sub
    18. Private Sub Me_MouseUp(sender As Object, e As MouseEventArgs) Handles MyBase.MouseUp
    19. Me.DragEnable = False
    20. End Sub

    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!

    Zodiak24 schrieb:

    ja das stört einfach im login bildschirm meines programmes ich hab schon versucht farbe usw. auf transparent aber es nicht nicht wie du siehst an dem bild das es ein selbst gestalltetes login bild ist stört es einfach wenn es hinter der picturebox mache dann kann ich es nciht benutzen



    hab ich doch beantwortet es nervt halt im gesamt ´bild da oben

    RodFromGermany schrieb:

    ist das Problem doch eher hausgemacht

    Das ist richtig. Allerdings lautete deine Frage was ihn daran stört. Also gut rausgeredet :D
    Problematisch sind halt die vielen Pictureboxen. Er müsste jetzt jeder Picturebox, die da oben in seinem Bereich liegt, die MouseDown/Move Handler zuweisen. Er sollte die Bilder zusammenführen und das als BackgroundImage laden oder selbst drauf zeichnen.