我想在我的控制台应用中添加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)
{
但是我得到了错误:
由于其保护级别而无法访问
我错过了什么?
答案 0 :(得分:1)
使用Visual Studio将TextBox(或其他控件)添加到WinForm时,控件默认为protected scope,这意味着唯一可以访问它的代码是WinForm本身的代码或类源自它。
有两种常见的选择:
只需将TextBox从protected
更改为public
即可。这打破了封装,所以这不是我最喜欢的。
编写一个公开文本框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;
}
另请注意,TextBox没有值。内容存储在Text属性中。
另请注意,您的main
功能应该包含对Application.Run的调用,或者您发现Form1
无效。
答案 1 :(得分:0)
您需要textbox1
公开,
或将属性添加到将公开其值的Form1:
public string Textbox1Text
{
get { return textbox1.Text; }
}
答案 2 :(得分:-1)
我认为您需要将var声明为public,否则它将自动为私有。试试让我知道。