C# 创建的Windows窗体需要文本框具有光标和返回点击按钮

C# 创建的Windows窗体需要文本框具有光标和返回点击按钮,c#,C#,我创建了一个小表单,要求C程序的用户输入一些文本。当程序到达程序中的某个点时,表单会弹出一个标签,上面写着“输入数字”之类的内容,还有一个文本框,允许他们输入数字。有一个按钮,他们可以点击OK并关闭表单,然后在文本框中返回值。我有两个问题 首先,当表单出现时,我希望光标位于文本框中,这样人们就可以开始键入。现在他们必须点击文本框。我以为把焦点放在文本框上会导致这种情况,但正如你在下面看到的,我试过了 第二,当有人在文本框中输入时,他们点击了return,我希望它就像我在表单上的按钮被点击一样。表

我创建了一个小表单,要求C程序的用户输入一些文本。当程序到达程序中的某个点时,表单会弹出一个标签,上面写着“输入数字”之类的内容,还有一个文本框,允许他们输入数字。有一个按钮,他们可以点击OK并关闭表单,然后在文本框中返回值。我有两个问题

首先,当表单出现时,我希望光标位于文本框中,这样人们就可以开始键入。现在他们必须点击文本框。我以为把焦点放在文本框上会导致这种情况,但正如你在下面看到的,我试过了

第二,当有人在文本框中输入时,他们点击了return,我希望它就像我在表单上的按钮被点击一样。表单将完成所有需要完成的事情,比如结束并将文本发回,就好像有人点击了OK

我有Windows XP和Visual Studio 2008

这是我的代码:

    public static class Prompt
    {
        public static string ShowDialog(string text, string caption)
        {
            Form prompt = new Form();
            prompt.Width = 600;
            prompt.Height = 200;
            prompt.Text = caption;

            Label textLabel = new Label() { Left = 50, Top = 20, Width = 600, Text = text };

            TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };


            textBox.Focus();

            Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70 };

            confirmation.Click += (sender, e) => { prompt.Close(); };


            prompt.Controls.Add(confirmation);
            prompt.Controls.Add(textLabel);
            prompt.Controls.Add(textBox);

            prompt.ShowDialog();
            return textBox.Text;
        }
    }
呼叫textBox.Focus;之前,ShowDialog没有任何效果。您必须从窗体的FormLoad事件调用此函数

但有一种更简单的方法,只需先添加文本框:

   //prompt.Controls.Add(confirmation);
   //prompt.Controls.Add(textLabel);
   //prompt.Controls.Add(textBox);

   prompt.Controls.Add(textBox);
   prompt.Controls.Add(textLabel);
   prompt.Controls.Add(confirmation);
呼叫textBox.Focus;之前,ShowDialog没有任何效果。您必须从窗体的FormLoad事件调用此函数

但有一种更简单的方法,只需先添加文本框:

   //prompt.Controls.Add(confirmation);
   //prompt.Controls.Add(textLabel);
   //prompt.Controls.Add(textBox);

   prompt.Controls.Add(textBox);
   prompt.Controls.Add(textLabel);
   prompt.Controls.Add(confirmation);
将窗体的ActiveControl属性设置为textbox以使其成为焦点

prompt.ActiveControl=textbox

将窗体的AcceptButton设置为要按下的按钮:

prompt.AcceptButton=确认

将窗体的ActiveControl属性设置为textbox以使其成为焦点

prompt.ActiveControl=textbox

将窗体的AcceptButton设置为要按下的按钮:

prompt.AcceptButton=确认

Focus将为textbox提供焦点,正如henk所说,这应该在load form事件中完成。。。我假设您正在动态创建文本框

prompt.show+=sender,e=>{textBox.Focus;}

这个

Focus将为textbox提供焦点,正如henk所说,这应该在load form事件中完成。。。我假设您正在动态创建文本框

prompt.show+=sender,e=>{textBox.Focus;}

这个


要将焦点放在控件上,只需在新窗体上设置加载事件并使用。选择

            prompt.Load += delegate { textBox.Select(); };
对于按钮,使用表单AcceptButton属性

            prompt.AcceptButton = confirmation;

这两行代码应该会给出您想要的结果。要将焦点放在控件上,只需在新窗体上设置一个加载事件并使用。选择

            prompt.Load += delegate { textBox.Select(); };
对于按钮,使用表单AcceptButton属性

            prompt.AcceptButton = confirmation;

这两行代码应该会给出第一期的搜索结果,只需转到表单设计器,从“视图”菜单中选择“选项卡顺序”,并确保文本框的选项卡顺序设置为零


对于第二个问题,请将OK按钮的DialogResult设置为OK,并将窗体的AcceptButton属性设置为OK按钮的名称。

对于第一个问题,只需转到窗体设计器,从“视图”菜单中选择“Tab Order”,并确保文本框的Tab Order设置为零


对于第二个问题,请将OK按钮的DialogResult设置为OK,并将窗体的AcceptButton属性设置为OK按钮的名称。

我认为实际效果是,它将设置焦点,但当对话框显示时请求焦点,窗体将始终将焦点转发到它的第一个控件。OP甚至在文本框有父对象或句柄之前就调用了它。啊,好吧,干杯,我知道它偷了焦点,只是不知道它去了哪里。我认为实际效果是它会设置焦点,但当对话框显示时,它会请求焦点,窗体将始终将焦点转发到它的第一个控件。甚至在文本框有一个父对象或句柄之前,OP就会调用它。啊,好吧,干杯,我知道它偷走了焦点,只是不知道它把它带到了哪里