我正在编写一个按音节输入单词的程序。逻辑是,用户正在输入短语的一部分(音节),如果正确,它会亮起绿色并在末尾添加连字符,以便用户可以继续输入单词。我需要禁止连字符之前的每个用户输入,这样他在写出正确的音节后就无法后退。但我正在努力解决这部分问题。我尝试过的:
private void rtbEnterWord_KeyDown(object sender, KeyEventArgs e)
{
if (rtbEnterWord.SelectionStart <= this.lastHyphen && e.KeyCode == Keys.Left)
{
rtbEnterWord.SelectionStart = this.lastHyphen;
e.Handled = true;
}
}
private void rtbEnterWord_KeyPress(object sender, KeyPressEventArgs e)
{
if (rtbEnterWord.SelectionStart <= this.lastHyphen)
{
e.Handled = true;
}
}
还有另一种变体:
private void rtbEnterWord_TextChanged(object sender, EventArgs e)
{
if (rtbEnterWord.TextLength <= certainPosition)
{
rtbEnterWord.Text = rtbEnterWord.Text.Remove(0, certainPosition);
rtbEnterWord.SelectionStart = rtbEnterWord.Text.Length;
}
}
两者都不起作用。我需要实现的是,连字符将成为字符串的 -1 元素(如果你可以这样说),因此输入将仅在该连字符符号之后,之前的所有其他内容都将被完全忽略,就像它不存在一样。 这听起来像是一项简单的任务,但我想不出任何像样的解决方案。
这是我在阅读手册后得出的结论。代码按预期工作,不允许用户将光标移动到给定位置的左侧。另外,不要忘记向控制元素添加事件,在我的例子中是 RichTextBox1(在表单设计器中)
private void rtbEnterWord_MouseDown(object sender, MouseEventArgs e)
{
int positionToSet = this.lastEnterCharPos;
rtbEnterWord.SelectionStart = positionToSet;
rtbEnterWord.SelectionLength = 0;
}
private void rtbEnterWord_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Back)
{
if (rtbEnterWord.SelectionStart <= this.lastEnterCharPos)
{
e.SuppressKeyPress = true;
}
}
if (rtbEnterWord.SelectionStart <= this.lastEnterCharPos && e.KeyCode == Keys.Left )
{
e.SuppressKeyPress = true;
}
}