2013-12-23 65 views
1

我創建一個包含公共字段和按鈕的表單。該按鈕創建另一個窗體並將其顯示爲對話框。我可以訪問主窗體上的公共字段嗎?在主要方法運行的主窗體是這樣的:以另一種形式運行表單的字段

static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new MainForm()); 
     } 
    } 

public partial class MainForm : Form 
    { 
     public int number; 

     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     private void button_Click(object sender, EventArgs e) 
     { 
      (new SecondForm()).ShowDialog(); 
     } 
    } 

public partial class SecondForm : Form 
    { 
     public SecondForm() 
     { 
      InitializeComponent(); 
     } 
     void Method() 
     { 
      //How can I access to number? 
     } 
    } 

我不想使用構造函數,因爲mainform中有很多變量。

回答

2

您可以使用ShowDialog設置創建表單的所有者的方法。

secondForm.ShowDialog(this); 

使用在你的第二個形式:

var temp = ((MainForm)this.Owner).number; 
+0

謝謝。這是最好的方法。在這種情況下,我可以讀取或寫入變量。 – mohammad

0

創建MainForm類的一個對象,你可以用它訪問類中的所有公共變量

MainForm f = new MainForm(); 
int a = f.number; 

這可能不是真正的工作,因爲它會創建MainForm類的新實例,你可能沒有得到期望的結果,所以更好的做法是使number靜態。

public static int number; 

然後你可以使用

int a = MainForm.number; 
+2

這將是一個完全不同的情況比創建一個第二種形式。 –

+0

@MarkHall感謝更新 – 2013-12-23 15:57:58

+0

@Downvoter,我同意這不是最好的答案,但它是否值得downvote? – 2013-12-23 16:14:12

0

當然,只是做:

var form = new SecondForm(); 

form.<property> = <value> 
// ... 

DialogResult result = form.ShowDialog(); 

if (result == DialogResult.OK) 
{ 
    // ... 
0

你說你不想使用SecondForm構造通過所有這些變量從MainForm中。爲什麼不創建一個類來保存這些值並在兩者之間傳遞類實例?

public class FormData 
{ 
    public int number; 
    public int anotherInt; 
    public FormData(int num) 
    { 
     number = num; 
    } 
} 



public class SecondForm : Form 
{ 
    private FormData myData; 
    public SecondForm(FormData data) 
    { 
     myData = data; 
    } 
} 



public void AMethodInMainForm() 
{ 
    FormData d = new FormData(this.number); 
    d.anotherInt = 26; 
    SecondForm frm = new SecondForm(d); 
} 
0

在SecondForm定義公共號碼

public int number; 

然後告訴你SecondForm嘗試在此之前:

SecondForm f2 = new SecondForm(); 
f2.number = this.number; 
f2.ShowDialog(); 

然後你就可以訪問你的SecondForm.This裏面你的作品數量,如果你電話號碼變量可以從你的form2中的方法中多次獲得。但是如果你想要Form1中的訪問號碼,你應該將其定義爲StaticPublic

0

聲明你的號碼作爲公共靜態INT號碼,然後:

public partial class SecondForm : Form 
{ 
    public SecondForm() 
    { 
     InitializeComponent(); 
    } 
    void Method() 
    { 
     MainForm.number = // something 
    } 
}