2011-07-23 24 views
1

可能性の重複:
RichTextBox C# Set caret location winformsのC#、Y位置

私が持っている端末(TN3270)インタフェースから読んでいたプロジェクトに取り組んでいキャレットの位置はX、Yと表示され、フルターミナルインターフェイスを表示している私のrichtextboxに渡したいものです。私はGoogleの複数の方法で探してみましたが、私が見つけることができるように見えるのは、richtextboxのキャレットのx、yの位置を取得する方法です。

私は

private void SetCaretLocation(iX,iY); 

ことができる機能を持って探しています:EDIT:

private void SetCaretPos(int iX,int iY) 
    { 
     int iLen = 0; 
     int iRow = 0; 
     foreach (string str in richTextBox1.lines) 
     { 
      iRow++; 
      iLen += str.Length; 
      if (iRow == iX) 
       break; 
     } 
     iLen += iY; 

     richTextBox1.SelectionStart = iLen; 
    } 

私はいくつかのものを近くになっているようです。しかし、ポジションは正しく一致していないようです。

+0

行区切り記号とは何ですか? NewLine? – NoviceProgrammer

+0

\ nは新しい改行文字にする必要があります。 – CitizenStile

+0

ジョシェンドの賞賛に関しては、これは全く同じ問題ではありません。その答えは最初のポジショニングでした。私はテキストの途中でどこかに位置づけたいと思っています。 – CitizenStile

答えて

0

SelectionStartメソッドを確認してください RichTextBoxコントロールのSelectionStartプロパティを使用して、テキストボックスで選択したテキストの開始点を取得または設定できます。

http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.aspx

のコード例はここにある:

http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectionstart.aspx

+0

私は何を考えていたのか(正しい答えはこれまでのところ)正しい軌道上にある程度。私は何がうまくいくか考えています。私はこれといくつかのことで遊んで、私が思いつくことができるものを見ていきます。 – CitizenStile

1

私は、これは、それが行われるべきかであるかどうかわからないのですが、その1つの方法:

private void SetCaretPosition(int rows, int col) 
{ 
    int curPos = 0; 
    if (richTextBox1.Lines.Length >= rows) 
    {  
     for (int i = 0; i < rows - 1; ++i) 
     { 
      curPos += richTextBox1.Lines[i].Length + 1; //add 1 for the newline character 
     } 
     richTextBox1.SelectionStart = curPos + col; 
    } 
    else 
     richTextBox1.SelectionStart = richTextBox1.TextLength; 
    richTextBox1.ScrollToCaret();    
} 

編集:

私はあなたもposを知っていませんでした編集しました。改行文字を考慮する必要があります。 1の場合は\ n、2の場合は\ r \ n

関連する問題