Попытка использования classа C # SpellCheck

Я пытаюсь использовать class SpellCheck classа C # (в PresentationFramework.dll). Но, я испытываю проблемы при попытке связать правописание с моим текстовым полем:

SpellCheck.SetIsEnabled(txtWhatever, true); 

Проблема в том, что мой txtWhatever имеет тип System.Windows.Forms и параметр, который ищет эта функция, это System.Windows.Controls и простое преобразование не удалось. Я также попытался создать свой TextBox этого типа, но … не смог. Кто-нибудь знает, как использовать этот объект проверки орфографии? (MSDN не помогло …)

благодаря

    Вы должны использовать текстовый блок WPF для проверки орфографии. Вы можете встроить его в форму Windows Forms с помощью элемента управления ElementHost. Он очень похож на UserControl. Вот элемент управления, который вы можете удалить прямо из панели инструментов. Для начала вам нужна Project + Add Reference и выберите WindowsFormsIntegration, System.Design и сборки WPF PresentationCore, PresentationFramework и WindowsBase.

    Добавьте новый class в свой проект и вставьте код, показанный ниже. Компиляция. Переместите элемент управления SpellBox из верхней части панели инструментов в форму. Он поддерживает события TextChanged и свойства Multiline и WordWrap. В Font есть проблема с nagging, нет простого способа сопоставить шрифт WF с свойствами шрифта WPF. Простейшим обходным решением для этого является установка шрифта формы на «Segoe UI», по умолчанию для WPF.

     using System; using System.ComponentModel; using System.ComponentModel.Design.Serialization; using System.Windows; using System.Windows.Controls; using System.Windows.Forms.Integration; using System.Windows.Forms.Design; [Designer(typeof(ControlDesigner))] //[DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] class SpellBox : ElementHost { public SpellBox() { box = new TextBox(); base.Child = box; box.TextChanged += (s, e) => OnTextChanged(EventArgs.Empty); box.SpellCheck.IsEnabled = true; box.VerticalScrollBarVisibility = ScrollBarVisibility.Auto; this.Size = new System.Drawing.Size(100, 20); } public override string Text { get { return box.Text; } set { box.Text = value; } } [DefaultValue(false)] public bool Multiline { get { return box.AcceptsReturn; } set { box.AcceptsReturn = value; } } [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 !! */ } } private TextBox box; } 

    По популярности, версия VB.NET этого кода, которая позволяет избежать lambda:

     Imports System Imports System.ComponentModel Imports System.ComponentModel.Design.Serialization Imports System.Windows Imports System.Windows.Controls Imports System.Windows.Forms.Integration Imports System.Windows.Forms.Design  _ Class SpellBox Inherits ElementHost Public Sub New() box = New TextBox() MyBase.Child = box AddHandler box.TextChanged, AddressOf box_TextChanged box.SpellCheck.IsEnabled = True box.VerticalScrollBarVisibility = ScrollBarVisibility.Auto Me.Size = New System.Drawing.Size(100, 20) End Sub Private Sub box_TextChanged(ByVal sender As Object, ByVal e As EventArgs) OnTextChanged(EventArgs.Empty) End Sub Public Overrides Property Text() As String Get Return box.Text End Get Set(ByVal value As String) box.Text = value End Set End Property  _ Public Property MultiLine() As Boolean Get Return box.AcceptsReturn End Get Set(ByVal value As Boolean) box.AcceptsReturn = value End Set End Property  _ Public Property WordWrap() As Boolean Get Return box.TextWrapping <> TextWrapping.NoWrap End Get Set(ByVal value As Boolean) If value Then box.TextWrapping = TextWrapping.Wrap Else box.TextWrapping = TextWrapping.NoWrap End If End Set End Property  _ Public Shadows Property Child() As System.Windows.UIElement Get Return MyBase.Child End Get Set(ByVal value As System.Windows.UIElement) '' Do nothing to solve a problem with the serializer !! End Set End Property Private box As TextBox End Class 

    Вы пробовали просто установить свойство на фактическом TextBox, пытающемся выполнить проверку орфографии. например

     txtWhatever.SpellCheck.IsEnabled = true; 

    Вы пытаетесь использовать компонент проверки орфографии, предназначенный для WPF в приложении WinForms. Они несовместимы.

    Если вы хотите использовать установленную .NET проверку орфографии, вам придется использовать WPF в качестве системы виджетов.

    Если вы хотите придерживаться WinForms, вам понадобится сторонний компонент проверки правописания.

    Бесплатный инструмент проверки орфографии .NET, основанный на текстовом поле WPF, который можно использовать на стороне клиента или сервера, можно увидеть здесь . Он будет обертывать текстовое поле для вас, хотя вам все еще нужно, чтобы assembly включала в frameworks презентации и т. Д.

    Полное раскрытие … написанное по-настоящему

    Мне нужно было добавить цвет фона в текстовое поле в winforms, отражающее цвет, выбранный в дизайнере:

     public override System.Drawing.Color BackColor { get { if (box == null) { return Color.White; } System.Windows.Media.Brush br = box.Background; byte a = ((System.Windows.Media.SolidColorBrush)(br)).Color.A; byte g = ((System.Windows.Media.SolidColorBrush)(br)).Color.G; byte r = ((System.Windows.Media.SolidColorBrush)(br)).Color.R; byte b = ((System.Windows.Media.SolidColorBrush)(br)).Color.B; return System.Drawing.Color.FromArgb((int)a, (int)r, (int)g, (int)b); } set { box.Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Color.FromArgb(value.A, value.R, value.G, value.B)); } } 

    как получить список слов на английском языке и скопировать его в текстовый файл. добавьте ссылку. затем используйте class streamreader для анализа списка с помощью textbox.text. любые слова, не найденные в текстовом файле, могут быть выделены или отображены в диалоговом окне с параметрами для замены или игнорирования. это предложение дробовика со многими пропущенными шагами, и я 2 месяца в программировании, но … его то, что я собираюсь сделать в любом случае. Я делаю проект блокнота (rexpad на idreamincode.com). надеюсь, это помогло!

    Давайте будем гением компьютера.