1

C# プログラムのユーザーにテキストの入力を求めるために作成した小さなフォームがあります。プログラムがプログラムのあるポイントに到達すると、「数字を入力してください」のようなフォーム内のラベルと、それを入力できるテキストボックスを含むフォームがポップアップします。[OK] を押すことができるボタンがあります。フォームを閉じて、テキストボックスに値を送り返します。2つの問題があります

まず、フォームが表示されたら、カーソルを Textbox に入れて、入力を開始できるようにします。現在、テキストボックスをクリックする必要があります。テキストボックスにフォーカスを合わせるとそれが起こると思ったのですが、以下に示すように、それを試しました。

第二に、誰かがテキストボックスの入力中にリターンを押したときに、フォームにあるボタンがヒットしたかのようにしたいです。フォームは、誰かが OK を押したかのように、end のように行われるすべてのことを行い、Text を送り返します。

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

textBox.Focus();の前に呼び出し 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. フォームのプロパティをテキストボックスに設定しActiveControlて、フォーカスを取得します

    prompt.ActiveControl = textbox

  2. フォームAcceptButtonを押したいボタンに設定します。

    prompt.AcceptButton = confirmation

于 2013-07-26T15:23:09.913 に答える
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

コントロールにフォーカスするには、新しいフォームに Load イベントを設定し、.Select() を使用します。

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

ボタンには、フォームの AcceptButton プロパティを使用します

            prompt.AcceptButton = confirmation;

この 2 行のコードで、探している結果が得られるはずです

于 2013-07-26T15:28:10.337 に答える
1

最初の問題については、フォーム デザイナーに移動し、メニューTab Orderから選択しViewて、TextBox のタブ オーダーが 0 に設定されていることを確認します。

2 番目の問題については、[OK] ボタンDialogResultOKに設定し、フォームのAcceptButtonプロパティを [OK] ボタンの名前に設定します。

于 2013-07-26T15:28:17.177 に答える