Laden...

TextBox: Text an aktueller Cursor-Pos ausgeben

Erstellt von Maddinel vor 20 Jahren Letzter Beitrag vor 14 Jahren 8.630 Views
Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 20 Jahren
TextBox: Text an aktueller Cursor-Pos ausgeben

Moin!

Wie kann ich in C#, in einer TextBox(Multiline=true) an der aktuellen Cursorposition beispielsweise per Knopfdruck einen bestimmten Text einfügen?

Danke schonmal an alle die sich die Mühe machen.

Maddin

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Wie meinst du das mit dem Einfügen? Soll er das was im Zwischenablage liegt dort reinkopieren oder einen Text aus einer Variablen?

Also wenn es Text aus der Zwischenablage sein soll dann musst du die Paste-Methode benutzen:
Aus der MSDN:

Ersetzt die aktuelle Markierung im Textfeld durch den Inhalt der Zwischenablage.

Hinweise:
Die Paste-Methode fügt nur Text in das Steuerelement ein, wenn in der Zwischenablage Text gespeichert ist. Beim Schließen der Anwendung wird der in der Zwischenablage gespeicherte Text entfernt.

Methodendeklaration:

[C#]
public void Paste();

Dazu das MSDN-Beispiel:

Beispiel
[Visual Basic, C#] Im folgenden Beispiel wird die abgeleitete Klasse TextBox verwendet. Diese stellt Click-Ereignishandler für MenuItem-Objekte bereit, die zum Ausschneiden, Kopieren, Einfügen und Rückgängigmachen verwendet werden. In diesem Beispiel wird davon ausgegangen, dass ein TextBox-Steuerelement mit dem Namen textBox1 erstellt wurde.

[C#] 
private void Menu_Copy(System.Object sender, System.EventArgs e)
 {
    // Ensure that text is selected in the text box.   
    if(textBox1.SelectionLength > 0)
        // Copy the selected text to the Clipboard.
        textBox1.Copy();
 }
 
 private void Menu_Cut(System.Object sender, System.EventArgs e)
 {   
     // Ensure that text is currently selected in the text box.   
     if(textBox1.SelectedText != "")
        // Cut the selected text in the control and paste it into the Clipboard.
        textBox1.Cut();
 }
 
 private void Menu_Paste(System.Object sender, System.EventArgs e)
 {
    // Determine if there is any text in the Clipboard to paste into the text box.
    if(Clipboard.GetDataObject().GetDataPresent(DataFormats.Text) == true)
    {
        // Determine if any text is selected in the text box.
        if(textBox1.SelectionLength > 0)
        {
          // Ask user if they want to paste over currently selected text.
          if(MessageBox.Show("Do you want to paste over current selection?", "Cut Example", MessageBoxButtons.YesNo) == DialogResult.No)
             // Move selection to the point after the current selection and paste.
             textBox1.SelectionStart = textBox1.SelectionStart + textBox1.SelectionLength;
        }
        // Paste current text in Clipboard into text box.
        textBox1.Paste();
    }
 }

EDIT:
Den Text habe ich in der MSDN mit der Suche "TextBox Text Einfügen" gefunden. Zumindest in der Lokalen MSDN, in der im Internet habe ich nicht geguckt, findest aber ne ganze Menge, auch andere nützliche Sachen.

Code-Hacker

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Achja, wenns der Text aus einer Variablen sein soll, dann liest du einfach den Text aus der TB, ermittelst die Cursor-Position und fügst an der Stelle mit Stringoperation den gewünschten Text an der Stelle ein und weißt ihn der TB zu.

Code-Hacker

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 20 Jahren

Erstmal danke für die Antwort, aber das war nicht gemeint.
Was dort eingefügt wird spiel eigendlich keine große Rolle. Es soll beispielsweise aus einer Variablen sein,aber darum geht es mir ja nicht. Ich will nur wissen, wie mann beispielsweise den Inhalt einer string Variablen an eine bestimmte Stelle in der Textbox schreiben kann ohne den bereits in der Textbox vorhandenen Text zu löschen. Der Variableninhalt soll beispielsweise per Knopfdruck an die aktuelle Cursorposition geschrieben werden und nicht standartmäßig oben links.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Wie eben in meinem 2. Beitrag geschrieben machst du das einfach per Stringoperationen. Du musst dir dazu über die Text-Eigenschaft den Text holen, die CursorPosition ermitteln (dazu gibt es glaube ich auch ne Eigenschaft oder Methode) und dann mit String.Insert (meine ich) den Text einfach an die Stelle die du ermittelt hast einfügen und der TB per operator = zuweisen. Dann steht der gwünschte Text in deiner TextBox.

Code-Hacker

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 20 Jahren

hmm das klappt so noch nicht.
Mein aktuelles Problem ist jetzt, wie kann ich die aktuelle Cursorposition in der textBox bestimmen.
Wer kann mir helfen?

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Dazu solltest du mal in der MSDN suchen, wie man in einer TextBox die Prosition des Cursors findet.
Danach kannst du per Stringoperation so vorgehen wie ich bereits sagte.

Code-Hacker

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Die Funktion zur Bestimmung des Caret (nicht Cursor, das wäre der Mauszeiger) ist SelectionStart. Also die RTB hat diese zumindest. Du kannst notfalls ja auch die benutzen, damit kannst du auch ganz normalen Text öffnen, so:

richTextBoxEditor.LoadFile(filePath, RichTextBoxStreamType.PlainText);

Das Gegenstück wäre SaveFile. RichTextBoxStreamType.PlainText gibt an in welchem Format die Datei geöffnet/gespeichert werden soll. PlainText ist ganz normaler Text.

Code-Hacker

V
842 Beiträge seit 2003
vor 20 Jahren

Hi!

Thread von "Allgemeine Fragen" verschoben nach "Windows Forms".

Code-Hacker

S
28 Beiträge seit 2006
vor 18 Jahren

Hi Leute,

um die Cursor Position in einer Textbox zu bestimmen probier einfach mal meinen Beispiel Code aus. Mit textBox1.SelectionStart bekommst du den Wert an wievielter Zeichenstelle sich dein Cursor gerade befindet.

mfG
Der Schneemann


private void textBox1_Click(object sender, EventArgs e)
	{
		int txtCursorPosition = textBox1.SelectionStart;
		textBox2.Text = txtCursorPosition.ToString();	
	}

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." - Albert Einstein

23 Beiträge seit 2009
vor 14 Jahren

Hallo,

der Beitrag ist zwar schon alt, aber ich möchte trotzdem noch etwas dazu posten.

Ich hatte das selbe Problem wie du, Maddinel, denke ich:

Ich habe eine Textbox, in der beispielsweise schon ein string enthalten ist. Nun setzt ich den Curser, bzw. das Caret um korrekt zu bleiben, irgendwo zwischen zwei Buchstaben des strings, oder er befinde sich am Ende, spielt keine Rolle.
Auf das Ereignis eines Button Clicks soll nun an der Stelle ein Sonderzeichen eingeführt werden. Ich habe das so gelöst:


private void åSmall_Button_Click(object sender, EventArgs e)
        {
            this.Userinput_TextBox.SelectedText = "å";
            this.Userinput_TextBox.Focus();
            //this.Userinput_TextBox.SelectionLength = 0;
        }

Beachte das auskommentierte vorerst nicht.

Die Lösung klappt (fast immer) wunderbar. Warum fast immer?

Ich habe ab und zu die Kuriosität, dass nach dem Click der gesamte string innerhalb der Textbox markiert ist. Warum und wovon das abhängt kann ich nicht sagen.
Aus diesem Grund habe ich es mit dem dritten Befehl, also diesen auskommentiert versucht. Ähnliches Ergebnis:

Klappt auch (fast) immer wie gewünscht. Nur wird hier, statt ab und an der ganze string markiert, das Caret an die Anfangsposition des strings gesetzt.

Ich kann zwar damit leben, aber ist einerseits ein wenig Nervenaufreibend, andererseits wäre es gut zu wissen, was in den unerwünschten Fällen passiert, bzw. warum das passiert.

Falls jemand ähnliche Erfahrungen gemacht hat, oder des Rätsels Lösung kennt, bitte bescheid geben.

Gaahl