2013-03-02 64 views
2

讓我通過說我對C#非常新,並將一個程序從VB.net轉換爲C#來做序。如何捕獲文本框的值並將其用作變量?

我在Visual Studio 2012工作和運行SQL Server 2008R2

OK,所以我有一個窗體Form1。在這個表單上是用戶可以填寫的文本框TextBox1。現在我想使用文本框中的信息作爲變量來從數據庫中提取信息並在不同的表單上填充文本框(textbox2)(form2)這是我當前在表單2上使用的代碼

private void form2_Load(object sender, EventArgs e) 
    { 

     string Name = Form1.TextBox1.Text; 
     this.TBMainTableAdapter.FillBy(Name); 

    } 
private void form2_Load(object sender, EventArgs e) 
    { 

     string Name = Form1.TextBox1.Text; 
     this.TBMainTableAdapter.FillBy(Name); 

    } 

我也嘗試加載它是這樣的:

this.TBMainTableAdapter.FillBy(Form1.TextBox1.Text); 

這些都讓我「對象引用需要非靜態字段...錯誤

在VB.Net這是很容易,我把它編碼爲這樣,並且它完美地工作。

Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
Me.TBMainTableAdapter.FillBy(Me.ProjectDataset.TBName, TextBoxName.Text) 
End Sub 

在代碼背後是否存在缺少的東西?我試圖從

public System.Windows.Forms.TextBox TextBox1; 

文本框

改變代碼

public static System.Windows.Forms.TextBox TextBox1; 

雖然這清除了上拉變量的錯誤,它的代碼 - 扔了一堆更多的錯誤在表單1後面,「無法訪問一個實例,給它一個名稱」錯誤

是否值得更改代碼背後的所有錯誤。更重要的是這樣做的正確方法?


OK,所以我說這2下

public partial class Form1 : Form 
Form1 form1; 
public Form2(Form1 frm) 

    {  
     form1 = frm; 
    } 

    Form2 frm = new Form1(this); 

即時得到「方法必須有一個返回類型錯誤」,在「公共窗體2(Form1的FRM)」行 和 「錯誤命名空間.Form1沒有一個構造函數需要1個參數「在Form2 frm = new Form1(this);行

此外,如果我把getter屬性放在Form1中,我得到一個有關聲明2個具有相同名稱的對象的錯誤。廣東話地方找到一個聲明TextBox1中除了在其背後的代碼的末尾爲

public System.Windows.Forms.TextBox TxtBox1 

聲明後面的代碼,如果我把下面的消氣,我得到一個唯一的任務,調用等可用作語句錯誤

+0

你不想讓你的'TextBox'靜態。如果你不知道自己在做什麼,那麼不要改變你的代碼。它是自動生成的,並且您的更改可能會在長期運行中丟失 – bas 2013-03-02 22:30:37

+0

您的代碼不顯示Form1的聲明,但我認爲Form1是表單的類名(例如「public partial class Form1:Form」)。如果是這樣,那麼Form1.TextBox1將不起作用。您不能使用類名嘗試訪問類實例的成員。 – mbeckish 2013-03-02 22:32:06

+0

MuhammadHani,這不會工作,因爲TextBox1是在一個不同的形式比我打電話給它。 – 2013-03-02 22:34:16

回答

2

爲了使用Form1中控件的內容,需要在Form2對象中引用Form1。而且,你的textBox1應該被聲明爲public,或者你應該爲它創建getter屬性。你可以使用很多東西,但是如果在Form2中需要Form1,那麼你可以做的最簡單的事情就是將Form1的引用傳遞給Form2的構造函數。

Form1 form1; 
public Form2(Form1 frm) 
{ 
    form1 = frm; 
} 

添加吸收劑屬性在Form1的textBox1的:

public TextBox TextBox1 
{ 
    get 
    { 
     this.textBox1; 
    } 
} 

您可以從Form1的方法,這樣調用此構造:

From2 frm = new Form2(this); 

,然後你可以調用:

private void form2_Load(object sender, EventArgs e) 
{ 

    string Name = form1.TextBox1.Text; 
    this.TBMainTableAdapter.FillBy(Name); 

} 
+0

如果我這樣做,TextBox1是否仍然在現有form1中輸入信息? – 2013-03-02 22:37:01

+0

現在檢查代碼,注意form1.TextBox1.Text行,這是爲了通過屬性TextBox1訪問textBox1。 – 2013-03-02 22:40:08

+0

好的,讓我們把它扔進去,看看會發生什麼。 – 2013-03-02 22:41:09

0

也許我失去了一些東西,但FillBy有兩個參數,第一個方法是DataTable填補,第二個Name,所以將其更改爲:

this.TBMainTableAdapter.FillBy(Me.ProjectDataset.TBName, Name); 

帶有一個參數的方法是TBMainTableAdapter.Fill(DataTable table)

編輯:忽略了你在Form2上,但TextBox在Form1上,正如Nikola指出的那樣,這當然是一個重要的事實。我保留這個答案,因爲無論如何它可能有幫助。

相關問題