Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从多行文本框移动到下一个文本框_C# - Fatal编程技术网

C# 如何从多行文本框移动到下一个文本框

C# 如何从多行文本框移动到下一个文本框,c#,C#,我有一个程序,将光标向上/向下移动到非多行文本框中的下一个文本框 当使用多行文本框中的向下键时,光标移动到下一个文本框,但按向上键idem时,光标不会聚焦到下一个文本框。使用enter键,它将从多行移动到下一个文本框并聚焦 原因可能是什么 我有8个文本框,它们用从0到7的标记属性分组。TxtboxNbrLimit设置为8 private void textBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyC

我有一个程序,将光标向上/向下移动到非多行文本框中的下一个文本框

当使用多行文本框中的向下键时,光标移动到下一个文本框,但按向上键idem时,光标不会聚焦到下一个文本框。使用enter键,它将从多行移动到下一个文本框并聚焦

原因可能是什么

我有8个文本框,它们用从0到7的标记属性分组。TxtboxNbrLimit设置为8

    private void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Down)
        {
            if (KeyIndex < TxtboxNbrLimit)
                ++KeyIndex;
            if (KeyIndex == TxtboxNbrLimit)
            {
                SaveBtn.Select();
                return;
            }
            if (_textBox[KeyIndex].Text != "")
                ChangeDone = true;
            _textBox[KeyIndex].SelectionStart = 0;
            _textBox[KeyIndex].SelectionLength = _textBox[KeyIndex].Text.Length;
            _textBox[KeyIndex].Select();
            _textBox[KeyIndex].Focus(); 
        }
        else
        {
            if (e.KeyCode == Keys.Up)
            {
                if (KeyIndex > 0)
                    --KeyIndex;
               _textBox[KeyIndex].SelectionStart = 0; 
               _textBox[KeyIndex].SelectionLength = _textBox[KeyIndex].Text.Length;
               _textBox[KeyIndex].Select();
               _textBox[KeyIndex].Focus(); 
            }
        }
    }
private void textBox\u KeyDown(对象发送者,KeyEventArgs e)
{
如果(e.KeyCode==Keys.Enter | | e.KeyCode==Keys.Down)
{
如果(键索引0)
--关键词索引;
_文本框[KeyIndex]。SelectionStart=0;
_textBox[KeyIndex]。SelectionLength=\u textBox[KeyIndex]。Text.Length;
_文本框[KeyIndex]。选择();
_textBox[KeyIndex].Focus();
}
}
}

尝试将逻辑移到向上键事件,而不是向下键。这将很好,经过测试

也许多行文本框内部有某种事件处理程序来处理键盘上下键按下事件,以便在文本行之间移动光标。因此,您的代码工作将被该内部行为覆盖


如果你把它放在钥匙打开事件中,相反的事情发生了。您的代码逻辑将覆盖TextBox内部行为的影响。因此,如果文本框包含多行文本,光标将移动到下一个/上一个文本框,而不是在多行文本框内的文本行之间移动。

我假设我们讨论的是winform(我在winform中进行了测试)是的,根据您的建议,我正在使用WFA。我已将属性表单keydown更改为keydup。现在,光标通过此函数传递2次,并在多行文本框中不停止跳转到下一个。我正在使用其他属性在多行文本框中停止它。如果有效的话,我会返回给你。也许这个方法除了向上键外,还附加在向下键事件上,所以它会执行两次?只是为了确定它不是,我检查过了。只有一个属性被指定为其KeyUp属性传递2次。我用F11进行了调试,在这个过程中它转了两次。现在我正在比较它的属性和其他文本框,并测试它。它正在工作!上一个和下一个texbox仍然具有keydown属性,这就是为什么它在过程中传递了两次。在您的建议下,我更改为keyup属性,仅显示多行。我不得不改变一切。