2 Stimmen

C# Überschreiben der RichTextBox Paste-Funktion - Win Form App

Ich möchte eine Rich Text Box-Steuerelement in meiner Windows Form-Anwendung anpassen. Die RichTextbox wird für die Eingabe von Textdaten verwendet, die nach Abschluss per SMS-Nachricht gesendet werden.

Die Anforderungen sind, dass der Text keine Zeilenumbrüche haben darf, da einige ältere Mobiltelefone die Informationen nicht korrekt anzeigen und das Format verlieren.

Was ich tun muss, ist die Zwischenablage-Daten abfangen, bevor sie in die RTB eingefügt werden, und das Format anpassen, z. B. Zeilenumbrüche entfernen.

Ich habe hier ein Beispiel gefunden, das dies teilweise ermöglicht, aber das Einfügen in andere Steuerelemente verhindert:

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

   if((keyData == (Keys.Control | Keys.V)))
   {
       IDataObject iData = Clipboard.GetDataObject();

       if (iData.GetDataPresent(DataFormats.Text))
       {
           string contents = Clipboard.GetText().Replace("\r\n", " ");
           Clipboard.SetData(DataFormats.Text, contents);
           richTextBox1.Paste();
       }
       return true;
   } 
   else 
   {
       return base.ProcessCmdKey(ref msg, keyData);
   }
}

Weiß jemand, wie ich das bitte machen sollte?

1voto

Andy Punkte 3432

Sie müssen von RichTextBox erben und die benutzerdefinierte Verarbeitung hinzufügen, wie Sie es selbst beschrieben haben; Sie können auch die Originaldaten zurück in die Zwischenablage setzen, um sie in anderen Steuerelementen einfügen zu können (im Originalformat):

public class CustomRTB:RichTextBox
    {
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {

            if ((keyData == (Keys.Control | Keys.V)))
            {
                IDataObject iData = Clipboard.GetDataObject();

                if (iData.GetDataPresent(DataFormats.Text))
                {
                    string contents = Clipboard.GetText();
                    // string newText = *Verarbeite den Text hier*
                    Clipboard.SetData(DataFormats.Text, newText);
                    this.Paste();
                    Clipboard.SetData(DataFormats.Text, contents);
                }
                return true;
            }
            else
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }
        }

    }

1voto

StaWho Punkte 2488

Versuchen Sie, den Text einzufangen, wenn er sich ändert, und Zeilenumbrüche zu entfernen:

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        RichTextBox box = (RichTextBox)sender;
        box.Text = box.Text.Replace(Environment.NewLine, string.Empty);
        box.Text = box.Text.Replace("\n", string.Empty);
        box.SelectionStart = box.TextLength;
        box.ScrollToCaret();
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X