我有一个文本框,对于那个文本框,我必须从虚拟键盘发送值。 我发送像
txtNumber.Text = txtNumber.Text.Insert(txtNumber.CaretIndex, ((Button)sender).Content.ToString());
txtNumber.CaretIndex += txtNumber.Text.Length;
txtNumber.focus();
问题是用户在键入某个字符后强行将光标放在文本之间,然后按键意味着第一次正确插入值,然后光标需要在那里。
上面的逻辑使它最终保持光标位置。
如何实现这一目标?
答案 0 :(得分:0)
如果我理解这个问题,我会将字符串保存在缓冲区字符串变量中,并根据虚拟kb输入进行更改。完成此操作后,请通过txtNumber.Text = bufferedString;
更新TextBox值答案 1 :(得分: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, "_");
}
答案 2 :(得分:0)
尝试这样做txtNumber.Text +=// your code..
并尝试将txtNumber.focus();
这一行放在开头。
答案 3 :(得分: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