Как мне справиться с перетаскиванием метки в C #? - PullRequest
3 голосов
/ 14 ноября 2009

Я пытаюсь создать форму, где пользователь может перетащить метку и поместить ее в текстовое поле. Я могу найти AllowDrop в текстовом поле, но в метке нет такого свойства, как «AllowDrag». Также я создал методы для всех событий перетаскивания для метки (DragEnter, DragLeave и т. Д.), Но ни один из них, похоже, не работает. Я не могу понять, как перетащить. Как мне с этим справиться?

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

Ответы [ 2 ]

16 голосов
/ 14 ноября 2009

Нет свойства «AllowDrag», вы активно запускаете D + D с помощью метода DoDragDrop (). И обработчики событий должны быть на цели D + D, а не на источнике. Образец формы, для этого нужна метка и текстовое поле:

  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);
    }
  }
2 голосов
/ 14 ноября 2009

Вы должны вручную перемещать метку, сохраняя значение bool, которое вы делаете истинным, когда нажимаете вниз, и false, когда отпускаете кнопку, и в случае события mousemove вы перемещаете элемент управления на мышь, когда значение bool равно true.

Вы можете найти пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...