2012-06-11 2 views
1

저는 현재 .NET4 Windows Forms 응용 프로그램에 있습니다.캐럿/커서 위치 가져 오기 및 특정 지점에서 유지

저는 인텔리 센스와 같은 것을 만들려고 노력하고 있지만 매우 기본적인 것입니다.

사용자가 RichTextBox에 초점을 맞추고 Search과 같이 입력하면됩니다. 이 특정 구 다음에 나는 이렇게 '자동 채우기'를 원합니다 : Search "" 그리고 ""사이에 캐럿을 넣으십시오.

사용자가 캐럿를 입력하면 ""이런 사이에 남아 계속 그런 식으로 :

Search "[usertypinghere][caretposition]"

내가 말할 것도 방법, caret의 현재의 위치를하는 방법을 잘 모르겠어요 그것을 거기에서 지키십시오.

답변

1

그것은 기쁨은 그렇게 당신이 TextBox, RichTextBox, MaskedTextBox, 심지어의 다른 사용자 지정 유도체에있을 수 있습니다 TextBoxBase의 일부입니다 SelectionStart입니다. TextChanged 이벤트를 구독하여 '검색'을 시청 한 다음 자동 완성 후에 SelectionStart을 입력 한 다음 SelectionStart의 수신을 차단하기 위해 SelectionChangedEvent에 가입하십시오.

아, 키워드가 여러 개인 경우 해당 키워드를 DictionaryTuples 종류와 결합하여 메소드를 일반화해야합니다.

EDIT 내 테스트 코드. 깜박임이 없으며 무시 무시한 제어 기능이 없습니다. 그냥 평범한 이벤트 구독자

private void richTextBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text == "Search") 
     { 
      richTextBox1.Text = "Search \"\""; 
      richTextBox1.SelectionStart = richTextBox1.TextLength - 1; 
     } 

    } 

    private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
    { 
     if (richTextBox1.Text.StartsWith("Search \"") && richTextBox1.Text.EndsWith("\"")) 
     { 
      if (richTextBox1.SelectionStart > richTextBox1.TextLength - 1) 
      { 
       richTextBox1.SelectionStart = richTextBox1.TextLength - 1; 
      } 
      if (richTextBox1.SelectionStart <= "Search \"".Length) 
      { 
       richTextBox1.SelectionStart = "Search\"".Length+1; 
      } 
     } 
    } 
+0

이것은 내가 그것을 사용하고자하는 것에 완벽합니다. 감사! – James