试图使用C#SpellCheck类

我正在尝试使用C#提供的SpellCheck类(在PresentationFramework.dll中)。 但是,在尝试将拼写绑定到我的文本框时遇到了问题:

SpellCheck.SetIsEnabled(txtWhatever, true); 

问题是,我的TXT什么types的System.Windows.Forms和这个函数正在寻找的参数是System.Windows.Controls,简单的转换失败。 我也试图让我的这种types的文本框,但是…不能。 有谁知道如何使用这个SpellCheck对象? (MSDN不是那么有用…)

谢谢

您必须使用WPF文本框进行拼写检查工作。 您可以使用ElementHost控件将其embedded到Windows窗体中。 它和UserControl非常相似。 这里是一个可以直接从工具箱中删除的控件。 要开始,您需要Project + Add Reference,然后selectWindowsFormsIntegration,System.Design和WPF程序集PresentationCore,PresentationFramework和WindowsBase。

为您的项目添加一个新类,并粘贴下面显示的代码。 编译。 将工具箱顶部的SpellBox控件拖放到表单上。 它支持TextChanged事件和Multiline和WordWrap属性。 Font有一个烦人的问题,没有简单的方法将WF Font映射到WPF字体属性。 最简单的解决方法是将窗体的字体设置为WPF的默认值“Segoe UI”。

 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 <Designer(GetType(ControlDesigner))> _ 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 <DefaultValue(False)> _ Public Property MultiLine() As Boolean Get Return box.AcceptsReturn End Get Set(ByVal value As Boolean) box.AcceptsReturn = value End Set End Property <DefaultValue(False)> _ 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 <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _ 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 

你有没有尝试只是设置你试图拼写检查的实际文本框的属性。 例如

 txtWhatever.SpellCheck.IsEnabled = true; 

您正尝试在WinForms应用程序中使用专为WPFdevise的拼写检查组件。 他们不兼容。

如果你想使用.NET提供的拼写检查,你将不得不使用WPF作为你的widget系统。

如果你想坚持使用WinForms,你需要第三方的拼写检查组件。

基于WPF文本框的可以用于客户端或服务器端的免费.NET拼写检查器可以在这里看到。 它会包装你的文本框,虽然你仍然需要组装包括演示文稿框架等。

充分披露…真正由你写的

我需要在winforms中的文本框中添加背景颜色,以反映在devise器中select的颜色:

 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)); } } 

如何获取英文单词列表并将其复制到文本文件中。 添加参考。 然后使用streamreader类对textbox.text进行分析。 任何在文本文件中找不到的单词都可以设置为突出显示,或者在对话框中显示,并带有replace或忽略的选项。 这是一个霰弹枪的build议,有许多缺失的步骤,我是2个月的编程,但….它即将尝试任何尝试。 我正在做一个记事本项目(idreamincode.com上的rexpad)。 希望这有助于!