Перетащить файл в текстовое поле - программирование
Подтвердить что ты не робот

Перетащить файл в текстовое поле

Я хочу перетащить файл, чтобы текстовое поле отображало полный путь к файлу. Я использовал события перетаскивания и перетаскивания, но обнаружил, что они не входят в события.

private void sslCertField_DragDrop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
    {
        e.Effect = DragDropEffects.All;
    } 
}

private void sslCertField_DragEnter(object sender, DragEventArgs e)
{
    string file = (string)e.Data.GetData(DataFormats.FileDrop);
    serverURLField.Text = file;
}

Может ли кто-нибудь указать, что я делаю неправильно?

UPDATE: не работает, если программа установлена ​​для запуска с повышенными разрешениями (vista/win 7)

4b9b3361

Ответ 1

Проверьте свойство AllowDrop вашего текстового поля - оно должно быть установлено на true. Кроме того, конвертируйте данные перетаскивания в string[] в случае DataFormats.FileDrop, а не только string:

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if(files != null && files.Length != 0)
{
    serverURLField.Text = files[0];
}

И я думаю, вы должны поменять код в обработчиках событий перетаскивания - обычно вы показываете пользователю, что перетаскивание возможно в DragEnter и выполнять фактическую операцию на DragDrop.

Ответ 2

Повышенные привилегии не должны иметь к этому никакого отношения. Вам также необходимо реализовать событие DragOver в дополнение к DragDrop, на которое ответил Макс. Это код, который следует добавить для DragDrop:

private void textBoxFile_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }

Ответ 3

Не запускайте его из visual studio... запустите .exe, который создается после создания вашего решения. Надеюсь, что это поможет:)

Ответ 4

Если вы используете WPF, и он по-прежнему не работает с ответами здесь (это был мой случай), вам нужно использовать

e.Handled = true;

в событии PreviewDragEnter, как описано здесь и здесь (это одна и та же статья, но на всякий случай идет вниз).

Вот фрагмент кода из этого источника:

private void TextBox_PreviewDragEnter(object sender, DragEventArgs e)
{
    e.Effects = DragDropEffects.Copy;
    e.Handled = true;
}

private void TextBox_PreviewDrop(object sender, DragEventArgs e)
{
    object text = e.Data.GetData(DataFormats.FileDrop);
    TextBox tb = sender as TextBox;
    if (tb != null)
    {
        tb.Text = string.Format("{0}", ((string[])text)[0]);
    }
}

Ответ 5

Если ваша визуальная студия работает под правами администратора, функция перетаскивания кажется неработоспособной.

= > Запустите визуальную студию без прав администратора, и она будет работать