如何在Form1上创建一个标签,从form2中说出“Hello”?

时间:2008-11-05 16:59:06

标签: c#

就是这样。这是一个愚蠢的(令人尴尬的!)问题,但我以前从未使用过C#,只有C ++,我似乎无法弄清楚如何从辅助表单访问主表单上的Label并更改文本。如果有人能让我快速了解该怎么做我会非常感激!

顺便说一句,我应该澄清一下。对不起:我有两个单独的.cs文件,每个文件看起来如下所示。我在VS2008中使用[Designer]在Form1中添加标签。当我输入类似Form1.label1的东西时,它不明白。下拉列表显示了Form1的方法和属性列表,但是只有大约7个,比如ControlCollection,Equals,MouseButtons和其他几个...我可以在Form1中公开定义一个变量并显示,但我不知道如何访问标签...

namespace AnotherProgram
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

4 个答案:

答案 0 :(得分:4)

您需要对Form1实例的引用 - 例如,如果它是构造Form2的Form1,您可以将this作为构造函数参数传递。

然后,您需要通过属性(或 - ick! - 非私有字段)公开Form1的标签,或者编写一个方法/属性来设置标签的文本。例如:

public class Form1 : Form 
{
    private Label label;

    // Construction etc as normal

    public string LabelText
    {
         get { return label.Text; }
         set { label.Text = value; }
    }

    public Form2 CreateForm2()
    {
        return new Form2(this);
    }
}

public class Form2 : Form
{
    private Form1 form1;

    public Form2(Form1 form1)
    {
        this.form1 = form1;
        // Normal construction
    }

    public void SayHello()
    {
        form1.LabelText = "Hello";
    }
}

答案 1 :(得分:0)

您必须从Form2引用Form1。然后,您需要Form2可见的Form 1上的方法或属性,将标签文本更改为“Hello”。

答案 2 :(得分:0)

Public Class Form1
    Inherits Form


    Friend label1 As New Label


    Public Sub openForm2()
        Dim f As New Form2(Me)
        f.Show()
    End Sub


End Class


Public Class Form2
    Inherits Form


    Private _ref As Form1


    Public Sub New()
        _ref = Nothing
    End Sub


    Public Sub New(ByVal formRef As Form1)
        _ref = formRef
    End Sub


    Public Sub accessLabel(ByVal setText As String)
        If (_ref IsNot Nothing) Then
            _ref.label1.Text = setText
        Else
            Throw New NullReferenceException("_ref is NULL")
        End If
    End Sub


End Class

答案 3 :(得分:0)

我认为代表是最强大的选择,除了在表单中具有属性:http://www.c-sharpcorner.com/UploadFile/mosessaur/winformsdelegates09042006094826AM/winformsdelegates.aspx

在第二种形式中我定义:

public delegate void AddItemDelegate(string item);
public AddItemDelegate AddItemCallback;

从打开它的表格我写道:

private void btnScenario2_Click(object sender, EventArgs e)
{

    FrmDialog dlg = new FrmDialog();
    //Subscribe this form for callback
    dlg.AddItemCallback = new AddItemDelegate(this.AddItemCallbackFn);
    dlg.ShowDialog();

}
private void AddItemCallbackFn(string item)
{

    lstBx.Items.Add(item);

}