【问题标题】:How to call a Public Shared Sub with parameters如何使用参数调用公共共享子
【发布时间】:2019-06-04 14:49:35
【问题描述】:

我有一个 form_click 事件和一个单一类下的 Public Shared Sub。 现在我需要从其他事件中调用这个 Shared Sub。但我在将参数传递给调用 Sub 时遇到问题。

你能不能帮帮我,也解释一下这里发生了什么!

Public Class SC
' More codes here.......

    Public Sub SC_Click(sender As Object, e As EventArgs) Handles Me.Click
        Try

            Dim document As New Document()
            Dim section As Section = document.AddSection()

            'SaveDoc(document)  I WANT TO CALL THIS INSIDE Private Sub SaveToolStripMenuItem_Click

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Public Shared Sub SaveDoc(document As Document)
        Dim fname = InputBox("Enter file name:", "file name")
        document.SaveToFile(fname & ".docx", FileFormat.Docx)
        MsgBox("""" & fname & ".DOCX"" is saved!")
    End Sub

    Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click
        'I Want To Call SaveDoc() Here with Params
    End Sub

我尝试将 Sub 更改为共享函数,但问题存在。 请帮我传递参数!

到目前为止,您已经明白这是一个为我自己截屏的工具。 目前,每次点击都会保存 word 文件!

当我从 Form_Click 事件中调用共享的 Sub saveDoc() 时,它工作得非常好。但是我需要将代码分成单独的事件,因为我只想保存文件一次,而不是每次点击。

源代码:

Click HERE to view the source code

IDE 建议:

Click HERE to view the IDE Suggestion

【问题讨论】:

  • 您像调用任何其他子一样调用共享子。但是你有没有在任何地方初始化的变量 fname 。似乎应该是一个参数。
  • fname 可能是主类中的实例成员(字段)。您不能在静态(共享)方法中使用实例成员。删除 shared 修饰符或添加 fileName as String 参数并将该成员作为参数传递。
  • 编译错误信息应该足以告诉你如何解决你的问题。
  • @the_lotus:很抱歉截断了代码。我在剪切代码时删除了这些行。请您再检查一次好吗? Document() 类的 document 对象在 SaveDoc()。因此我需要传递一些我无法得出结论的东西:(
  • @Jimi:很抱歉截断了代码。我在剪切代码时删除了这些行。你能再检查一次吗?

标签: .net vb.net events


【解决方案1】:

我想你可以在班级级别声明document。现在您的所有类的实例成员都可以访问它,包括事件处理程序。

Public Class SC

    Private document As New Document()

    Public Sub SC_Click(sender As Object, e As EventArgs) Handles Me.Click
        Try
            document = New Document() ' it's unclear whether you need this line here or not
            Dim section As Section = document.AddSection()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub

    Public Shared Sub SaveDoc(document As Document)
        Dim fname = InputBox("Enter file name:", "file name")
        document.SaveToFile(fname & ".docx", FileFormat.Docx)
        MsgBox("""" & fname & ".DOCX"" is saved!")
    End Sub

    Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click
        SaveDoc(document)
    End Sub

End Class

【讨论】:

  • @djv:非常感谢您的建议。这对我有用。这也意味着我需要清除更多基础知识:p
  • @djv 没关系,我对重用名称感到困惑,我认为SaveDoc 上下文中的document 是类字段,我错过了它是参数而是。
  • 如果其中一个变量名被改变了,肯定会更容易阅读。当我们在这里时,我们不要将变量命名为类的小写版本! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多