2016-06-07 50 views
1

我有3個按鈕,在這種情況下,將它們稱爲按鈕1,2和3.然後我在同一個解決方案中使用不同的表單,並帶有標籤。我想要的是當按下每個按鈕時,label.text需要在另一個表單上更改。更改按鈕上的標籤文本以不同的形式點擊

像中的示例:當: - 按鈕1點:標籤文本= 1 - 按鍵2點:標籤文本= 2 - 按鈕3點:標籤文本= 3

+2

在點擊的時刻已經開通形式? – Steve

+0

不是,但是當你點擊其中一個,你應該看到表格2改變了標籤 – Donovan

回答

3

您可以使用Application.OpenForms收集並添加一個簡單的方法給每個表單,需要改變什麼的想法

在點擊按鈕添加

foreach (Form f in Application.OpenForms) 
{ 
    if(f Is Form1) 
     (f as Form1).ChangeLabel("NewText 1"); 
    else if (f is Form2) 
     (f as Form2).ChangeLabel("NewText 2"); 
    else if (f is Form3)) 
     (f as Form3).ChangeLabel("NewText 3"); 
} 

在您要更改添加(例如爲Form)

.... other code inside your Form1,Form2,Form3 classes... 
public void ChangeLabel(string newText) 
{ 
    this.Label1.Text = newText; 
} 
.... other code inside your Form1,Form2,Form3 classes... 

(當然,你需要每個窗體改變Form1上,窗體2,Form3來實現你的表格和LABEL1的標籤的確切名稱變更的類)

您也可以讓您的標籤公開,並使用類似語法

的真實姓名
(f as Form1).Label1 = "New Text 1"; 

但我通常寧願離開由外部代碼不可見的窗體託管的控件。在評論

編輯

展望下面我明白,你有三個按鈕一個形式和一種形式與一個標籤。當你點擊這些按鈕時你想改變標籤

然後代碼如下(設置每個按鈕Click事件到使用設計器的同一事件處理程序。在這個例子中我將其稱之爲ChangeLabel_Click

protected void ChangeLabel_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    SecondFormType f = Application.OpenForms.OfType<SecondFormType>().FirstOrDefault(); 
    if(f != null) 
    { 
     if(btn.Name == "Button1") 
      f.ChangeLabel("NewText 1"); 
     else if(btn.Name == "Button2") 
      f.ChangeLabel("NewText 2"); 
     else if(btn.Name == "Button3") 
      f.ChangeLabel("NewText 3"); 
    } 
} 

EDIT 2

上面的代碼利用SecondType的第一種形式是這樣,如果你有以下形式的多個實例打開SecondType你需要一個循環改變每一個表單實例

protected void ChangeLabel_Click(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    foreach(SecondFormType f in Application.OpenForms.OfType<SecondFormType>()) 
    { 
     if(btn.Name == "Button1") 
      f.ChangeLabel("NewText 1"); 
     else if(btn.Name == "Button2") 
      f.ChangeLabel("NewText 2"); 
     else if(btn.Name == "Button3") 
      f.ChangeLabel("NewText 3"); 
    } 
} 
+0

VS在那個2nt部分說: 類,結構或接口成員聲明中的令牌':'無效 不知道爲什麼,但是2x 並且在同一部分它說: 成員修飾符'public'必須先於成員類型和名稱 – Donovan

+0

這只是您需要放置ChangeLabel方法的示例。它應該放置在需要更改標籤的表格的類中。您已經有了Form類的聲明,不需要再次添加聲明。我會刪除它以避免混淆 – Steve

+0

呃好的,請檢查!所以我必須將form1,2和3更改爲按鈕名稱或表單名稱。因爲只有兩種形式。 1個帶有3個按鈕,1個帶有必須更改的標籤。 – Donovan

0

我會使用一些jQuery的此

$("#button1").on('click', function(){ 
    $("#label").empty().append("1"); 
}); 

$("#button2").on('click', function(){ 
    $("#label").empty().append("2"); 
}); 

$("#button3").on('click', function(){ 
    $("#label").empty().append("3"); 
}); 

和你的HTML標籤應該是這樣的

<label id="label">Text</label> 

可能錯過ED的東西,但由於缺乏語言的,我希望它給你想做的事:)

+2

我感覺OP是處理Windows窗體而不是Web窗體! – Aboudi

+1

啊我的不好,希望你找個OP好的解決方案! :) – Peter

+0

UHU C#但沒關係! – Donovan

0

,你可以使用這樣的代表事件:y中

我們與您的按鈕形式創建DelegateEvent

//Create a delegate 
    public delegate void ButtonClickToOtherForm(object sender, EventArgs e); 

    public partial class Form2 : Form 
    { 
     //Your own event based on created delegate 
     public event ButtonClickToMainForm ButtonClickedToMainForm; 

     public Form2() 
     { 
      InitializeComponent(); 
     } 

     //This method will invoke your event 
     private void OnButtonClickedToOtherForm(object sender, EventArgs e) 
     { 
      ButtonClickedToOtherForm?.Invoke(this, e); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //On button1_Click this will fire the event on the other form 
      OnButtonClickedToMainForm(this, e); 
     } 

並在表格和標籤訂閱該事件

public Form1() 
     { 
      InitializeComponent(); 
      //Subscribe to event from your other Form 
      Form2.ButtonClickedToOtherForm += Form2_ButtonClickedToOtherForm; 
     } 

     //Button on Form2 has been clicked 
     private void Form2_ButtonClickedToMainForm(object sender, EventArgs e) 
     { 
      //change your Label Text here... 
     } 
相關問題