2016-08-09 4 views
-1

Ich versuche, einen sehr einfachen Text/Code-Editor mit einer TextBox zu erstellen, und ich möchte den Einzug aus der letzten Zeile eingegeben werden. Also brauche ich eine Möglichkeit, den Einzug von der letzten Zeile bis zu dieser Zeile zu übertragen. Ich habe this answer betrachtet, aber das scheint es nicht zu schneiden. Ich habe es versucht:Wie erhalten Sie eine Autoindent in einer WinForm TextBox (oder 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); 
    } 
} 

Aber das, aus irgendeinem Grund, Typen vier Leerzeichen dann Typen eingeben. Bin ich mit dem obigen Beispiel auf dem richtigen Weg?

Danke für die Antworten.

+4

Willkommen bei SO. SO ist kein Kodierungsdienst. Bitte umrahmen Sie Ihre Frage und zeigen Sie, was Sie erforscht haben und was Sie bisher versucht haben? und werfen Sie einen Blick auf [wie man eine gute Frage stellt] (http://stackoverflow.com/help/how-to-ask) –

+0

Sie können sich http://stackoverflow.com/questions/20217407/auto ansehen -indent-when-a-new-line-is-made – user319785

+0

Was ist die Frage? Wie übertrage ich statt der festen 4 eine variable Anzahl von Leerzeichen? Nun, Sie müssen die Leerzeichen am Anfang der letzten Zeile zählen. Es gibt viele hilfreiche Funktionen, um die Zeilennummern, Zeichenpositionen usw. in einer Richtextbox zu erhalten. – TaW

Antwort

0

Verstanden. Ich muss der ProcessCmdKey() -Methode nur eine if-Anweisung hinzufügen:

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

Wie funktioniert das, ohne den richtigen Wert für 'Leerzeichen' zu berechnen? – TaW

Verwandte Themen