[英]How can I use variables from Form1 in Form2?
我有2種形式:Form1和Form2。 我使用以下命令打開了Form2:
Form2 newForm2 = new Form2(this);
現在,我想從Form1中訪問一些在public中設置的變量或方法,例如: public int counter;
但是,當我從Form2嘗試此操作時,它給了我一個錯誤:
Error 4 'System.Windows.Forms.Form' does not contain a definition for 'StartGame' and no extension method 'StartGame' accepting a first argument of type 'System.Windows.Forms.Form' could be found (are you missing a using directive or an assembly reference?)
編輯:在表格1中:
Form2 newForm2 = new Form2(answer, button3, button4, button5, button6, this, fiftyfifty, web, change);
newForm2.Show();
在表格2中:
Form originalParent;
public Form2(int answer, Button button3, Button button4, Button button5, Button button6, Form parentform, int fiftyfifty, int web, int change)
{
InitializeComponent();
originalParent = parentform;
}
並且我試圖像originalParent."public Method here"
這樣訪問它,它給了我這個錯誤。
您的Form2
構造函數被定義為在構造函數中獲取通用Form
作為參數。 您需要獲取Form1
類型的表單,因此將Form2
構造函數更改為:
private Form1 originalParent;
public Form2(
int answer, Button button3, Button button4,
Button button5, Button button6,
Form1 parentform, int fiftyfifty,
int web, int change)
{
InitializeComponent();
originalParent = parentform;
}
從您發布的代碼,我假設你已經寫了一個構造Form2
,這需要的實例Form
。 編輯此構造函數,以使其采用Form1
的實例。 或者只是將Form
實例轉換為Form1
。
將引用強制轉換為Form2中Form1的類型,然后訪問Form1的公共函數。
您需要在Form1的實例而不是System.Windows.Forms.Form上調用StartGame。
如果Form1是Form2的所有者,那么您需要將Owner轉換為Form1類型。 如果Form1是Form2的Ctor的參數,則需要確保將Ctor參數定義為類型Form1,並保留Form2實例對Form1的引用。
我假設您的Form2構造函數的this
參數是Form1
實例,因此該代碼是從Form1調用的。
我還假定您有一個Form2 private Form _form1;
成員private Form _form1;
其值在構造函數中分配。
如果這些假設正確,則可以通過將聲明更改為private Form1 _form1;
來解決此private Form1 _form1;
。
您還需要將構造函數參數的類型從Form
更改為Form1
(更改為MusiGenesis)。
您可以檢查是否在表單2中,獲取定義了變量的表單1的實例。 一旦擁有要從中調用表單2的form1實例的實例ID,只需創建一個新的表單1引用。
IE Form1 frm1; public find(Form1 callingform) { InitializeComponent(); frm1 = callingform; }
Form1 frm1; public find(Form1 callingform) { InitializeComponent(); frm1 = callingform; }
然后只需調用表格2 form2(this);
根據需要這樣做的原因,還可以將所需的變量或方法定義為靜態。 在Form1上:
public static int counter;
在Form2上,您可以訪問它而無需將parentform實例作為參數傳遞給Form2構造函數,如下所示:
Form1.counter++;
1-關於給定的答案,如果您希望Form2
與它們交互,則需要在控件的屬性窗格上選擇這些控件並將其修飾符設置為public。
2-這部分不是您問題的答案,但可以幫助您理解為什么不應該做自己想做的事情。
我用幾乎與您相同的代碼編寫了一個應用程序,但是有人告訴我這不是一種好的做法,甚至不是類似OOP的做法,因此我發布了一個問題 ,嘗試進一步學習。
看一下,有一些代碼可以幫助您以不同的方式甚至以您嘗試的相同方式設置事物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.