Domanda

Quindi ho cercato un po 'su Google per trovare del codice per trascinare i pulsanti con il mouse. Ho trovato molto, anche se nessuno di questi ha funzionato per me.

Quindi te lo sto chiedendo! :-)

Il codice che sto cercando di lavorare nel mio modulo:

bool isDragged = false;
  Point ptOffset;
  private void button1_MouseDown( object sender, MouseEventArgs e )
  {
     if ( e.Button == MouseButtons.Left )
     {
        isDragged = true;
        Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

        ptOffset = new Point();
        ptOffset.X = button1.Location.X - ptStartPosition.X;
        ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
     }
     else
     {
        isDragged = false;
     }
  }

  private void button1_MouseMove( object sender, MouseEventArgs e )
  {
     if ( isDragged )
     {
        Point newPoint = button1.PointToScreen(new Point(e.X, e.Y));
        newPoint.Offset(ptOffset);
        button1.Location = newPoint;
     }
  }

  private void button1_MouseUp( object sender, MouseEventArgs e )
  {
     isDragged = false;
  }

Ovviamente ho cambiato PictureBox1 in Button1.

Ma non riesco proprio a farlo funzionare.

Qualcuno che potrebbe sapere perché?

Oh, e voglio usarlo in tutti i miei pulsanti, quindi cosa dovrei sostituire Button1 per farlo funzionare in tutti i pulsanti?

-BTW, uso Visual Studio Express.

Grazie in anticipo!

È stato utile?

Soluzione

Anche se sto davvero solo copiare incollando quando si tratta di moduli di Windows

Il codice che hai pubblicato non farà davvero nulla da solo!

Per lavorare, gli eventi MouseDown () e MouseMove () del controllo devono essere cablati su quei metodi:

  1. Seleziona il controllo sul modulo (PictureBox1).
  2. Nel riquadro delle proprietà (in basso a destra per impostazione predefinita), fai clic sull'icona "Lightning Bolt" per ottenere un elenco degli eventi per quel controllo.
  3. Trovare la MouseDown ingresso e modifica il discesa a destra di esso a pictureBox1_MouseDown.
  4. Trovare la MouseMove ingresso e modifica il discesa a destra di esso a pictureBox1_MouseMove.

Ora eseguilo e trascina PictureBox1.

EDIT: ecco come far funzionare il codice per più controlli, come indicato nel mio commento qui sotto.

    bool isDragged = false;
    Point ptOffset;

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            isDragged = true;
            Button btn = (Button)sender;
            ptOffset = new Point(btn.Location.X - Cursor.Position.X, btn.Location.Y - Cursor.Position.Y);
        }
        else
        {
            isDragged = false;
        }
    }

    private void button1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDragged)
        {
            Point newPoint = Cursor.Position;
            newPoint.Offset(ptOffset);
            Button btn = (Button)sender;
            btn.Location = newPoint;
        }
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        isDragged = false;
    }

Altri suggerimenti

Ok, la buona notizia: spero che avremo un layout desktop CSI una volta terminato.

La notizia non così buona: penso che tu stia cercando di fare la cosa sbagliata.

Suppongo che tu stia usando Winforms, ma l'idea dovrebbe essere la stessa per WPF. Quando si esegue il programma, il layout viene impostato (in modo dinamico, ad esempio cambia quando si ridimensiona la finestra o staticamente, ad esempio quando la imposta con la posizione assoluta x, y).

Quello che vuoi fare è un po ': voglio ottenere i benefici di loro creando tutto il codice della piastra della caldaia, ma poi, voglio cambiarlo dinamicamente in fase di esecuzione ...

Penso che tu abbia bisogno di ripensare il tuo approccio e fare questo passo alla volta (dopo tutto, ci sono voluti anni Microsoft per portare la GUI dove si trova al momento ... ci vorrà del tempo per ottenere il fuorismo cool GUI è fuori).

Fai piccoli passi, ma tieni a mente il quadro generale:

  • Inizia con una tela definita.
  • Quindi puoi posizionare un pulsante su di esso.
  • Quindi scherzare con lo spostamento di quel pulsante sulla tela. (Il codice che hai nella tua domanda dovrebbe funzionare per un oggetto su una tela).

Da lì, continua a fare passi che ti avvicinano alla tua destinazione ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top