3 Stimmen

Wie behandle ich das Ziehen eines Etiketts in C#?

Ich versuche, ein Formular zu erstellen, in dem der Benutzer ein Etikett ziehen und auf einem Textfeld ablegen kann. Ich kann ein AllowDrop im Textfeld finden, aber es gibt keine Eigenschaft wie "AllowDrag" im Etikett. Außerdem habe ich Methoden für alle Drag & Drop-Ereignisse für das Etikett erstellt (DragEnter, DragLeave usw.), aber keine davon scheint zu funktionieren. Ich kann nicht herausfinden, wie ich ziehen soll. Wie kann ich es handhaben?

        private void label1_Click(object sender, EventArgs e)
    {

        // This one works
        status.Text = "Click";
    }

        private void label1_DragOver(object sender, DragEventArgs e)
    {

        // this and the others do not
        status.Text = "DragOver";
    }

    private void label1_GiveFeedback(object sender, GiveFeedbackEventArgs e)
    {
        status.Text = "GiveFeedback";
    }

    private void label1_DragDrop(object sender, DragEventArgs e)
    {
        status.Text = "DragDrop";
    }

    private void label1_DragEnter(object sender, DragEventArgs e)
    {
        status.Text = "DragEnter";
    }

    private void label1_DragLeave(object sender, EventArgs e)
    {
        status.Text = "DragLeave";
    }

    private void label1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
    {
        status.Text = "QueryContinueDrag";
    }

0 Stimmen

Ich denke, die Antwort von 'nobugz unten gibt Ihnen, was Sie brauchen, aber für den Fall, dass es nicht, beschreiben Sie bitte genau, was Sie wollen, passieren, wenn das Etikett über die TextBox ist, und Sie Maus-oben (d.h. Drop). besten,

18voto

Hans Passant Punkte 894572

Es gibt keine "AllowDrag"-Eigenschaft, Sie starten das D+D aktiv mit der DoDragDrop()-Methode. Und die Ereignishandler müssen sich auf dem D+D-Ziel befinden, nicht auf der Quelle. Ein Beispielformular, es braucht ein Label und ein Textfeld:

  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
      label1.MouseDown += new MouseEventHandler(label1_MouseDown);
      textBox1.AllowDrop = true;
      textBox1.DragEnter += new DragEventHandler(textBox1_DragEnter);
      textBox1.DragDrop += new DragEventHandler(textBox1_DragDrop);
    }

    void label1_MouseDown(object sender, MouseEventArgs e) {
      DoDragDrop(label1.Text, DragDropEffects.Copy);
    }
    void textBox1_DragEnter(object sender, DragEventArgs e) {
      if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy;
    }
    void textBox1_DragDrop(object sender, DragEventArgs e) {
      textBox1.Text = (string)e.Data.GetData(DataFormats.Text);
    }
  }

2voto

Blindy Punkte 59463

Sie müssen die Beschriftung manuell verschieben, indem Sie ein bool halten, das Sie wahr machen, wenn Sie nach unten drücken und falsch, wenn Sie die Schaltfläche loslassen, und in Ihrem mousemove-Ereignis bewegen Sie das Steuerelement an die Maus, wenn das bool wahr ist.

Ein Beispiel finden Sie unter aquí .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X