如题。
1.用GetCaretPos和GetCharIndexFromPosition函数试了下,发现对文件的末尾元素的处理还有点问题,如:
“123”当光标停在“2”的后面,显示“行:1 列:3”,但当光标在“3”的后面却显示“行:1 列:3”(实际是“行1列4”)
因为对于这种情况GetCharIndexFromPosition返回的都是最后一个字符的索引。2. 我将光标所在行写在状态栏中,应该是什么事件激发状态栏的写入呢,这里我用的是keyup,感觉不太好。而且我只判断了键盘上的上下左右(鼠标左键也可以),但总觉不妥。先谢谢各位了! private void richTextBoxEdit_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
int X, Y;
int pos;
Point p = new Point(0);
GetCaretPos(ref p);
pos = richTextBoxEdit.GetCharIndexFromPosition(p);//光标右侧的字符
X = richTextBoxEdit.GetLineFromCharIndex(pos); //若不是第一行
if (X > 0)
{
int offset = 1;
while (richTextBoxEdit.Text[pos - offset] != '\n')
offset++;
Y = offset;
X++;
}
else
{
X = 1;
Y = pos + 1;
} toolStripStatusLabel4.Text = "行:" + X.ToString() + "列:" + Y.ToString();
}
}
1.用GetCaretPos和GetCharIndexFromPosition函数试了下,发现对文件的末尾元素的处理还有点问题,如:
“123”当光标停在“2”的后面,显示“行:1 列:3”,但当光标在“3”的后面却显示“行:1 列:3”(实际是“行1列4”)
因为对于这种情况GetCharIndexFromPosition返回的都是最后一个字符的索引。2. 我将光标所在行写在状态栏中,应该是什么事件激发状态栏的写入呢,这里我用的是keyup,感觉不太好。而且我只判断了键盘上的上下左右(鼠标左键也可以),但总觉不妥。先谢谢各位了! private void richTextBoxEdit_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
int X, Y;
int pos;
Point p = new Point(0);
GetCaretPos(ref p);
pos = richTextBoxEdit.GetCharIndexFromPosition(p);//光标右侧的字符
X = richTextBoxEdit.GetLineFromCharIndex(pos); //若不是第一行
if (X > 0)
{
int offset = 1;
while (richTextBoxEdit.Text[pos - offset] != '\n')
offset++;
Y = offset;
X++;
}
else
{
X = 1;
Y = pos + 1;
} toolStripStatusLabel4.Text = "行:" + X.ToString() + "列:" + Y.ToString();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货