2016-06-07 52 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... 
     }