从方法外部访问表单变量
本文关键字:表单 变量 访问表 访问 方法 外部 | 更新日期: 2023-09-27 18:26:28
public class Simple : Form
{
public Simple()
{
Text = "Server Command Line";
Size = new Size(800, 400);
CenterToScreen();
Button button = new Button();
TextBox txt = new TextBox ();
txt.Location = new Point (20, Size.Height - 70);
txt.Size = new Size (600, 30);
txt.Parent = this;
txt.KeyDown += submit;
button.Text = "SEND";
button.Size = new Size (50, 20);
button.Location = new Point(620, Size.Height-70);
button.Parent = this;
button.Click += new EventHandler(sSubmit);
}
private void submit(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter ) {
Console.WriteLine ("txt.Text");//How do I grab this?
Submit();
}
}
}
我正在尝试从表单外部访问txt.Text
,谷歌也没有帮助。如何访问它?
你的 txt 变量是在 Simple(( 构造函数的本地范围内声明的。 您将无法像在提交方法中那样在此范围之外的任何位置访问它。
您可能想要做的是在 Simple 类中创建一个私有实例变量,然后您将能够从属于此类的任何声明方法访问该变量。
例:
public class Simple : Form
{
//now this is field is accessible from any method of declared within this class
private TextBox _txt;
public Simple()
{
Text = "Server Command Line";
Size = new Size(800, 400);
CenterToScreen();
Button button = new Button();
_txt = new TextBox ();
_txt.Location = new Point (20, Size.Height - 70);
_txt.Size = new Size (600, 30);
_txt.Parent = this;
_txt.KeyDown += submit;
button.Text = "SEND";
button.Size = new Size (50, 20);
button.Location = new Point(620, Size.Height-70);
button.Parent = this;
button.Click += new EventHandler(sSubmit);
}
private void submit(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter ) {
Console.WriteLine (_txt.Text);//How do I grab this?
Submit ();
}
}
}
您必须
在表单类的某个位置定义一些TextBox
变量txt
,这实际上是由设计器在将TextBox
从Toolbox
拖放到表单上时自动完成的。此变量是 TextBox
的实例。它应该使用构造函数TextBox()
和一些属性进行初始化,就像在代码中所做的那样。您可以在窗体类 Simple
的作用域中使用此变量。它具有属性Text
(类型string
(,可以修改或获取以显示。要访问属性,只需使用此模式:[instance Name].[Property name]
public class Simple : Form
{
public Simple()
{
Text = "Server Command Line";
Size = new Size(800, 400);
CenterToScreen();
Button button = new Button();
txt = new TextBox ();
txt.Location = new Point (20, Size.Height - 70);
txt.Size = new Size (600, 30);
txt.Parent = this;
txt.KeyDown += submit;
button.Text = "SEND";
button.Size = new Size (50, 20);
button.Location = new Point(620, Size.Height-70);
button.Parent = this;
button.Click += new EventHandler(sSubmit);
}
TextBox txt;
private void submit(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter ) {
Console.WriteLine (txt.Text);
Submit();
}
}
}
默认情况下(并且有充分的理由(,使用设计器在窗体上创建的控件是私有的。 您可以将其更改为公共,但更好的解决方案是在窗体上创建一个公共属性以公开它。
public string MyTextField { get { return txt.Text; } }
当然,如果你想从外面改变它,你也可以在那里添加一个二传手。 但是,请记住,如果您尝试在线程上访问其他线程上的控件,那么创建它们的线程将有一个单独的跨线程问题需要处理,但是有很多关于如何处理该问题的帖子已经在SO上