0

Class(ChorNumbers) があり、このクラスには textbox1...17 が Character または Number であることをテストする Function があります。

9 つのテキスト ボックスを持つ WindowsForm を作成します。そして、次のtextbox2にジャンプする必要があるtextbox1に1を入力すると(これを行います)textbo3にジャンプする必要があるtextbox2にAを入力すると、ジャンプしません。ジャンプしない問題はどこにありますか??

そして、1つのtextbox1_TextChanged関数を使用したい。

 private void textbox1_TextChanged(object sender, EventArgs e)
 {
        TextBox myText = (TextBox)sender;
        ChorNumbers myNR = new ChorNumbers();

        bool _focused = false;
        if (myNR.CheckTextbox(myText.Name, myText.Text) == false)
            foreach (Control ctrtb in base.Controls)
                if (ctrtb is TextBox && _focused == false)
                {
                    _focused = ctrtb.Focused;
                }
                else if (ctrtb is TextBox && _focused == true)
                    ctrtb.Focus();
 }

私はそれを使いたくないという解決策を持っています。他のテキストボックスには textbox1 関数が 1 つだけ必要です

    private void textbox3_TextChanged(object sender, EventArgs e)
    {
        TextBox myText1 = (TextBox)sender;
        ChorNumbers myNR1 = new ChorNumbers();

        if (myNR1.CheckTextbox(myText1.Name, myText1.Text) == false)
        {
            textbox4.Focus();
        }
    }
4

4 に答える 4

0

試してみませんか:

if textbox2.text = "A" then
    'whatever you want, for exapmple:
    textbox3.text = textbox2.text
end if

textbox2.text = "A"の代わりに、次のようなものを使用することもできます。

if not textbox2.text = nothing then
end if

あなたが試したものよりもはるかに簡単ではありませんか?

于 2012-06-16T18:44:58.277 に答える
0

私はそれを使いたくないという解決策を持っています。他のテキストボックスには textbox1 関数が 1 つだけ必要です

各テキストボックスから呼び出される単一のコールバック関数のみが必要であり、(正しく設定されていれば) 次のテキストボックスに渡されるということですか? その場合、その部分は簡単です。各イベント ハンドラーを同じメソッドにポイントするだけです (ただし、検証がそれぞれでまったく同じでない限り、複雑になる可能性があります。したがって、テキスト ボックスごとに 1 つ持つ方がよい場合があります)。

あなたの問題は標準的なものになると思います-そのコントロールが処理を完了する前に、そのコントロールによって呼び出されたイベント中にフォーカスを変更しようとしています。つまり、テキスト ボックス 1 が入力されると、キャッチしたイベントが発生します。キャッチメント (コールバック) メソッドでフォーカスを変更します。処理がテキスト ボックス 1 に戻り (コールバック メソッドの戻り/終了時)、フォーカスがバッチとして切り替えられます。副産物 (カラットは textbox1 による次の更新の準備が整っているため)。

解決策の 1 つは、数ミリ秒後に時限イベントを呼び出し、処理がテキスト ボックスに戻り、メッセージの待機状態に戻った後、時限イベントがフォーカスを開始 (ジャンプ) することです。

また、強制的に有効に設定し、それが現在のコントロールを強制的に通過させるかどうかを確認することもできます(ただし、タブストップをソートする必要があります)

于 2012-06-16T19:41:45.630 に答える
0

Thats my Function ChorNumbers

 public bool ChorNumbers(string Name, string _Text)
        {
            bool error = false;
            if (_Text.Length < 1)
            {
                error = true;
                return error;
            }

                if (Name == "textbox1" && _Text.Length == 1)
                {
                    if (!Regex.IsMatch(_Text, "^[0-9\\s]"))
                    {
                        MessageBox.Show("Only Number and Space!");
                        error = true;
                    }
                }
                if (Name == "textbox2" && _Text.Length==1)
                {
                    if (!Regex.IsMatch(_Text, "^[a-zA-z]"))
                        {
                            MessageBox.Show("Only Character!");
                            error = true;
                        }
                 }

           // textbo3 ... textbox17


    return error;
  }
于 2012-06-17T08:08:38.797 に答える
0
  1. すべてのテキスト ボックスの TextChanged イベントを処理するイベント ハンドラーを作成します。

     private void textbox_TextChanged(object sender, EventArgs e)
     {
            TextBox txtBox = (TextBox)sender;
    
            // Either write your own character/number and focus moving logic here 
            // Or the following
            char ch = txtBox.Text.Trim()[0];
            switch(txtBox.Name){
                case "textbox1":
                    if(Char.IsDigit(ch))
                        textbox2.focus();
                break;
                case "textbox2":
                    if(Char.IsLetter(ch))
                        textbox3.focus();
                break;
    
                ... // rest of the cases
            }
     }
    
  2. 設計時に、 を選択し、[textbox1プロパティ] > [イベント] > [TextChanged] に移動して、textbox_TextChangedそこにバインドします。残りのテキストボックスについても同じことを行います。
于 2012-06-16T19:13:52.993 に答える