2014-11-24 85 views
0

我有一個C#windows應用程序有兩個窗體Form1,它是主窗體和Form2。 Form1上有一個組合框,Form2有一個文本框。獲取組合框選定值Form1到另一個Form2

我想將Form1.ComboBox1中選定的值放入Form2.TextBox1中。

我想這一點:

 Form1 Form1Object = new Form1(); 
     string fff = Form1Object.ComboBox1.SelectedItem.ToString(); //not working 
     TextBox1.Text = fff; 

問題是,當我運行此Form 1被重新初始化,我不希望出現這種情況。 (我有一個閃屏是侏儒在應用程序啓動時,所以,當我跑我的代碼的啓動畫面又重新開始。

有沒有一種方法,無需重新啓動的第一個表單閱讀ComboBox1價值? 如果我直接嘗試它不工作,它認爲在Form1作爲CALSS,而不是對象

Form1.ComboBox1.SelectedItem.ToString(); //does not work 

我也試圖打開第二形態時的價值添加到文本框:

 Form2 form2 = new Form2(); 
     form2.TextBox1.Text = ComboBox1.SelectedValue.ToString(); 
     form2.Show(); 

這給了我以下錯誤:「對象引用不設置到對象的瞬間「

編輯: 它可以使用此代碼:

 Form2 form2 = new Form2(); 
     form2.TextBox1.Text = ComboBox1.Text; 
     form2.Show(); 

現在我的問題仍然存在:如果我在窗體2我還可以得到form1的價值?如果沒有,那沒關係。我會將其作爲解決方案發布。

+0

只要your're「在」你的Form1-class中,你可以對當前實例使用this引用。因此你可以重用同一個實例。 – HimBromBeere 2014-11-24 15:36:48

+0

您可以使用事件。 [這裏是一個例子](http://stackoverflow.com/a/6382869/754438)。但在你的情況使用組合框選擇項目改變事件,而不是textBox1_TextChanged在例子中。 – Reniuz 2014-11-24 15:39:53

+0

「對象引用未設置爲對象的瞬間。」意味着ComboBox中的SelectedValue爲null。在引發此異常時,調試並檢查組合框的SelectedValue,SelectedItem和SelectedIndex屬性中的內容。 – Arie 2014-11-24 15:45:16

回答

0

這種類型的問題已被詢問和回答很多次,並在不同的版本。

我建議在看一些我已經張貼在過去下列...

This example顯示了第二種形式作爲參數的第一種形式的情況下通過兩種形式。然後,從第一個公開的方法中,第二個可以調用它們來獲取值。如果你想允許設置替代來源,或者只是允許獲取方法,你可以自行決定......可以作爲公衆獲得的財產完成;保護組;

This stackoverflow search將顯示幾個鏈接,我已經在過去完成的帖子與不同形式之間略有變化的版本。

反饋COMMENT

必須有東西在你的第一個形式來調用第二完成..是它從一個點擊按鈕,或根據實際組合框的選擇被改變。不管它是什麼,我提供的第一個例子應該是你所需要的。你沒有第二種形式打電話給第一個。

沒有第一例的完整拷貝\粘貼,所有你需要真的在形式2的構造函數設置文本從第一拉...

public Form2(Form1 viaParameters) : this() 
{ 
    this.textBox1.Text = viaParameters.Combobox1.SelectedItem; 
} 

不過,我不知道你的項目是如何定義的.. dictionary,list,array,whatever ..所以你可能需要通過強制轉換

if(viaParameters.Combobox1.SelectedIndex > -1) 
    this.textBox1.Text = viaParameters.Combobox1.Items[ viaParameters.Combobox1.SelectedIndex ].WhateverStringValue; 

獲得所選擇的項目這種方式,形式2的形式,從1開始可以直接搶值。

如果從通過屬性或方法的第一種形式公開方法,你的文字值可以是這麼簡單

this.textBox1.Text = viaParameters.YourForm1sMethodToGetStringFromCombobox(); 
+0

您好,我搜索了論壇並找到了示例,但在所有示例中,第二個窗體初始化爲frm2,而它們來自窗體1,用戶訪問了frm2.object。我需要的是相反的方式。我無法將Form1初始化爲frm1,然後使用frm1作爲Form1以後的對象,或者在應用程序運行時第一次打開它。 – Danut 2014-11-24 16:53:48

+0

@Danut,審查修改我的答案澄清...此外,嘗試做整個第一個例子,看看事情如何工作,然後根據您的情況通過組合框的樣本進行更改。 – DRapp 2014-11-24 17:37:50

1

雖然這不是最恰當的答案,這是解決方法之一問題。

Form1中

添加一個方法來獲得價值

public string TransmitSelectedValue() 
    { 
    return ComboBox1.SelectedItem.ToString(); 
    } 

窗體2

var myvalue = ((Form1)ParentForm.Controls.Find(Form1Name,true)).TransmitSelectedValue(); 
+0

這不起作用。 Form1Name是我的應用程序中的Form1,當我在代碼中將Form1Name替換爲Form1時,我得到錯誤。 – Danut 2014-11-25 10:28:54

+0

您創建Form1的實例的名稱是「Form1」? – DidIReallyWriteThat 2014-11-25 13:23:38

+0

是的。我保持原樣。它是應用程序的默認形式。應用程序啓動時啓動的那個。 – Danut 2014-11-25 13:42:03

0

我不知道問題出在哪裏

同時啓動/打開窗口2

 Form2 f2 = new Form2(); 
     f2.Show(this); 

你必須到Form1爲「主人」的引用在窗口2

你可以把這個你想要的任何事件或按鈕或任何

 Form1 f1 = Owner as Form1; 
     textBox1.Text = f1.comboBox1.SelectedItem.ToString(); 

轉化爲C#...

相關問題