0

ユーザーがキーボードのEnterキーを押すと、すでにコードがあり、タブを返し、次のフィールドに「ジャンプ」します。うまく機能し、2つまたは3つのテキストボックスで作成できる可能性があります。それぞれに20個のテキストボックスのような複数のテキストボックスで作成する必要がある場合の問題フォーム、それはうまくいきません。

コードを参照してください:

// Detect if Enter key is pressed on each text box, mute sound enter "ding"  sound and replace Enter for tab (problem that have make it for each textbox)
        private void txtAltura_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                e.Handled = true; //Silenciar Enter
                SendKeys.Send("{TAB}");
            }
        }

        private void txtLargura_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                e.Handled = true; //Silenciar Enter
                SendKeys.Send("{TAB}");
            }
        }

        private void txtProfundidade_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                e.Handled = true; //Silenciar Enter
                SendKeys.Send("{TAB}");
            }
        }

//execute keypress command when enter is typed on textbox 
    private void txtProfundidade_TextChanged(object sender, EventArgs e)
            {
                if (txtProfundidade.Text != "") { foreach (char c in txtProfundidade.Text.ToCharArray()) txtProfundidade_KeyPress(sender, new KeyPressEventArgs(c)); }

            }

            private void txtLargura_TextChanged(object sender, EventArgs e)
            {
                if (txtLargura.Text != "") { foreach (char c in txtLargura.Text.ToCharArray()) txtLargura_KeyPress(sender, new KeyPressEventArgs(c)); }
            }

            private void txtAltura_TextChanged(object sender, EventArgs e)
            {
                if (txtAltura.Text != ""){foreach (char c in txtAltura.Text.ToCharArray()) txtAltura_KeyPress(sender, new KeyPressEventArgs(c));}
            }

それが良くなることを願っています。

前もって感謝します..

4

3 に答える 3

1

私が理解していることから、イベントハンドラーを複数のテキストボックスコントロールに割り当てる方法を見つけようとしており、それぞれのハンドラーを書きたくない. その場合は、これを試してください:

private void Form1_Load(object sender, EventArgs e)
{
    foreach (TextBox textBox in this.Controls.OfType<TextBox>())
    {
        textBox.KeyDown += new KeyEventHandler(textBox_KeyDown);
    }
}

void textBox_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyCode == Keys.Enter)
   {
      e.Handled = true;
      SendKeys.Send("{TAB}");
   }
}

これにより、フォーム上の各テキスト ボックス コントロールにハンドラーが割り当てられます。

于 2013-04-12T04:17:35.647 に答える
0

それは完全にうまくいきました。

また、各テキストボックスでこれを繰り返して、すべてのコードが入力されているかどうかを確認し、ステータスバーを更新する必要があります。

        private void txtAltura_TextChanged(object sender, EventArgs e)
        {
            testePreenchidoecalculo();
        }

        private void txtLargura_TextChanged(object sender, EventArgs e)
        {
            testePreenchidoecalculo();
        }

        private void txtProfundidade_TextChanged(object sender, EventArgs e)
        {
            testePreenchidoecalculo();
        }

それをより良くすることは可能ですか?

于 2013-04-12T18:14:38.423 に答える