24 Stimmen

.NET Rechtschreibprüfung Kontrolle?

Gibt es irgendwelche Bibliotheken (vorzugsweise ein eigenständiges Textbearbeitungs-Steuerelement) für .NET, die Rechtschreibprüfung Fähigkeiten haben. Ich möchte die typische rote Unterstreichung für falsch geschriebene Wörter im Bearbeitungsbereich meiner Anwendung hinzufügen.

Bearbeiten: Zur Klarstellung, dies ist für WinForms

0 Stimmen

Hier ist etwas für Sie nach Ihrem Bedarf. HTH.

4 Stimmen

War "falsch geschrieben" ironisch gemeint? :)

2voto

RapidSpell hat für mich gut funktioniert http://keyoti.com

2voto

Steve Punkte 31

****** Windows App - Sie können Ihr eigenes Textfeld-Steuerelement anpassen, keine Drittanbieter-Software erforderlich******

1 - Öffnen Sie zunächst die "Eigenschaften" Ihrer Anwendung im Projektmappen-Explorer. Vergewissern Sie sich auf der Registerkarte "Anwendung", dass "Ziel-Framework" auf ".Net Framework 4" eingestellt ist, NICHT auf ".Net Framework 4 Client Profile".

2 - Klicken Sie mit der rechten Maustaste auf Ihre Anwendung im Projektmappen-Explorer und wählen Sie "Verweis hinzufügen...". Wählen Sie die Registerkarte ".NET", halten Sie die Steuerungstaste gedrückt und wählen Sie "WindowsFormsIntegration", "System.Design", "PresentationCore"," PresentationFramework", "WindowsBase", "System.Xaml" und klicken Sie auf "OK".

3 - Klicken Sie mit der rechten Maustaste auf Ihre Anwendung im Projektmappen-Explorer und wählen Sie "Hinzufügen" -> "Klasse". Erstellen Sie eine neue Klasse, die Sie nach Belieben benennen können. Öffnen Sie den Code für die Klasse, die Sie gerade erstellt haben, und löschen Sie den Code, nicht die Datei.

4-Kopieren Sie den folgenden Code und fügen Sie ihn in die soeben erstellte Klassendatei ein.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms.Integration;
using System.Windows.Forms.Design;

[Designer(typeof(ControlDesigner))]
class SpellCheckTextbox: ElementHost
{
    private TextBox box;

    public SpellCheckTextbox()
    {
        box = new TextBox();
        base.Child = box;
        box.TextChanged += (sender, e) => OnTextChanged(EventArgs.Empty);
        box.SpellCheck.IsEnabled = true;
        box.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
        this.Size = new System.Drawing.Size(100, 200);
    }
    public override string Text
    {
        get { return box.Text; }
        set { box.Text = value; }
    }

    [DefaultValue(true)]
    public bool Multiline
    {
        get { return box.AcceptsReturn; }
        set { box.AcceptsReturn = value; }
    }

    [DefaultValue(false)]
    public bool ScrollBars
    {
        get 
        {
            if (box.VerticalScrollBarVisibility == ScrollBarVisibility.Visible ||
                box.HorizontalScrollBarVisibility == ScrollBarVisibility.Visible)
            {
                return true;
            }
            else 
            {
                return false;
            }

        }
        set 
        {
            if (value)
            {
                box.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
                box.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
            }
            else
            {
                box.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;
                box.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            }

        }
    }

    [DefaultValue(false)]
    public bool WordWrap
    {
        get { return box.TextWrapping != TextWrapping.NoWrap; }
        set { box.TextWrapping = value ? TextWrapping.Wrap : TextWrapping.NoWrap; }
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public new System.Windows.UIElement Child
    {
        get { return base.Child; }
        set { /* Do nothing to solve a problem with the serializer !! */ }
    }

}

5- Fünfter und letzter Schritt: Kompilieren Sie den Code und ziehen Sie das neue Steuerelement "SpellCheckTextbox", das sich in der Entwurfsansicht oben in der "Toolbox" befindet, auf Ihr Formular.

0 Stimmen

Ich kann Multiline nicht zum Laufen bringen, ohne dies in den Konstruktor einzufügen box.AcceptsTab = true; box.AcceptsReturn = true;

0 Stimmen

Scheint aber gut zu funktionieren! Danke fürs Teilen. Wie funktioniert es genau? Ist es Hosting ein WPF-Textfeld in einem Winforms-Formular?

0 Stimmen

Im Grunde ist es das, was sie tut,

1voto

Aran Mulholland Punkte 22956

Eine kostenlose .NET-Rechtschreibprüfung, die auf einem WPF-Textfeld basiert und sowohl client- als auch serverseitig verwendet werden kann, ist zu sehen aquí

Vollständige Offenlegung... geschrieben von mir selbst, natürlich mit etwas Hilfe von Stack Overflow :)

0 Stimmen

Der Code sieht gut aus, aber Ihre Komponente wird nicht in der ToolBox angezeigt, obwohl SpellCheckTextBox TextBox erweitert. Ich nehme an, dies ist eine XAML nur Komponente und ist nicht entworfen, um auf WinForms arbeiten?

0 Stimmen

Es handelt sich nicht um eine visuelle Komponente. Ich habe sie für den Einsatz auf einem Server geschrieben. Sie rufen sie mit dem Text auf, der auf Rechtschreibung geprüft werden soll, und sie gibt Ihnen die Position des Rechtschreibfehlers sowie Vorschläge zurück. Sie läuft unter Winforms, wenn Sie die richtigen Assembly-Referenzen hinzufügen. Im Grunde ist es ein Hack, der das WPF-Textfeld nutzt, um an die zugrunde liegende Rechtschreibprüfung zu gelangen. Das Textfeld erscheint nie auf dem Bildschirm.

0 Stimmen

Vielen Dank für die Klarstellung. Für die Methode und den Zweck, die Sie angeben, ist der Code gut, und es war ein Segen, etwas "sauber" für eine Änderung auf GitHub zu sehen. Wenn ich vorschlagen darf, könnten Sie in einem WinForms-Steuerelement Beispiel mit Redlining-Unterstützung ähnlich wie die gehostete Steuerung von Steve hinzufügen.

0voto

Rune Grimstad Punkte 34670

Infragistik hat eine Kontrolle der Rechtschreibprüfung die eine Rechtschreibprüfung für jedes Steuerelement durchführen kann. Ich habe es nicht selbst benutzt, aber Sie können eine kostenlose Testversion herunterladen.

0voto

John Punkte 28172

Component One bietet eine Komponente an, die dies tut, aber nur während Sie tippen. Ich benutze es und es ist sehr schnell.

Voir aquí für weitere Informationen

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