2013-12-14 36 views
0

我有一個新手問題!保持價值的C#全局/公共變量

我所擁有的是3窗口窗體,例如命名爲frmMain,frmSub1,frmSub2。 我想要一個int 變量它從frmSub或frmSub2中的進程獲取值,然後在frmMain中用於另一個進程。

在發佈之前,我研究了其他QA。但他們沒有一個滿足我的好奇心。我只是看到了一堆代碼,但我想用代碼作爲它們爲什麼/如何工作的一個有意義的explonation。

非常感謝您的建議。

編輯:

我沒有任何代碼,這個調查的。目前還沒有應用程序。我正處於規劃階段。對不起,「沒有給出的代碼」。在我需要這個變量的階段之後,我可以編寫代碼。

+1

請添加代碼的相關章節。 – mostruash

回答

0

你可以做這樣的事情:

public class frmMain 
{ 
    public static int Vartoshare=100; 


    private void setvalues() 
    { 
     vartoshare=200; 
    } 
} 

然後在frmsub2形成你可以叫

int readvar = frmmain.vartoshare; 
+0

糟糕!你忘了它必須是'public static int Vartoshare',否則其他表單將不會找到它,因爲它們沒有對即時表單的引用。 – NothingsImpossible

+0

林不知道,如果你是說它的真實,但我加了它,以防萬一我通常使用VB和學習C#在VB它會工作 –

+0

我會盡快嘗試這麼做什麼是readvar的價值? –

0

解決方案1:您可以int變量傳遞給新形式Constructor和分配該值在NewForm構造函數中。

試試這個:

Program.cs的

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1(0)); 
    } 

Form 1代碼:

int no = 10; 
    public Form1(int no) 
    { 
     this.no=no; 
     InitializeComponent(); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    {    
     Form2 form2 = new Form2(no); 
     this.Hide(); 
     form2.ShowDialog();    
    } 

表2:代碼

int no; 
    public Form2(int no) 
    { 
     this.no = no; 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     no = 20;   
     Form1 form1 = new Form1(no); 
     this.Hide(); 
     form1.Show(); 
    } 

解決方案2:你可以採取publicstatic varible在Form1和訪問使用他們的類名享有一定形式的變量。

試試這個:

Form 1代碼:

public static int no = 10; 
    public Form1() 
    {    
     InitializeComponent(); 
    } 
    private void button1_Click(object sender, EventArgs e) 
    {    
     Form2 form2 = new Form2(); 
     this.Hide(); 
     form2.ShowDialog();    
    } 

表2:代碼

public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form1.no = 20; //access Form1 int variable  
     Form1 form1 = new Form1(no); 
     this.Hide(); 
     form1.Show(); 
    } 
+0

我會試試這個建議,謝謝。我會寫回來的時候,我能試試:) –

+0

我今天學到了什麼是「公共聲明本身沒有足夠的,我猜。靜是它似乎工作。我做的一切錯誤的,我以前的項目的關鍵。 謝謝。 –