C# 文本框未激活表单接受按钮
我有一个表单,它有一个文本框和一个按钮。我已将表单的C# 文本框未激活表单接受按钮,c#,winforms,C#,Winforms,我有一个表单,它有一个文本框和一个按钮。我已将表单的AcceptButton属性设置为我的按钮,并将文本框的AcceptsReturn属性设置为false: class Window : Form { private TextBox textBox1; private Button btn; public Window() { this.Size = new Size(200, 200); this.AcceptButton = t
AcceptButton
属性设置为我的按钮,并将文本框的AcceptsReturn
属性设置为false
:
class Window : Form
{
private TextBox textBox1;
private Button btn;
public Window()
{
this.Size = new Size(200, 200);
this.AcceptButton = this.btn;
textBox1 = new TextBox();
textBox1.Location = new Point(10, 10);
textBox1.Width = 50;
textBox1.AcceptsReturn = false;
this.Controls.Add(textBox1);
btn = new Button();
btn.Text = "Test";
btn.Location = new Point(textBox1.Right + 10, 10);
btn.Click += btn_Click;
this.Controls.Add(btn);
}
void btn_Click(object sender, EventArgs e)
{
MessageBox.Show("Works");
}
}
class Program
{
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.Run(new Window());
}
}
但是,在文本框具有焦点的情况下按Enter键时,表单的AcceptButton不会激活。我使用文本框的向下键事件解决了这个问题,如下所示:
textBox1.KeyDown += (s,e) => { if (e.KeyCode == Keys.Enter) btn.PerformClick(); } ;
尽管它可以工作,但我很好奇为什么早期使用AcceptButton
属性的方法失败了。问题是,在实例化表单之前,您将表单的AcceptButton
设置为btn
。Movethis.AcceptButton=this.btn代码>到btn=new Button()之后的任意一行代码><代码>btn
指向空引用,直到新建按钮()
。实例化btn
后,您可以使用它设置AcceptButton
问题在于,在实例化表单之前,您将表单的AcceptButton
设置为btn
。Movethis.AcceptButton=this.btn代码>到btn=new Button()之后的任意一行代码><代码>btn
指向空引用,直到新建按钮()
。一旦实例化了btn
,您就可以使用它来设置AcceptButton
,您只是在错误的位置写了一行。这就是答案:
public Form1()
{
InitializeComponent();
this.Size = new Size(200, 200);
textBox1 = new TextBox();
textBox1.Location = new Point(10, 10);
textBox1.Width = 50;
textBox1.AcceptsReturn = true;
this.Controls.Add(textBox1);
btn = new Button();
btn.Text = "Test";
btn.Location = new Point(textBox1.Right + 10, 10);
btn.Click += btn_Click;
this.Controls.Add(btn);
this.AcceptButton = this.btn;
}
我希望这对你有帮助 你只是在错误的地方写了一行。这就是答案:
public Form1()
{
InitializeComponent();
this.Size = new Size(200, 200);
textBox1 = new TextBox();
textBox1.Location = new Point(10, 10);
textBox1.Width = 50;
textBox1.AcceptsReturn = true;
this.Controls.Add(textBox1);
btn = new Button();
btn.Text = "Test";
btn.Location = new Point(textBox1.Right + 10, 10);
btn.Click += btn_Click;
this.Controls.Add(btn);
this.AcceptButton = this.btn;
}
我希望这对你有帮助 可能是输入错误,但您的代码示例显示您的文本框
将AcceptsReturn
设置为true
;this.AcceptButton=null;按钮的创建执行得太晚了。为什么不让visual studio为您编写所有这些代码?在典型的windows窗体应用程序中,所有这些控件初始化代码都写在InitializeComponent函数中,该函数由构造函数调用。当您继续使用“属性”窗口设置窗体上各种控件的属性时,InitializeComponent函数中的所有代码都由visual studio自动生成。如果你沿着这条路线走,这样的灾难就不会发生。你可能从零开始就试着一个人做这件事。当我查看自动生成的代码时,默认情况下一切正常。因此,我想知道您最初是如何产生这个问题的:-)可能是打字错误,但是您的代码示例显示您的文本框将接受返回设置为真。我想知道这个。AcceptButton=this.btn;this.AcceptButton=null;按钮的创建执行得太晚了。为什么不让visual studio为您编写所有这些代码?在典型的windows窗体应用程序中,所有这些控件初始化代码都写在InitializeComponent函数中,该函数由构造函数调用。当您继续使用“属性”窗口设置窗体上各种控件的属性时,InitializeComponent函数中的所有代码都由visual studio自动生成。如果你沿着这条路线走,这样的灾难就不会发生。你可能从零开始就试着一个人做这件事。当我查看自动生成的代码时,默认情况下一切正常。因此,我想知道你最初是如何造成这个问题的:-)捕捉得很好。不过,我花了一段时间才弄清楚您移动了哪行代码。可以使用行号、注释,也可以将代码的确切行斜体化,以引起读者对该行的注意。你得到我的+1。好建议@RasikBihariTiwari!非常感谢!抓得很好。不过,我花了一段时间才弄清楚您移动了哪行代码。可以使用行号、注释,也可以将代码的确切行斜体化,以引起读者对该行的注意。你得到我的+1。好建议@RasikBihariTiwari!非常感谢!