【发布时间】:2014-09-04 23:01:25
【问题描述】:
我有这个由 Hans Passant 制作的控件,我从这里 (Trying to use the C# SpellCheck class) 抓取并修改以加载额外的字典:
using System;
using System.Windows;
using System.ComponentModel;
using System.Windows.Controls;
using System.Windows.Forms.Integration;
namespace SoAL_TextExtractor
{
class SpellBox : ElementHost
{
public SpellBox()
{
box = new TextBox();
base.Child = box;
box.TextChanged += (s, e) => OnTextChanged(EventArgs.Empty);
Uri lex_file = new Uri(System.Windows.Forms.Application.StartupPath + "\\Russian.lex");
box.SpellCheck.CustomDictionaries.Add(lex_file);
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;
}
}
这本词典:
而且,这个结果:
我为 *.lex 尝试了不同的编码,但单词仍然被标记为错误。
lex 有需要的 LID:
#LID 1049
абажур
абажура
...
怎么了?
【问题讨论】:
-
你不能只是复制别人的代码然后重新发布,就好像它是你自己的一样。需要注明出处,详情请查看页面底部。
-
@HansPassant - 对不起?我在哪里说这是我的代码?我所说的只是“我有这个控制权”。我知道这是从另一个答案中获取的,但我从未告诉过这是我的。我正在使用它,我遇到了问题,我在这里展示了我所拥有的。
-
许可证没有说明这一点。这是一个非常简单的规则,当你转发别人的作品时,你必须必须属性。总是。请照顾好它。
-
哦,原来你是作者。我为我的问题添加了学分。此外,通过从 lex 中删除 LID 解决了问题。
-
@Loathing - 这就是我们可能存在的差异:1 - 我没有设置:
box.Language = /*to anything*/;。 2 - 我的 lex 保存在UTF-16,虽然你说它在 1252 代码页中。在 msdn 上说:如果未指定语言环境,则字典适用于所有语言。...所以,我不知道如何,但 SpellCheck 对我来说是按预期工作的。跨度>
标签: c# .net winforms spell-checking