2010-02-09 42 views
1

這可能是一個新手問題。 :)。考慮以下情況。在C#中的兩個Windows Froms之間發送信息#

  • 假設我們有已經「裝」(即你
    可以看到兩種形式)
  • 表1中包含一個文本框和「提交」按鈕,而形成了兩個Windows窗體2 包含文本標籤。
  • 用戶可以在文本框中輸入字符串,然後按 表單上的提交表單2上的標籤應該用新文本更新 。

實現這一目標的最佳方法是什麼?任何正式的方式來做到這一點?我不想不必要地增加變量範圍。

編輯:這兩種形式都屬於同一個應用程序

+4

這兩種形式在同一個應用程序中? – 2010-02-09 07:51:07

+1

您可以使用事件來減少耦合。 – 2010-02-09 09:33:22

回答

3

假設這些形式是相同的應用程序的一部分,你需要有地方你把你的數據,然後你的形式「綁定」到這個數據的通用數據模型模型。檢出M-V-CM-V-VM模式。這也很好地將你的用戶界面與你的數據分開。

1

對winforms中的模型視圖控制器模式和數據綁定進行一些研究。

創建一個單獨的控制器類並以兩種形式引用它,這兩種形式實現了INotifyPropertyChanged。在控制器上,有一個屬性可以將更改的事件從表單傳播到表單。

-1

Form1觸發Form2打開。 Form2重載了構造函數,它將調用窗體作爲參數並提供對Form2成員的引用。這解決了通信問題。例如,我已經在Form1中公開了Form1中的Label Property,並在Form2中對其進行了修改。

通過這種方法,您可以以不同的方式進行溝通。

Download Link for Sample Project

// 你Form1中

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(this); 
     frm.Show(); 
    } 

    public string LabelText 
    { 
     get { return Lbl.Text; } 
     set { Lbl.Text = value; } 
    } 
} 

// 你的窗體2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private Form1 mainForm = null; 
    public Form2(Form callingForm) 
    { 
     mainForm = callingForm as Form1; 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.mainForm.LabelText = txtMessage.Text; 
    } 
} 

alt text http://ruchitsurati.net/files/frm1.png

alt text http://ruchitsurati.net/files/frm2.png

+3

-1這絕對不是這樣做的方式。你想要將表格彼此分開。爲什麼form1必須知道form2的存在? – 2010-02-09 07:56:16

+0

當然,如果這需要真正實現,就必須知道表格。你爲什麼要更新任何形式的標籤而沒有任何目的。所以參考資料是爲了指定目的而保存的。 – 2010-02-09 07:57:42

+0

雖然我不會downvote,我分享這個意見! – 2010-02-09 07:58:23

相關問題