当我们点击其他表单上的按钮时,如何以另一种形式在标签上发布文字?

时间:2013-12-16 07:34:57

标签: c# winforms

您好我在C#中有一个程序,它有一个按钮。因此,当我们单击按钮时,它将计算包含该按钮(form1)的表单中的某些值,结果将以另一种形式(form2)显示为标签中的文本。

我该怎么做?任何人都可以向我解释代码吗?

2 个答案:

答案 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;
    }
}

答案 1 :(得分: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代替自定义事件处理程序来使解决方案更紧凑:

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);
    }
}