高性能なエディタの多くは、次の2種類のスペルチェックを実装しています。
C1RichTextBox は、C1SpellChecker コンポーネントを使用した2種類のスペルチェックをサポートします。このコンポーネントも、ComponentOne for WPF に含まれています。C1SpellChecker は、他のコントロールもスペルチェックできるため、別のアセンブリとしてリリースされています。
To implement modal spell checking, you need to add a reference to the C1.WPF.SpellChecker assembly to your project. Then, add the following code to your project. This code creates a new C1SpellChecker object to be shared by all controls on the page that require spell-checking. Later, the page constructor invokes the Load method to load the main spelling dictionary from a stream containing the compressed Dictionary data. C1SpellChecker includes over 20 other dictionaries which can be downloaded from our site. In this case, we are loading C1Spell_en-US.dct, the American English dictionary. This file must be present on the application folder. When the modal checking is complete, the _c1SpellChecker_CheckControlCompleted event fires and shows a dialog box to indicate that the spell-checking operation is complete.
C# |
コードのコピー
|
---|---|
public partial class SpellCheckerRichTextBoxDemo : UserControl { // C1SpellCheckerを宣言します C1SpellChecker _c1SpellChecker = new C1SpellChecker(); public SpellCheckerRichTextBoxDemo() { InitializeComponent(); this.Tag = Properties.Resources.SpellCheckerRtbDemoDescription; Loaded += Page_Loaded; Unloaded += Page_Unloaded; } void Page_Loaded(object sender, RoutedEventArgs e) { // C1RichTextBoxにツールバーを接続します _rtbToolbar.RichTextBox = _richTextBox; _richTextBox.SpellChecker = _c1SpellChecker; // サンプルテキストをテキストボックスにロードします using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("SpellCheckerExplorer.Resources.test.txt")) using (var sr = new StreamReader(stream)) { var text = sr.ReadToEnd(); _richTextBox.Text = text; } // 無視リストを設定します WordList il = _c1SpellChecker.IgnoreList; il.Add("ComponentOne"); il.Add("Silverlight"); // イベントを監視します _c1SpellChecker.BadWordFound += _c1SpellChecker_BadWordFound; _c1SpellChecker.CheckControlCompleted += _c1SpellChecker_CheckControlCompleted; // メイン辞書をロードします if (_c1SpellChecker.MainDictionary.State != DictionaryState.Loaded) _c1SpellChecker.MainDictionary.Load(Application.GetResourceStream(new Uri("/" + new AssemblyName(Assembly.GetExecutingAssembly().FullName).Name + ";component/Resources/C1Spell_en-US.dct", UriKind.Relative)).Stream); if (_c1SpellChecker.MainDictionary.State == DictionaryState.Loaded) { WriteLine("loaded main dictionary ({0:n0} words).", _c1SpellChecker.MainDictionary.WordCount); } else { WriteLine("failed to load dictionary: {0}", _c1SpellChecker.MainDictionary.State); } // アプリの終了時にユーザー辞書を保存します App.Current.Exit += App_Exit; } void Page_Unloaded(object sender, RoutedEventArgs e) { _c1SpellChecker.BadWordFound -= _c1SpellChecker_BadWordFound; _c1SpellChecker.CheckControlCompleted -= _c1SpellChecker_CheckControlCompleted; } // スペルチェッカーイベントを監視します void _c1SpellChecker_CheckControlCompleted(object sender, CheckControlCompletedEventArgs e) { if (!e.Cancelled) { var msg = string.Format("Spell-check complete, {0} errors found.", e.ErrorCount); MessageBox.Show(msg, "Spelling"); } WriteLine("CheckControlCompleted: {0} errors found", e.ErrorCount); if (e.Cancelled) { WriteLine("\t(cancelled...)"); } } void _c1SpellChecker_BadWordFound(object sender, BadWordEventArgs e) { WriteLine("BadWordFound: \"{0}\" {1}", e.BadWord.Text, e.BadWord.Duplicate ? "(duplicate)" : string.Empty); } } |