2016-08-09 12 views
-1

私はTextBoxを使用して非常に単純なテキスト/コードエディタを構築しようとしています。最後の行をインデントしたままにしておきたいと思います。ですから、最後の行からこの行にインデントを引き継ぐ方法が必要です。私はthis answerを見ましたが、それはそれをカットしていないようです。その後、タイプ4つのスペースを入力するタイプ、何らかの理由で、それをwinformでオートインデントを取得する方法TextBox(またはRichTextBox)C#?

class SpaceBox : TextBox 
{ 
    public static int spaces = 4; 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Tab) 
     { 
      this.SelectionLength = 0; 
      this.SelectedText = new string(' ', spaces); 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     //base.OnKeyDown(e); 
     if (e.KeyCode == Keys.Enter) 
     { 
      this.Text += "\n"; 
      this.Text += new string(' ', spaces); 
      this.SelectionStart = this.Text.Length; 
      return; 
     } 

     base.OnKeyDown(e); 
    } 
} 

しかし:私はこれを試してみました。上の例で正しい軌道にいますか?

お返事ありがとうございます。

+4

ようこそ。 SOはコーディングサービスではありません。あなたの質問を再構成して、あなたの研究は何であり、これまでに何を試みましたかを示してください。 [良い質問をする方法]を見てください。(http://stackoverflow.com/help/how-to-ask) –

+0

http://stackoverflow.com/questions/20217407/auto -ind-a-new-line-made-made – user319785

+0

何が問題なのですか?固定4の代わりに可変数のスペースを引き継ぐには?あなたは最後の行の先頭にあるスペースを数える必要があります。リッチテキストボックス内の行番号、文字位置などを取得するための多くの便利な機能があります。 – TaW

答えて

0

次のようにif文をProcessCmdKey()メソッドに追加するだけです。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 

     if (keyData == Keys.Tab) 
     { 
      this.SelectionLength = 0; 
      this.SelectedText = new string(' ', spaces); 
      return true; 
     } 

     if (keyData == Keys.Enter) 
     { 
      this.AppendText(new string('\n', 1)); 
      this.AppendText(new string(' ', spaces)); 

      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
+0

これは 'spaces 'の正しい値を計算することなくどのように動作しますか? – TaW

関連する問題