我有一个两行的文本框,当我写完它时,按Enter键将字符串发送到LCD设备。 因为我按Enter键完成操作,所以光标将移至第二行。 按下Enter键后,如何将他的位置设置为第一行?
我解释第二行的目的。 LCD包含2行到16个字符。我将文本框的最大长度设置为32(16X2),并且还设置了文本框的大小,因此我将有2行,每行16个字符(不按Enter便向下移动到第二行)。但是,在按Enter键并将字符串发送到LCD之后,光标总是移至第二行的开头。
希望现在更加清楚。
我现在看到的另一件事:正如我所说,我将文本框的最大长度设置为32。在第一次输入字符串并将其发送时,没有问题,但是在第二次,它只允许我写30个字符。
我正在使用WinForms,c#。
谢谢!
答案 0 :(得分:1)
我的方法是不要让光标进入第二行(该行的目的是什么?)
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
(sender as TextBox).SelectionStart = 0;
e.SuppressKeyPress = true;
}
}
答案 1 :(得分:0)
您可以使用TextBoxBase.GetFirstCharIndexFromLine
将光标设置到特定行。
答案 2 :(得分:-1)
要获取鼠标在文本框中的当前位置,可以将MouseMove侦听器添加到文本框中。然后从MouseEventArgs对象获取位置。示例:
private void textBox1_MouseMove(object sender, MouseEventArgs e)
{
// display in label1
label1.Text = String.Format("X: {0} Y: {1}", e.Location.X, e.Location.Y);
// e.Location returns the cursor location on the object
}
答案 3 :(得分:-1)
使用文本框的SelectionStart属性设置文本插入点的位置(称为插入符号;将其称为光标可能会导致鼠标指针混乱)。将SelectionLength属性设置为0,否则最终将突出显示字符。插入点将以“开始+长度”结束
SELECT to_timestamp('20190608070000', 'YYYYMMDDHH24MISS') :: timestamp
AT time zone 'UTC';
timezone
------------------------
2019-06-08 09:00:00+02
(1 row)
要将插入记号移至文本框的第一行,请将SelectionStart设置为第一行之前的数字。如果您的文本框包含10个字符,则换行符,将索引设置为0到9之间的任何位置,都应将其放在第一行
请记住,只有在焦点对准时,文本框才会显示闪烁的插入符号
如果您希望提供LCD 2线屏幕的UI表示,则最好将其建模为两个无边框的单行文本框,最大长度取决于您的LCD支持的宽度以及固定宽度的字体(例如courier) 。如果在第一个文本框具有焦点的情况下按Enter键,则可以附加事件处理程序来执行诸如对第二个文本框聚焦的操作。