我有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
абажур
абажура
...


这是怎么回事?

最佳答案

通过执行以下操作,我能够使法语工作:


使用1252编码保存文件
在文本框中设置语言
在lex文件中将#LID设置为1036


使用包含以下内容的文件进行测试:ééé

例如

box.Language = System.Windows.Markup.XmlLanguage.GetLanguage("fr");
String text = System.IO.File.ReadAllText(lex_file.AbsolutePath, Encoding.UTF8);
System.IO.File.WriteAllText(lex_file.AbsolutePath, text, Encoding.GetEncoding(1252));


不幸的是,这不适用于俄语。默认情况下,似乎仅支持4种语言。有关更多信息,请参见Does SpellCheck .Net class support russian language?

关于c# - 为什么SpellCheck总是将其他词典中的单词(utf-8,带有BOM的utf-8,UTF-16)标记为错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25658323/

10-09 03:50