2012-09-19 157 views
1

我需要採取前5個字符,以便他們匹配備份與我保存早的相同名稱的圖片框。左修剪Path.GetFileNameWithoutExtension

這個文件名作爲例子可能是12345_Text_Text_Text.pdf

Dim key As String = Path.GetFileNameWithoutExtension(e.Name) 
Dim p As PictureBox = CType(Me.Controls(key), PictureBox) 
p.Image = My.Resources.Ok 

我認爲這樣做會一直工作;

Dim subkey As String 
Dim key As String = Path.GetFileNameWithoutExtension(e.Name) 
subkey = Left(key, 5) 

這個問題似乎在Left命令,Public Property Left As Integer' has no parameters and its return type cannot be indexed.

全部子程序在這裏;

Private Sub Watcher_Changed(ByVal sender As Object, ByVal e As FileSystemEventArgs) Handles Watcher.Changed 

    Dim key As String = Path.GetFileNameWithoutExtension(e.Name) 

    Dim subkey As String 
    subkey = Left(key, 5) 

    Dim p As PictureBox = CType(Me.Controls(key), PictureBox) 
    p.Image = My.Resources.Ok 

    End Sub 

關於我在做什麼錯誤的建議?

+0

「所以我有麻煩」什麼似乎是麻煩? – aquinas

+0

什麼問題? – estebane97

回答

4

您的通話更改爲以下幾點:

subkey = Strings.Left(key,5); 

左邊是連接到字符串對象的實例的靜態方法,所以你的問題只是符號(獨立左參考)之一。

希望這有助於解決問題。

EDIT澄清/示範:

正如下面@SSS指出的,在項目的WinForms形式具有屬性定義屏幕上的形式的水平位置。當「左」方法被沒有限定地調用時,例如在它之前沒有對象或名稱空間引用時,VB會進入其解析過程以確定如何解釋它。該形式的原生「左」屬性是「勝利者」,但提供的論據導致了您收到的錯誤。

要解決像這樣的名稱衝突,解決方案是向所討論的方法或屬性提供所謂的完全限定參考。提供「Microsoft.VisualBasic.Left」是解決此問題的完美方法,正如提供對Strings類的引用(如此處所述)。

我希望這有助於消除任何困惑。

由於可能存在於這個建議的修復了一些小的不確定性或混亂,這裏是一個測試項目中使用它的一些截圖:在VB.NET使用Strings.Left

Visual Studio 2010 VB.NET test project code using Strings.Left
示例代碼.. 。

Test project output
從示例代碼結果

1

下面是什麼最終爲我工作:

subkey = Microsoft.VisualBasic.Left(key, 6)

+1

Windows窗體具有優先於VisualBasic.Left函數的.Left屬性。 – SSS

+0

所以你說我發佈的內容不正確?上面發佈的內容雖然不起作用。 – Muhnamana

+0

請參閱上面的修訂答案,以獲得更多解釋,擴展@SSS提出的觀點。 –