2016-11-19 82 views
-3

因此,我正在開發一個應用程序,它能夠將文件拖放到窗體中並將其信息顯示到datagridview中。基本上我已經在VB.Net中開發了一些東西,現在我想升級到C#並使其更好地添加功能。在C中預期的方法名稱#

我停留的時刻,因爲在VB.Net我的代碼

Private MeuFicheiro As FileInfo 

Private Sub frmMenu_DragDrop(sender As Object, e As DragEventArgs) Handles cmdEntrar.DragDrop 
    Dim file As String = e.Data.GetData(DataFormats.FileDrop)(0) 

    MyFile = New FileInfo(ficheiro) 

    If String.IsNullOrWhiteSpace(MyFile.Extension) Then 
     Exit Sub 
    End If 
End Sub 

這個地方,我試圖用Dim file As String = e.Data.GetData(DataFormats.FileDrop)(0) C#,但使得像本課程的一些變化:

string file = e.Data.GetData(DataFormats.FileDrop)(0);形式方法:

private void frmMenu_DragDrop(object sender, DragEventArgs e) 
    { 
     string ficheiro = e.Data.GetData(DataFormats.FileDrop)(0); 

     MeuFicheiro = new FileInfo(ficheiro); 

     if (string.IsNullOrWhiteSpace(MeuFicheiro.Extension)) 
     { 
      return; 
     } 
    } 

但它給我的e.Data.GetData(DataFormats.FileDrop)(0)錯誤調用的方法名

方法名稱預計

所以,做你們有什麼要幫我解決這個問題?

+0

更改VB.NET到C#是不是升級。這只是一種不同的語言。他們都編譯到相同的IL – TheValyreanGroup

+0

把「.tostring()」放在「e.Data.GetData(DataFormats.FileDrop)(0)」的末尾「也許它工作。 – Mohamadreza

回答

3

如果GetData回報IList然後更改從括號e.Data.GetData(DataFormats.FileDrop)(0)e.Data.GetData(DataFormats.FileDrop)[0]

+2

你不能在IEnumerable上使用'[0]',但是如果它是實現'IList'的東西,你可以(大多數集合類都這樣做)。 –

+0

這不會編譯。 [DataObject.GetData返回一個對象](https://msdn.microsoft.com/en-us/library/ms557790(v = vs.110).aspx)。將其轉換爲可索引的集合,然後訪問它的索引。 –

5

變化方括號。在C#中,方括號用於索引數組。

這樣做:

string file = e.Data.GetData(DataFormats.FileDrop)[0]; // see square brackets 
+0

這不會編譯。 [DataObject.GetData返回一個對象](https://msdn.microsoft.com/en-us/library/ms557790(v = vs.110).aspx)。將其轉換爲可索引的集合,然後訪問它的索引。 –

0

其實有你的代碼的兩個錯誤:

首先,DataObject.GetData returns an Object instance。您首先需要將該對象轉換爲您希望存儲在該Drag事件中的類型。
然後,假設returing類型確實是一個字符串集合,您需要使用方括號([])來訪問第一個項目。

var collection = e.Data.GetData(DataFormats.FileDrop) as IList<string>; 
string ficheiro = collection[0]; 

注意,我現澆到IList<string>,因爲這將覆蓋大部分的C#的可轉位泛型集合(數組,列表,HashSet的...)。

在另一方面,如果該對象的GetData返回一個字符串,你應該做的:

string ficheiro = e.Data.GetData(DataFormats.FileDrop).ToString();