繁体   English   中英

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

[英]How can I make a label on Form1 say “Hello” from form2?

而已。 这是一个愚蠢的(令人尴尬的!)问题,但我以前从未使用过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();
        }
    }
}

您需要对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";
    }
}

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

 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 

我认为代表是最强大的选择,除了在表单中具有属性: 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);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM