Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框未激活表单接受按钮_C#_Winforms - Fatal编程技术网

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
。Move
this.AcceptButton=this.btn
btn=new Button()之后的任意一行<代码>btn
指向空引用,直到
新建按钮()
。实例化
btn
后,您可以使用它设置
AcceptButton

问题在于,在实例化表单之前,您将表单的
AcceptButton
设置为
btn
。Move
this.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!非常感谢!