Question

J'ai donc cherché un peu sur Google pour trouver du code pour faire glisser les boutons avec la souris. J'ai trouvé beaucoup, même si aucun de ces éléments n'a fonctionné pour moi.

Alors je vous demande! :-)

Le code que j'essaie de travailler dans mon formulaire:

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;
  }

J'ai bien sûr changé la Picturebox1 en bouton1.

Mais je ne peux pas faire fonctionner cela.

Quiconque peut savoir pourquoi?

Oh, et je veux l'utiliser à tous mes boutons, alors que dois-je remplacer Button1 pour le faire fonctionner à tous les boutons?

-BTW, j'utilise Visual Studio Express.

Merci d'avance!

Était-ce utile?

La solution

Même si je copie vraiment le collage en ce qui concerne les formulaires Windows

Le code que vous avez publié ne fera rien seul!

Pour travailler, les événements Mousedown () et MouseMove () du contrôle doivent être câblés à ces méthodes:

  1. Sélectionnez le contrôle sur le formulaire (PictureBox1).
  2. Dans le volet Propriétés (en bas à droite par défaut), cliquez sur l'icône "Lightning Bolt" pour obtenir une liste des événements pour ce contrôle.
  3. Trouvez le MouseDown Entrée et modifiez la liste déroulante à droite pour pictureBox1_MouseDown.
  4. Trouvez le MouseMove Entrée et modifiez la liste déroulante à droite pour pictureBox1_MouseMove.

Maintenant, exécutez-le et faites glisser le PictureBox1 autour.

Edit: voici comment faire fonctionner le code pour plusieurs contrôles, comme indiqué dans mon commentaire ci-dessous.

    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;
    }

Autres conseils

Ok, la bonne nouvelle: j'espère que nous aurons une disposition de bureau CSI une fois que vous aurez terminé.

La ne pas si bonne nouvelle: je pense que vous essayez de faire la mauvaise chose.

Je suppose que vous utilisez WinForms, mais l'idée devrait être la même pour WPF. Lorsque vous exécutez votre programme, la mise en page est définie (soit dynamiquement, par exemple, elle change lorsque vous redimensionnez la fenêtre, soit statiquement, par exemple lorsque vous la définissez avec une position X, y, y).

Ce que vous voulez faire, c'est en quelque sorte: je veux obtenir les avantages de la création de tout le code de plaque de chaudière, mais ensuite, je veux le changer dynamiquement au moment de l'exécution ...

Je pense que vous devez repenser votre approche, et faire ceci à la fois (après tout, il a fallu Microsoft pour que l'interface graphique soit là où elle est en ce moment ... il faudra du temps pour obtenir le futuriste cool GUI est sorti).

Faites des pas de bébé, mais gardez à l'esprit la vue d'ensemble:

  • Commencez par définir une toile.
  • Ensuite, vous pouvez placer un bouton dessus.
  • Ensuite, trompez-vous en déplaçant ce bouton sur la toile. (Le code que vous avez dans votre question devrait fonctionner pour un objet sur une toile).

De là, continuez à prendre des mesures qui vous rapprochent de votre destination ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top