1

我需要取前 5 个字符,以便它们与我早期保存的同名图片框匹配。

例如,此文件名可以是 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

关于我做错了什么的建议?

4

2 回答 2

4

将您的呼叫更改为以下内容:

subkey = Strings.Left(key,5);

Left 是附加到 Strings 对象实例的静态方法,因此您的问题只是符号之一(独立的 Left 引用)。

希望这有助于解决问题。

编辑澄清/演示:

正如下面@SSS 所指出的,WinForms 项目中的 Forms 有一个Left属性,用于定义窗体在屏幕上的水平位置。当“Left”方法被无条件调用时,例如在它之前没有对象或命名空间引用,VB 进入它的解析过程以确定如何解释它。表单的本机“左”属性是“赢家”,但提供的参数导致您收到错误。

要解决这样的名称冲突,解决方案是提供对相关方法或属性的完全限定引用。提供“Microsoft.VisualBasic.Left”是解决此问题的一种完全有效的方法,正如此处所述,提供对 Strings 类的引用也是如此。

我希望这有助于消除任何困惑。

由于这个建议的修复可能存在一些小的不确定性或混淆,以下是它在测试项目中使用的一些屏幕截图:

使用 Strings.Left 的 Visual Studio 2010 VB.NET 测试项目代码
在 VB.NET 中使用 Strings.Left 的示例代码...

测试项目输出
示例代码的结果

于 2012-09-19T02:18:31.750 回答
1

以下是最终为我工作的内容:

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

于 2012-09-19T02:31:56.457 回答