2010-08-02 99 views
1

我有Form1,有一個文本框和一個按鈕。當用戶單擊Form1中的按鈕時,Form2會打開一個帶有Form1中的文本框值的標籤控件。如何將文本框的值從Form1複製到Form2?

我所做的是設定的Form1文本框中修改器Public,但是當我在Form2調用Form1文本框的名字,我得到那個說

名稱「txtbx1」不存在錯誤在目前情況下

我不知道爲什麼,因爲我已經設置的txtbx1的改性劑Public

快速注:我試圖在Form2的實例化Form1中爲:

Form1 f1 = new Form1(); 

,然後調用

f1.txtbx1.text 

奇怪的是Form1中不能被實例化(不突出時)。另一方面,如果我做Form2 f2 = new Form2(); Form2被突出顯示!

我這是怎麼顯示窗體2從Form1中:

 SetSalary salForm = new SetSalary(); 
     salForm.ShowDialog(); 

注意SetSalary代表窗體2。

任何幫助將不勝感激。

回答

3

使一個構造爲form2接受字符串,並呼籲新form2form1.frm1Textbox.text到構造器,然後將其設置爲form2.frm2Textbox.text

Form2 form = new Form2(frm1Textbox.text); 

in form2構造函數

public class Form2 : Form 
{ 
    public Form2(string text) 
    { 
     frm2Textbox.Text = text; 
    } 
} 
0

Form2實例Form1class Form1必須,如果他們是在同一個組件(項目)被聲明爲public class Form1,或至少internal class Form1

f1.txtbx1.text將不起作用,因爲c#區分大小寫,並且該屬性被稱爲Text而不是text

或者,您可以在Form2與參數聲明構造,讓你不必爲TextBox成員公開爲公共信息:

public class Form2 : Form 
{ 
    public Form2(string text) 
    { 
     txtbx1.Text = text; //txtbx1 does not need to be public 
    } 
} 

然後在Form1你叫var f2 = new Form2("label text goes here");

0

揭露一個公共屬性(或一組屬性,如果您有多個值傳入)Form2然後將填充文本框。這隱藏了它如何顯示的實現細節,並且它也遵循內置表單類使用的標準。例如:

public class SetSalary { 
    public SetSalary() { } 
    public string SalaryText { 
     get { return txtbox1.Text; } 
     set { txtbox1.Text = value; } 
    } 
} 

然後,啓動SetSalary的時候,你這樣做:

SetSalary form = new SetSalary(); 
form.SalaryText = srcTextBox.Text; 
form.ShowDialog(); 
0

好的方法是使用Model-View-Presenter模式。如果你是初學者(我認爲你是),那麼你應該通過書本學習基礎知識。這可以幫助您最大限度地減少錯誤和糟糕的工程設計,並最大化您的技能。

1
public partial class Form1 : Form  
{ 
    Form2 f = new Form2(); 
    private void button1_Click(object sender, EventArgs e) 
    { 
     textBox1.Text = f.ans(); /*-- calling function ans() and textBox1.Text is inside form1--*/ 
    } 
} 

創建窗口2一個公共職能ANS()....

public partial class Form2 : Form 
{ 
    public string ans() 
    { 
     string s = textBox1.Text;/*-- assigning value of texBox1.Text to local variable s and textBox1.Text is another text box which is inside form 2 --*/ 
     return s; // returning s 
    } 
} 
0

在Form1

public class Form1 : Form 
{ 
public Form2() 
{ 
    InitializeComponent(); 
} 
public static string MyTextBoxValue; 
protected void button1_Click(object sender, EventArgs e) 
{ MyTextBoxValue = TextBox1.Text; 
} 
} 

Form2上

public class Form2 : Form 
{ 
public Form2() 
{ 
    InitializeComponent(); 
} 
private void Form2_Load(object sender, EventArgs e) 
{ 
    label1.Text=Form1.MyTextBoxValue; 
} 
} 
+0

如果這可以讓有問題將打開Form1的多個實例。 – MCattle 2014-01-02 21:24:55

+0

你能否詳細說明它將如何產生問題? – 2014-01-20 07:45:01

+0

由於'MyTextBoxValue'是靜態的,Form1的所有實例將共享相同的值。如果只有一個Form1實例,這不會是一個問題,但是如果有多個實例,那麼'MyTextBoxValue'可能會無意中持有Form1實例以外的值。這可以通過用戶必須單擊Form1實例上的按鈕來首先設置值來緩解,但仍然會打開傳輸不正確值的可能性。 – MCattle 2014-01-20 16:12:22

相關問題