代码之家  ›  专栏  ›  技术社区  ›  Matt

我怎样才能让表格1上的标签从表格2上说“你好”?

c#
  •  1
  • Matt  · 技术社区  · 16 年前

    顺便说一句,我真的应该澄清一下。抱歉:我有两个单独的.cs文件,每个文件的外观如下所示。我在VS2008中使用[Designer]在Form1中添加标签。当我输入Form1.label1之类的内容时,它不理解。下拉列表显示了Form1的方法和属性列表,但只有大约7个,如ControlCollection、Equals、MouseButtons和其他一些。。。我可以在Form1中公开定义一个变量,但我不知道如何访问标签。。。

    namespace AnotherProgram
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
        }
    }
    
    4 回复  |  直到 16 年前
        1
  •  4
  •   Jon Skeet    16 年前

    您将需要对Form1实例的引用—例如,如果是Form1正在构造Form2,您可能会通过 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";
        }
    }
    
        2
  •  0
  •   Aaron Smith    16 年前

        3
  •  0
  •   Craig Norton    16 年前
    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
    
        4
  •  0
  •   netadictos    16 年前

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