2)窗體A和窗體B之間的調用 ,比較簡單
例如:Form1和Form2分別為兩個winform窗體,若想在窗體1中調用窗體2的控件,直接這樣就行,如下:
Form2.Button;(當然這個button一定是窗體2中所擁有的,設置為public就行)
2)一個類中調用窗體中的控件,這種比較復雜
比如現需要從 類A中調用窗體B中的控件(類A假定為Class A; 窗體B假定為Class Form)
我有嘗試直接在要調用的類中直接這么做:
Class form=new Form();
然后通過窗體類的實例去調用,這種做法表面上看是沒有問題的,但實際會有不同的隱含問題:如會出現"C# 在創建窗口句柄之前,不能在控件上調用 Invoke 或 BeginInvoke";
可能還會出現該類中調用窗體內的控件並不能在該窗體中得到有效顯示,這個問題暫時不知道叫啥專業名,但是我理解就是新new出的實例類並不完全和Form一致,是兩個不同的繼承Form窗體的實例,以至於不能同步,具體細節沒深究了
因此通過查找資料,這樣做可以避免:
即第一步先在被調用的窗體類中定義靜態變量,構造方法中引用這個Form
public static Form form;
同時在該窗體類的構造方法中加這一行
即Form類下定義靜態變量,構造方法中引用這個form
public Form(){
form=this; //相當於該窗體類的實例賦給了該靜態變量form
}
在Class A中調用該窗體的控件或方法,只需如下就可以保證你調用的實例是該窗體類的實例
Form.form.Button;
Form.form.Method();