Visual Studio 在vb.net了解课程

pgx2nnw8  于 2023-10-23  发布在  .NET
关注(0)|答案(2)|浏览(196)

我只是在通过课程的方式工作,在vb.net上做一个项目,有些事情我想不通。
在我的代码中,我有这个类(你不需要阅读它,它只是将文件从路径A复制到B):

  1. Public Class FileCopyExample
  2. Public Sub New()
  3. Dim progressForm As New ProgressForm()
  4. progressForm.Show()
  5. End Sub
  6. Public Async Function CopyFolderContentsAsync(sourceFolder As String, destinationFolder As String) As Task
  7. If Not Directory.Exists(sourceFolder) Then
  8. Throw New DirectoryNotFoundException($"Source folder '{sourceFolder}' not found.")
  9. End If
  10. If Not Directory.Exists(destinationFolder) Then
  11. Directory.CreateDirectory(destinationFolder)
  12. End If
  13. Dim files = Directory.GetFiles(sourceFolder)
  14. Dim tasks As New List(Of Task)()
  15. For Each file In files
  16. Dim fileName = Path.GetFileName(file)
  17. Dim destinationFilePath = Path.Combine(destinationFolder, fileName)
  18. tasks.Add(CopyFileAsync(file, destinationFilePath))
  19. Next
  20. Dim subFolders = Directory.GetDirectories(sourceFolder)
  21. For Each subFolder In subFolders
  22. Dim folderName = Path.GetFileName(subFolder)
  23. Dim destinationSubFolder = Path.Combine(destinationFolder, folderName)
  24. tasks.Add(CopyFolderContentsAsync(subFolder, destinationSubFolder))
  25. Next
  26. Await Task.WhenAll(tasks)
  27. End Function
  28. Private Async Function CopyFileAsync(sourcePath As String, destinationPath As String) As Task
  29. Using sourceStream As FileStream = File.OpenRead(sourcePath)
  30. Using destinationStream As FileStream = File.Create(destinationPath)
  31. Await sourceStream.CopyToAsync(destinationStream)
  32. End Using
  33. End Using
  34. End Function
  35. End Class

我想做的是打开一个带有一个小ProgressBar对象的表单,以显示文件传输过程的进展。
所以我创建了另一个类,它打开一个表单并在上面添加一个进度条。

  1. Public Class ProgressForm
  2. Inherits Form
  3. Public progressBar As New ProgressBar()
  4. Public startButton As New Button()
  5. Public Sub New()
  6. InitializeComponents()
  7. End Sub
  8. Private Sub InitializeComponents()
  9. Me.Text = "Progress Form"
  10. Me.Size = New Size(300, 150)
  11. progressBar.Minimum = 0
  12. progressBar.Maximum = 100
  13. progressBar.Value = 0
  14. Me.Controls.Add(progressBar)
  15. Me.Controls.Add(startButton)
  16. End Sub
  17. End Class

现在,如果我想ProgressBar工作,我将需要引用对象ProgressBar(内)我的其他类(FileCopyExample),但如果我尝试这样做,我收到错误
错误BC30469对非共享成员的引用需要对象引用。
我试图将ProgressBar声明为public,但它不起作用。谁能告诉我问题出在哪里?

j1dl9f46

j1dl9f461#

您对应该发生什么以及如何发生有了很好的理论理解,但是您偶然发现的细节是Visual Basic不区分大小写的事实,请参见https://learn.microsoft.com/en-us/dotnet/visual-basic/misc/bc40055

那么,我们就用刚才讨论的信息来思考这一行:

  1. Public progressBar As New ProgressBar()

在不区分大小写的情况下,我们很快就发现progressBarProgressBar相同,保存p和P之间的差异,这在Visual Basic中并不重要。您应该尝试将progressBar的名称沿着更改为其他名称以及对它的引用,因为现在您的项目认为您尝试使用Shared(类级别)属性,并且由于它们是对象级别的,因此无法这样做,即使您使用了正确的大小写,在这种不区分大小写的环境中也没有关系。

eivgtgni

eivgtgni2#

您正在尝试调用ProgressForm类的Show()方法,但该类没有Show()方法,如代码中所示:

  1. Dim progressForm As New ProgressForm()
  2. progressForm.Show()

如果您试图调用ProgressBar()的Show()方法,则必须引用ProgressBar()的示例,这是您的公共变量progressBar。
修改你的代码,像这样引用progressBar:

  1. progressForm.progressBar.Show()

相关问题