1

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

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

其次,当有人在文本框中键入并且他们点击返回时,我希望它就像我在表单上的按钮被点击一样。该表单将完成所有将完成的事情,例如结束并将文本发回,就好像有人点击了 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;
        }
    }
4

5 回答 5

1

要专注于您的控件,只需在新表单上设置一个 Load 事件并使用 .Select()

            prompt.Load += delegate { textBox.Select(); };

对于按钮,使用表单 AcceptButton 属性

            prompt.AcceptButton = confirmation;

这两行代码应该会给你你正在寻找的结果

于 2013-07-26T15:28:10.337 回答
1

对于第一个问题,只需转到您的表单设计器,Tab OrderView菜单中选择并确保您的 TextBox 的 Tab Order 设置为零。

对于第二个问题,将“确定”按钮设置DialogResultOK并将表单的AcceptButton属性设置为“确定”按钮的名称。

于 2013-07-26T15:28:17.177 回答
1

textBox.Focus();在 the 之前调用 ShowDialog()无效。您必须从 Form 的 FormLoad 事件中调用它。

但是有一种更简单的方法,只需先添加 TextBox:

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

   prompt.Controls.Add(textBox);
   prompt.Controls.Add(textLabel);
   prompt.Controls.Add(confirmation);
于 2013-07-26T15:21:09.220 回答
1
  1. textbox.Focus()将重点放在文本框上,正如亨克所说,这应该在加载表单事件中完成......我假设你正在动态创建文本框

    prompt.Shown += (sender, e) => { textBox.Focus(); };

  2. 这个

        textBox.KeyUp += (sender, e) =>
        {
            if (e.KeyCode == Keys.Enter)
            {
                MessageBox.Show("enter pressed");
            }
        };
    
于 2013-07-26T15:24:25.563 回答
1
  1. ActiveControl表单的属性设置为文本框以使其获得焦点

    prompt.ActiveControl = textbox

  2. 将表单设置为AcceptButton您要按下的按钮:

    prompt.AcceptButton = confirmation

于 2013-07-26T15:23:09.913 回答