我有3个按钮,在这种情况下,将它们称为按钮1,2和3.然后我在同一个解决方案中使用不同的表单,并带有标签。我想要的是当按下每个按钮时,label.text需要在另一个表单上更改。更改按钮上的标签文本以不同的形式点击
像中的示例:当: - 按钮1点:标签文本= 1 - 按键2点:标签文本= 2 - 按钮3点:标签文本= 3
我有3个按钮,在这种情况下,将它们称为按钮1,2和3.然后我在同一个解决方案中使用不同的表单,并带有标签。我想要的是当按下每个按钮时,label.text需要在另一个表单上更改。更改按钮上的标签文本以不同的形式点击
像中的示例:当: - 按钮1点:标签文本= 1 - 按键2点:标签文本= 2 - 按钮3点:标签文本= 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");
}
}
我会使用一些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的东西,但由于缺乏语言的,我希望它给你想做的事:)
,你可以使用这样的代表事件: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...
}
在点击的时刻已经开通形式? – Steve
不是,但是当你点击其中一个,你应该看到表格2改变了标签 – Donovan