文本框中的光标位置

时间:2019-06-08 09:27:42

标签: c# winforms

我有一个两行的文本框,当我写完它时,按Enter键将字符串发送到LCD设备。 因为我按Enter键完成操作,所以光标将移至第二行。 按下Enter键后,如何将他的位置设置为第一行?

我解释第二行的目的。 LCD包含2行到16个字符。我将文本框的最大长度设置为32(16X2),并且还设置了文本框的大小,因此我将有2行,每行16个字符(不按Enter便向下移动到第二行)。但是,在按Enter键并将字符串发送到LCD之后,光标总是移至第二行的开头。

希望现在更加清楚。

我现在看到的另一件事:正如我所说,我将文本框的最大长度设置为32。在第一次输入字符串并将其发送时,没有问题,但是在第二次,它只允许我写30个字符。

我正在使用WinForms,c#。

谢谢!

4 个答案:

答案 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键,则可以附加事件处理程序来执行诸如对第二个文本框聚焦的操作。