Altro Come posso fare per fare in modo che il mio Form si sposti con il movimento del Mouse?

A-Maurizio

Utente Iron
31 Dicembre 2022
10
3
0
7
Ultima modifica:
Ciao a Tutti da Maurizio
Il mio problema e questo :
A Forza di Fare sono riuscito con l'uso di Visual Studio 2022
a rendere Un Form in modo Circolare come questo :

Form_Circolare_VS_2022.jpg


Grazie hai Suggerimenti di PowZerR Che lo ritengo una persona Fantastica.
Però malgrado i miei sforzi per capire il tutto
Se tento di spostare il form con l'uso del Mouse
Esso non si sposta .

Io il codice li scritto cosi ! :

Codice:
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Close()
    End Sub

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        Dim xOffset As Integer
        Dim yOffset As Integer
        Dim mouseoffset As Object
        Dim MouseDown As VariantType

        If e.Button = MouseButtons.Left Then
            xOffset = -e.X - SystemInformation.FrameBorderSize.Width
            yOffset = -e.Y - SystemInformation.CaptionHeight -
                SystemInformation.FrameBorderSize.Height
            mouseOffset = New Point(xOffset, yOffset)
            MouseDown = True
        End If
    End Sub

    Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
        Dim MouseDown
        Dim mouseOffset


        If MouseDown Then
            Dim mousePos As Point = Control.MousePosition
            mousePos.Offset(mouseOffset.Form.X, mouseOffset.Y)
            Location = mousePos
        End If
    End Sub

    Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
        Dim MouseDown As VariantType
        ' Changes the isMouseDown field so that the form does
        ' not move unless the user is pressing the left mouse button.
        If e.Button = MouseButtons.Left Then
            MouseDown = False
        End If
    End Sub

Pertanto La Cosa Funziona ma solo in parte
Pertanto come faccio per risolvere questo problema .
Grazie Saluti da Maurizio
 
Ad occhio vedo che usi MouseDown per sapere se al momento stai trascinando il form, ma lo dichiari localmente in tutte e tre le funzioni, di fatto quindi sono tre variabili diverse e non contengono il valore che ti aspetti. Sposta la variabile nel contesto della classe del form (fuori dalle funzioni ma dentro Class Form1):

Private MouseDown As Boolean = False

E cancella le varie Dim interne alle funzioni che lo ridichiarano. Fai la stessa cosa con mouseOffset (invece di As Boolean è As Point). Non ho provato il codice quindi potrebbero esserci altri problemi, prova e in caso rispondi sempre qui.
 
Innanzitutto, dovresti assicurarti di avere dichiarato le variabili MouseDown e mouseOffset come variabili globali, in modo che possano essere utilizzate in tutti i metodi del form. Inoltre, dovresti assicurarti di inizializzare MouseDown a False quando il form viene caricato, in modo che non si sposti quando viene cliccato per la prima volta.

Un altro possibile problema potrebbe essere legato alla gestione degli eventi di mouse. Assicurati di aver impostato gli eventi MouseDown, MouseMove e MouseUp sull'oggetto Form1, in modo che vengano chiamati quando si verificano questi eventi.
 
Ciao a Tutti Sia a Colabrodo che a JunkCoder
Sembra proprio che questo programma a differenza del VB6 non faccia proprio per me
Qualunque cosa decida di fare anche la più banale, essa non fa altro che continuare a darmi errori .
Pertanto faccio avere il mio progetto cosi ché voi possiate darle un occhiata più da vicino
suggerendomi dove ancora una volta io ho sbagliato
Grazie Siete Fantastici entrambi
Saluti da Maurizio
 

Allegati

  • Creare_Form_Circolare.zip
    265.5 KB · Visualizzazioni: 2
Hai cambiato i tipi alle variabili come suggerito ma non le hai spostate fuori dalle funzioni. Non è VB.NET a essere in difetto: in tutti i linguaggi orientati a gli oggetti si usano in questo modo le variabili condivise, al massimo puoi dichiararle come statiche. Ovviamente un nuovo linguaggio non si impara in un giorno e VB.NET moderno è evoluto tanto da sembrare un altro linguaggio rispetto a VB6.
 
Hai cambiato i tipi alle variabili come suggerito ma non le hai spostate fuori dalle funzioni. Non è VB.NET a essere in difetto: in tutti i linguaggi orientati a gli oggetti si usano in questo modo le variabili condivise, al massimo puoi dichiararle come statiche. Ovviamente un nuovo linguaggio non si impara in un giorno e VB.NET moderno è evoluto tanto da sembrare un altro linguaggio rispetto a VB6.
Messaggio unito automaticamente:

Ciao @JunkCoder Grazie della tua Delucidazione in merito
Hai sotto mano dei titoli di libri ho link ha qui posso attingere le funzioni di base ; Magari anche con schemi pratici ; Te né sarei veramente grato .
Grazie Saluti e Buona Serata a Tutti
 

DISCUSSIONI SIMILI