按钮上的更改标签文本以不同的形式单击

时间:2016-06-07 14:29:32

标签: c#

我有3个按钮,在这种情况下称它们为按钮1,2和3.然后我在同一个解决方案中有一个不同的表单,带有标签。我想要的是当按下每个按钮时,label.text需要在另一个窗体上更改。

喜欢一个例子:当: - 单击按钮1:标签文本= 1 - 单击按钮2:标签文本= 2 - 单击按钮3:标签文本= 3

3 个答案:

答案 0 :(得分:4)

您可以使用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");
}

在您要更改的每个表单中添加(Form1的示例)

.... 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,Form2,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");
    }
}

编辑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");
    }
}

答案 1 :(得分: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>

可能错过了一些东西,但由于缺乏语言,我希望它能给出你想做什么的想法:)

答案 2 :(得分:0)

你可以使用这样的委托事件:

使用按钮在表单中的

创建一个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...
        }