在另一个cs文件中使用文本框值

时间:2017-01-30 22:59:30

标签: c# winforms

我想在我的控制台应用中添加WinForm:

namespace ExchangeNativeDemo.Window
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
    }
}

我想将textbox1值传递给Program.cs,例如:

var emailaddress = textbox1.value

在program.cs中:

using ExchangeNativeDemo.Window;

namespace ExchangeNativeDemo
{
    class Program
    {
        static void Main(string[] args)
        {

但是我得到了错误:

  

由于其保护级别而无法访问

我错过了什么?

3 个答案:

答案 0 :(得分:1)

使用Visual Studio将TextBox(或其他控件)添加到WinForm时,控件默认为protected scope,这意味着唯一可以访问它的代码是WinForm本身的代码或类源自它。

有两种常见的选择:

  1. 只需将TextBox从protected更改为public即可。这打破了封装,所以这不是我最喜欢的。

  2. 编写一个公开文本框Text属性的自定义属性,例如

    class Form1
    {
        //.....Other stuff....
        public string Text1Value
        {
            get { return this.textbox1.Text; }
        }
    }
    

    由于您知道它应该是电子邮件地址,并且您希望至少尝试进行一些封装,您可能实际上想要将其命名为EmailAddressEntered或类似名称。

    public string EmailAddressEntered
    {
        get { return this.textbox1.Text; }
    }
    

    然后在主程序中,创建表单实例,显示它,然后读取属性。

    void Main()
    {
        //....do other stuff....
        var form = new Form1();
        form.ShowDialog();
        var emailaddress = form.EmailAddressEntered;
    }
    
  3. 另请注意,TextBox没有值。内容存储在Text属性中。

    另请注意,您的main功能应该包含对Application.Run的调用,或者您发现Form1无效。

答案 1 :(得分:0)

  • 您需要textbox1 公开

  • 或将属性添加到将公开其值的Form1:

    public string Textbox1Text
    {
        get { return textbox1.Text; }
    }
    

答案 2 :(得分:-1)

我认为您需要将var声明为public,否则它将自动为私有。试试让我知道。