禁止RichTextBox中的光标移动超过特定位置

问题描述 投票:0回答:1

我正在编写一个按音节输入单词的程序。逻辑是,用户正在输入短语的一部分(音节),如果正确,它会亮起绿色并在末尾添加连字符,以便用户可以继续输入单词。我需要禁止连字符之前的每个用户输入,这样他在写出正确的音节后就无法后退。但我正在努力解决这部分问题。我尝试过的:

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 元素(如果你可以这样说),因此输入将仅在该连字符符号之后,之前的所有其他内容都将被完全忽略,就像它不存在一样。 这听起来像是一项简单的任务,但我想不出任何像样的解决方案。

c# richtextbox windows-forms-designer
1个回答
0
投票

这是我在阅读手册后得出的结论。代码按预期工作,不允许用户将光标移动到给定位置的左侧。另外,不要忘记向控制元素添加事件,在我的例子中是 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;
       
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.