1

我有一个文本框,我必须从我设计的虚拟键盘发送值到那个文本框。我发送喜欢

txtNumber.Text = txtNumber.Text.Insert(txtNumber.CaretIndex, ((Button)sender).Content.ToString());
txtNumber.CaretIndex += txtNumber.Text.Length;
txtNumber.focus();

问题是当用户在输入某个字符后强行将光标放在文本之间时,然后按下键意味着第一次正确插入值并且该光标需要在那里。

上面的这个逻辑使它最终保持光标位置。

如何做到这一点?

4

4 回答 4

0

如果我理解这个问题,我会将正在修改的字符串保存在缓冲区字符串变量中,并根据虚拟 kb 输入进行更改。完成后,通过 txtNumber.Text = bufferedString; 更新 TextBox 值

于 2013-04-08T07:44:04.070 回答
0

使用此代码,我已经检查过:

        int CurrentIndex;
        private void textNumber_Click(object sender, EventArgs e)
        {
            CurrentIndex = textNumber.SelectionStart;
        }

        private void Key_Click(object sender, EventArgs e)
        {
            textNumber.Text = textNumber.Text.Insert(CurrentIndex, "_");
        }
于 2013-04-08T07:44:37.377 回答
0

尝试这样做txtNumber.Text +=// your code.. 并尝试txtNumber.focus();将此行放在开头。

于 2013-04-08T07:47:53.123 回答
0

有几种方法可以做到这一点。
当用户打算使用虚拟键盘时,
通过单击复选框或其他内容,您可以将文本框设为只读。
或者您可以在文本框CaretIndex的情况下设置lost focus
否则你可以简单地调用AppendText("nextsetofchars")方法
http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.appendtext.aspx

您还可以将 设置SelectionStart为丢失焦点事件中字符串的长度。 http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectionstart.aspx

于 2013-04-08T07:55:03.587 回答