Перетаскивание не работает - PullRequest
2 голосов
/ 24 марта 2011

У меня есть веб-сервис загрузки / выгрузки, созданный с помощью WCF. Я использую диез в качестве языка.

В моем текстовом поле разрешено перетаскивание, которое позволяет перетаскивать в него элементы, но оно не позволяет мне это делать, но я по-прежнему не вижу никаких признаков над ним.

Есть что-то, чего мне не хватает? К вашему сведению, я создал другую программу, используя точно такой же код, и я мог без проблем перетаскивать элементы.

    private void FileTextBox_DragEnter(object sender, DragEventArgs e)
    {
        //Makes sure that the user is dropping a file, not text
        if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
            //Allows them to continue
            e.Effect = DragDropEffects.Copy;
        else
            e.Effect = DragDropEffects.None;
    }





    private void FileTextBox_DragDrop(object sender, DragEventArgs e)
    {
        String[] files = (String[])e.Data.GetData(DataFormats.FileDrop);

        foreach (string file in files)
        {
            FileTextBox.Text = file.ToString();
        }
    } 

Ответы [ 2 ]

3 голосов
/ 17 сентября 2012

Обычные события DragEnter, DragOver, Drop, ... не будут работать для TextBox! Используйте PreviewDragEnter, PreviewDragOver, PreviewDrop вместо!

Также убедитесь, что в PreviewDragOver и / или PreviewDragEnter установлен параметр DragDropEffects!

Небольшой пример: перетащите папку в текстовое поле

XAML часть:

             <TextBox
                Text=""
                Margin="12"
                Name="textBox1"
                AllowDrop="True"
                PreviewDragOver="textBox1_DragOver"
                PreviewDragEnter="textBox1_DragOver"
                PreviewDrop="textBox1_Drop"/> 

CodeBehind часть:

    private void textBox1_DragOver(object sender, DragEventArgs e)
    {
        if(e.Data.GetDataPresent(DataFormats.FileDrop, true))
        {
            string[] filenames = e.Data.GetData(DataFormats.FileDrop, true) as string[];

            if(filenames.Count() > 1 || !System.IO.Directory.Exists(filenames.First()))
            {
                e.Effects = DragDropEffects.None;
                e.Handled = true;
            }
            else
            {
                e.Handled = true;
                e.Effects = DragDropEffects.Move;
            }
        }
    }

    private void textBox1_Drop(object sender, DragEventArgs e)
    {
        var buffer = e.Data.GetData(DataFormats.FileDrop, false) as string[];
        textBox1.Text = buffer.First();
    }
3 голосов
/ 24 марта 2011

это не единственный код, который вам нужен. вам понадобится:

FileTextBox.AllowDrop = true;
FileTextBox.DragEnter += new DragEventHandler (FileTextBox_DragEnter);
FileTextBox.DragDrop += new DragEventHandler (FileTextBox_DragDrop);

Конечно, если вы используете IDE, этого можно добиться, назначив обработчики в конструкторе форм.

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