如果你只是想單獨程序(函數/方法/變量的聲明......),因爲你必須填寫您的類文件的代碼加載,只需使用:
1)Partial
關鍵字
Public Partial Class MainClass
' MAIN CONTENT
Public Sub New()
Me.InitializeComponents()
' ...
End Sub
' ...
End Class
,並在另一個文件:
Public Partial Class MainClass
' USER INTERFACE HANDLERS...
'Modify components and the form through here
'example: btn_exit.ForeColor = Color.Black
'example: Me.Close()
' ...
End Class
所以這是同一類,其他類可能無法訪問/修改其成員。
2)或要麼使用#Region
分裂代碼和組它們:
Public Class MainClass
#Region "Instanciation..."
Public Sub New()
Me.InitializeComponents()
' ...
End Sub
#End Region
#Region "User Interface..."
'Modify components and the form through here
'example: btn_exit.ForeColor = Color.Black
'example: Me.Close()
Public Sub btn1_Click(...)
Public Sub Picture1_MouseMove(...)
#End Region
#Region "Public Properties..."
'...
#End Region
End Class
然後使用正/負展開/摺疊的代碼的部分。
如果你真的想從另一個類,比如說,RemoteClass
編輯MainClass
的成員,也有噸方式這麼做了,要看是什麼究竟你想要做的。
你可以做一切你MainClass Public
:
找到您的窗體設計文件(包含窗體的所有控件的聲明的一個),每個申報轉變爲公共。
Private pictureBox1 As Picturebox
' becomes
Public pictureBox1 As Picturebox
(或者只需點擊在IDE控制,並改變其進入等級爲public)
然後,如果你能在RemoteClass
一個實例傳遞一個變量指向的MainClass
一個實例,然後,通過RemoteClass
,您可以訪問TheMainClassInstance.pictureBox1
,並更改其大小,位置等所有內容。
那麼如何在RemoteClass中創建一個MainClass的實例?這取決於你的應用程序的結構...沒有細節,猜猜..我們必須猜測..!
Public Class RemoteClass
Private _InstanceOfMainClass As MainClass = Nothing
Public Sub New(ByRef NewInstanceOfMainClass As MainClass)
_InstanceOfMainClass = NewInstanceOfMainClass
' ^^ this is one way doing it.
' ...
End Sub
' ...
Private Sub ChangeBackgroundColor()
_InstanceOfMainClass.picturebox1.BackColor = Color.Black ' and voila !
End Sub
End Class
然後,您的RemoteClass中有一個MainClass。不要忘記處理_InstanceOfMainClass以避免內存泄漏(我假設你知道如何..)
MainClass有多少個實例?
如果它只是一個,並且您有幾個RemoteClass類,那麼您可以考慮將您希望作爲靜態(共享)成員訪問的MainClass的成員。
Public Class MainClass
Private Shared _MyInstance As MainClass = Nothing
Private Shared Sub InitializeMyInstance()
If _MyInstance Is Nothing Then
_MyInstance = New MainClass(...)
Else
If _MyInstance.IsDisposed Then
' Requires an IDisposable interface
' and handling of Me.Closed event elsewhere...
_MyInstance = Nothing
_MyInstance = New MainClass(...)
End If
End If
End Sub
Public Shared ReadOnly Property MyInstance() As MainClass
Get
InitializeMyInstance()
Return _MyInstance
End Get
End Property
Public Shared ReadOnly Property PictureBox1() As PictureBox
Get
Return MyInstance.pictureBox1
End Get
End Property
' Create as many Properties as required...
End Class
然後在任何RemoteClass例如,您只要致電:
MainClass.PictureBox1.Width = 400
MainClass.Close()
MainClass.PictureBox1.Height = 200
但正如我所說,這隻有當你只有MainClass的單個實例。
如果您有幾個MainClass實例和多個RemoteClass實例,請考慮使用唯一ID和靜態函數/屬性來訪問特定實例。
如何創建ID?
Public Class MainClass
Private Shared _NextID As Integer = 0
Private _ID As Integer
Public ReadOnly Property ID() As Integer
Get
Return _ID
End Get
End Property
Public Sub New(...)
Me.InitializeComponents()
' ...
_ID = _NextID
_NextID = _NextID + 1
End Sub
' ...
End Class
則...創建一個包含所有的ID排序列表:
Public Class MainClass
Private Shared _IDsList As New SortedList(Of Integer, MainClass)
' then edit your New() method :
Public Sub New(...)
Me.InitializeComponents()
' ...
_ID = _NextID
_NextID = _NextID + 1
_IDList.Add(_ID, Me)
End Sub
' ...
End Class
然後創建一個靜態函數由它的ID來獲得MainClass的具體實例。
Public Class MainClass
' ...
Public Shared Function GetInstanceByID(ByVal iID As Integer) As MainClass
If _IDList.ContainsKey(iID) Then
Return _IDList.Item(iID)
Else
Return Nothing
End If
End Function
' ...
' And create the appropriate Dispose() method
' the appropriate Clear() method
' the appropriate FormClosing events handlers
' etc. etc. etc.
End Sub
的事情是,我們不知道什麼是你的MainClass的目的呢,爲什麼RemoteClass實例具有順便說一下?控制,變量,添加/刪除控件修改MainClass成員(這成員? )
問題你必須問自己,這樣做的理由是什麼?您是否試圖從主窗體代碼中分離出格式和表示邏輯?假設控件屬性是公開的(我認爲它們在WinForms中是默認的),你可以這樣做,你只需要將表單的一個實例傳遞給你的'user_interface'類。儘管如此,你仍然可以將格式化代碼作爲主窗體的一部分 - 這取決於你想要實現什麼 – Charleh 2014-10-06 13:00:40
你可能聽說過MVVM,這就是WPF/Silverlight等現代技術如何將演示和格式化代碼分離出來業務邏輯,但在WinForms中做起來可能不那麼容易,因爲WPF綁定機制是將演示文稿鏈接到MVVM邏輯層的完美「粘合劑」 – Charleh 2014-10-06 13:03:57
如何傳遞實例? – 707 2014-10-06 13:31:19