繁体   English   中英

如何公开公开控件的属性?

[英]How do I expose a control's property publicly?

我想将 Form1 上文本框的 Text 属性公开给 Form2,以便 Form2 可以在 Form1 上的文本框中设置文本。 我已经阅读了如何做,但它不起作用,所以我一定是做错了什么。

这是 Form1 的代码,包括公共属性的声明(TextInputText 是属性,txtInput 是文本框):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public string TextInputText
        {
            get => txtInput.Text;
            set => txtInput.Text = value;
        }

        public Form1()
        {
            InitializeComponent();                       
        }

        private void txtInput_KeyDown(object sender, KeyEventArgs e)
        {
            // If enter is pressed clear the textbox, but update() the history first

            if (e.KeyCode == Keys.Enter)
            {
                TextHistory.Update(txtInput.Text);
                txtInput.Text = "";
            }
        }

        private void HistoryButton_Click(object sender, EventArgs e)
        {
            Form2 HistoryForm = new Form2();
            HistoryForm.Show();
        }
    }
}

问题是 Form2 仍然看不到属性,或者我不知道如何访问它,我做错了什么?

在创建Form2时注入对Form1的引用:

private void HistoryButton_Click(object sender, EventArgs e)
{
    Form2 HistoryForm = new Form2(this);
    HistoryForm.Show();
}

这要求您在Form2中定义一个接受Form1引用的自定义构造函数。 然后,您可以使用此引用访问该属性:

private readonly Form1 _form1;
public Form2(Form1 form1)
{
    InitializeComponent();
    _form1 = form1;

    string text = _form1.TextInputText;
}

另一种方法是使用Application.OpenForms属性在Form2获取对Form1的引用:

var form1 = Application.OpenForms.OfType<Form1>().FirstOrDefault();
string text = form1.TextInputText;

你没有给 Form2 一个对 Form1 实例的引用:

Form2 HistoryForm = new Form2();

如果没有实例,您如何访问实例函数、属性或值? 静态属性没有意义。 因此,最可能的选择是为 Form2 提供一个将 Form1 引用作为 Argument 的构造函数。 将该引用存储在 Form2 中的某处。 然后像这样调用构造函数:

Form2 HistoryForm = new Form2(this);

暂无
暂无

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

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