如何在vb.net的单独类文件中为表单加载创建共享函数
我希望在一个单独的类文件中有一个共享函数来处理表单位置。 但是我不知道我怎样才能让它工作。 如果我在我的表格中使用下面的代码,它将起作用。但我不能将其移动到类文件中如何在vb.net的单独类文件中为表单加载创建共享函数,vb.net,class,function,Vb.net,Class,Function,我希望在一个单独的类文件中有一个共享函数来处理表单位置。 但是我不知道我怎样才能让它工作。 如果我在我的表格中使用下面的代码,它将起作用。但我不能将其移动到类文件中 Shared Sub Formlocation() Me.StartPosition = FormStartPosition.Manual Me.Location = Screen.GetWorkingArea(Me).Location End Sub 不能从类实例外部访问表
Shared Sub Formlocation()
Me.StartPosition = FormStartPosition.Manual
Me.Location = Screen.GetWorkingArea(Me).Location
End Sub
不能从类实例外部访问表单实例“Me” 将函数更改为参数化子函数,并在调用子函数时传递表单实例
Shared Sub Formlocation(ByVal frm As Form)
frm.StartPosition = FormStartPosition.Manual
frm.Location = Screen.GetWorkingArea(frm).Location
End Sub
另一种方法可以是扩展方法(.NET 3.5及更高版本)听起来您可能想拥有一些表单所共有的功能
如果是这种情况,您可能需要考虑创建继承自<代码>窗体< /代码>的基类,使每个可应用的窗体继承此,然后从窗体调用该方法。< /P> 例如,以下是基本表单的示例:
Public Class MyBaseForm
Inherits Form
' Contains standard sizing logic, but can be overridden by inheritors
Protected Overridable Sub InitializeFormLocation()
Me.StartPosition = FormStartPosition.Manual
Me.Location = Screen.GetWorkingArea(Me).Location
End Sub
' An optional method for initializing the form location that will be automatically implemented for all child forms
Private Sub MyBaseForm_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Call InitializeFormLocation()
End Sub
End Class
下面是一个子窗体的示例
Public Class MyForm1
Inherits MyBaseForm
' An optional way for the child forms to call the method
Private Sub DoInitialization()
Call MyBase.InitializeFormLocation()
End Sub
End Class
仅供参考,
frm
不应通过byref
传递,除非您计划在方法中创建它的新实例。由于它是一个对象,它无论如何都会传递一个引用,还是不传递?是的,对象是通过引用传递的,但您所做的是将引用传递给原始变量,这通常不是一个好的做法。问题是,如果被调用的方法修改变量本身的值(即frm=newform
),这将通过byref传播回调用方。如果参数不是byref,则赋值将严格地局限于方法。