Frage

Also habe ich bei Google ein wenig gesucht, um einen Code zu finden, um Schaltflächen mit der Maus zu ziehen. Ich habe viel gefunden, obwohl keines davon tatsächlich für mich funktioniert hat.

Also frage ich dich! :-)

Der Code, den ich versuche, in meinem Formular zu arbeiten:

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

Ich habe natürlich den PictureBox1 auf Button1 geändert.

Aber ich kann das einfach nicht zum Laufen bringen.

Jemand, der vielleicht weiß, warum?

Oh, und ich möchte das in allen meinen Tasten verwenden. Also, was soll ich Taste1 ersetzen, damit es an allen Tasten funktioniert?

-Btw, ich verwende Visual Studio Express.

Danke im Voraus!

War es hilfreich?

Lösung

Auch wenn ich wirklich nur das Einfügen kopiere, wenn es um Windows -Formulare geht

Der Code, den Sie gepostet haben, wird eigentlich nichts von selbst tun!

Zur Arbeit müssen die Ereignisse der MouseDown () und Mousemove () der Kontrolle mit diesen Methoden verdrahtet werden:

  1. Wählen Sie die Steuerung im Formular (PictureBox1).
  2. Klicken Sie im Bereich Eigenschaften (standardmäßig unten rechts) auf das Symbol "Lightning Bolt", um eine Liste der Ereignisse für dieses Steuerelement zu erhalten.
  3. Finde die MouseDown Zutritt und ändern Sie die Dropdown nach rechts davon nach pictureBox1_MouseDown.
  4. Finde die MouseMove Zutritt und ändern Sie die Dropdown nach rechts davon nach pictureBox1_MouseMove.

Führen Sie nun es aus und ziehen Sie den PictureBox1 herum.

Bearbeiten: Hier finden Sie, wie Sie den Code für mehrere Steuerelemente funktionieren, wie in meinem Kommentar unten beschrieben.

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

Andere Tipps

OK, die guten Nachrichten: Hoffentlich haben wir ein CSI -Desktop -Layout, sobald Sie fertig sind.

Die nicht so guten Nachrichten: Ich denke, Sie versuchen, das Falsche zu tun.

Ich gehe davon aus, dass Sie WinForms verwenden, aber die Idee sollte für WPF gleich sein. Wenn Sie Ihr Programm ausführen, wird das Layout festgelegt (entweder dynamisch, beispielsweise ändert es sich, wenn Sie das Fenster ändern, oder statisch, beispielsweise wenn Sie es mit absoluter x, y -Position festlegen).

Was Sie tun möchten, ist irgendwie: Ich möchte die Vorteile von ihnen erhalten, dass sie den gesamten Kesselplattencode erstellen, aber dann möchte ich ihn zur Laufzeit dynamisch ändern ...

Ich glaube GUI ist raus).

Machen Sie Babyschritte, aber denken Sie an das große Ganze:

  • Beginnen Sie mit einer Leinwand definiert.
  • Dann können Sie einen Knopf darauf platzieren.
  • Dann täuschen Sie damit, diesen Knopf auf der Leinwand zu bewegen. (Der Code, den Sie in Ihrer Frage haben, sollte für ein Objekt auf einer Leinwand funktionieren.)

Von dort aus nehmen Sie weiterhin Maßnahmen, die Sie näher an Ihr Ziel bringen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top