2011-03-23 157 views
2

我有用WCF創建的上傳/下載Web服務。我用c sharp作爲語言。拖放不起作用

我允許在我的文本框中啓用drop,它接受要拖入其中的項目,但它不允許我這樣做,我仍然沒有看到懸停在它上面的符號。

有什麼,我失蹤? 僅供參考我使用完全相同的代碼製作了另一個程序,我能夠拖放項目沒有問題。

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(); 
     } 
    } 
+0

'TextBox'不是合適的控制通過一個循環添加到。獲取第一個文件或使用列表控件。 – Homam 2011-03-24 00:00:55

+1

我認爲你的意思是WPF不是WCF。 – DuckMaestro 2011-03-24 01:27:40

回答

2

這些不是您需要的唯一代碼。你將需要:

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

當然,如果您使用的是IDE,您可以通過在窗體設計器分配處理器實現這一目標。

+0

我會在哪裏放這個? – Ravana 2011-03-24 00:03:11

+0

在'Load'處理函數中,例如:'Form1_Load'。 – 2011-03-24 00:48:23

+0

嗯,它仍然無法工作。任何其他的想法? – Ravana 2011-03-24 03:43:19

2

'正常'DragEnter,DragOver,Drop,...事件不適用於TextBox!改爲使用PreviewDragEnter,PreviewDragOverPreviewDrop

還要確保在PreviewDragOver和/或PreviewDragEnter委託中設置了DragDropEffects

小例如:刪除一個文件夾以文本框

XAML部分:

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

代碼隱藏部分:

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