2012-11-19 62 views
0

我試圖通過單擊另一個活動窗體上的按鈕來更改模式主窗體上的文本框上的文本,需要幫助。C#從另一種形式更改模式窗體上的文本框文本

Main form *Modal mode 

public void changetext(){ 
    textbox1.text = textnew; 
} 

form2 *active form 

private void btnChange_Click(object sender, EventArgs e) 
{ 
    mainform form1 = new mainform; 
    public String textnew = "NEW" 
    form1.changetext(); 
    this.close 
} 

伊夫厭倦了使用此代碼,但它給我的錯誤:調用或BeginInvoke可直到窗口句柄已創建:

public void LabelWrite(string value) 
{ 
    if (InvokeRequired) 
     Invoke(new LabelWriteDelegate(LabelWrite), value); 
    else 
    { 
     textBox1.Text = value; 
    } 
} 
    delegate void LabelWriteDelegate(string value); 
+2

請編寫編譯 –

+0

我覺得其實是一個代碼是他的問題 – Salaros

+0

對不起我只是新來的..我只是試圖簡化很長碼... – user974015

回答

1

我認爲這是一個邏輯問題。如果我理解你的要求,你有一個包含搜索文本框的主窗體。當用戶啓動serach時,會打開一個顯示所有可能結果的模式表單。用戶選擇他想要的值,然後在主窗體中獲得結果。它是否正確?如果是這樣,你應該這樣做:

  • 創建一個包含結果的模態窗體的公共屬性。
  • 可以在模態窗體上創建一個公共屬性或創建一個新的構造函數來傳遞查詢。
  • 在主窗體上,只要未放置,就可以訪問模態窗體的公共屬性。

例如:

var result = null; 
var modal = new ModalForm(query); 
if(modal.ShowDialog() == DialogResult.OK) // This means the user has selected a value 
{ 
    result = modal.SelectedResult; 
} 
modal.Close(); 
modal.Dispose(); 
+0

即將鍵入一個類似的答案,我也將參數傳入構造函數 - 如果需要不同的類型,甚至可以有多個構造函數。 我讀過它被認爲是不好的形式(凌亂),直接從其他窗體修改控件。 – Amicable

0

最簡單的方法是不能在一個控件調用將新文本傳遞給模態窗口。 例如:

主要形式模態模式

public void changetext(String textnew){ 
    textbox1.text = textnew; 
} 

窗口2活性形式

private void btnChange_Click(object sender, EventArgs e) 
     { 
      mainform form1 = new mainform; 
      form1.changetext("NEW"); 
      this.close 
     } 

如果我是你,我也會改變形式的名稱,他們是有點混亂。 P.S.我仍然沒有得到什麼是this.close是需要的。

+0

我嘗試代碼,但它不會工作form1中的文本不會改變。這是真實的情況。在表單1中有一個搜索按鈕,當我點擊它時,form2將打開我可以在其數據庫中過濾搜索的位置。 (form2有自己的數據網格來選擇查詢的數據庫)。然後,我會選擇數據網格中的數據,然後將數據傳輸到變量。然後,變量將傳遞給form1,我將把變量的數據放入form1文本框中,同時我關閉form2。最大的問題是,當關閉form2 form1沒有任何改變..你有沒有想法?... – user974015

+0

最大的問題 用戶界面不會更新..檢查..變量通過正確完成,它的工作...但在form1文本框不會改變.. – user974015

相關問題