2013-12-16 26 views
1

你好,我有一個C#程序,它有一個按鈕。因此,當我們點擊按鈕時,將會在包含該按鈕的表單中計算一些值(form1),結果將以另一種形式顯示爲標籤中的文本(form2)。如何在單擊其他表單上的按鈕時以另一種形式在標籤上發佈文本?

我該怎麼做?任何人都可以解釋我的代碼?

+1

這將是很好,如果你 –

+0

你必須'Form1'到'Form2'參考添加一些代碼片斷。我假設你從第一個創建第二個表單。然後你可以使用一個參考。將其保存在全局變量中,以便您可以通過多種方法訪問它。 –

+0

你能懇求給我一個怎麼做的語法嗎? –

回答

1

聲明一個Form2變量在Form1

Form2 f2 = new Form2; 

裏面Form2創建SetLabelText方法:

public void SetLabelText(string text) 
{ 
    this.label1.Text = text; 
} 

每當你需要更新第二表單上的標籤:

f2.SetLabelText("Message generated by Form1"); 

編輯:完整例如

第一種形式:

public partial class Form1 : Form 
{ 
    public Form2 f2; 

    public Form1() 
    { 
     InitializeComponent(); 

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

    private void button1_Click(object sender, EventArgs e) 
    { 
     f2.SetLabelText("testing"); 
    } 
} 

第二種形式:

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

    public void SetLabelText(string text) 
    { 
     this.label1.Text = text; 
    } 
} 
+0

我首先做了,但是我得到這個錯誤「由於其保護級別而無法訪問」 –

+0

@Otimtimckck,你是什麼意思?你首先創建'Form1'然後'Form2'。也許(編輯)完整的例子會幫助你更多。 –

+0

窗體1 - 有一些文本框和一個命令按鈕。所以當我點擊命令按鈕時,文本框中的值會加起來並貼在窗體上的另一個標籤上2 –

0

我會去的事件。讓你的形式通知第二種形式計算這個數字:

public partial class Form1 : Form 
{ 
    public event EventHandler<NumberCalculatedEventArgts> NumberCalculated; 

    private void ButtonClick(object sender, EventArgs e) 
    {    
     int value = 42; // calculate value 
     OnNumberCalculated(value); // Notify subscribers 
    } 

    protected void OnNumerCalculated(int value) 
    { 
     if (NumberCalculated != null) // Check if somebody needs notification 
      NumberCalculated(this, new NumberCalculatedEventArgs(value)); 
    } 
} 

第二種形式應該訂閱這種形式的活動:

public partial class Form2 : Form 
{ 
    private void ShowCalclulatorButton_Click(object sender, EventArgs e) 
    {    
     Form1 form1 = new Form1(); 
     form1.NumberCalculated += Form1_NumerCalculated; // Subscribe 
     form1.Show(); 
    } 

    void Form1_NumerCalculated(object sender, NumberCalculatedEventArgs e) 
    { 
     label1.Text = e.Value.ToString(); // Handle notification 
    } 
} 

而你需要最後一件事是定製事件參數提供計算值:

public class NumberCalculatedEventArgts : EventArgs 
{ 
    public NumberCalculatedEventArgts(int value) 
    { 
     Value = value; 
    } 

    public int Value { get; private set; } 
} 

您還可以使用Action,而不是自定義事件處理r選擇的解決方案更緊湊:

public partial class Form1 : Form 
{ 
    public event Action<int> NumberCalculated; 

    private void ButtonClick(object sender, EventArgs e) 
    {    
     int value = 42; // calculate value 
     if (NumberCalculated != null) 
      NumberCalculaed(value); 
    } 
} 
相關問題