2

私はどこかでこの問題を見たことがあることを知っていますが、その時に答えがあったかどうかはわかりません。TextBoxWPF、.NET4.0のにSpellCheckを追加しようとしています。間違った単語を見つけてマークするという点では問題なく機能し、間違っている場合は最初の単語を置き換えTextBoxます。単語1を過ぎたものはありますが、TextBox何も変更せずにカラットを先頭に移動しますか?私が言ったように、私はこれを約6〜9か月前にどこかで見ましたが、今ではグーグルで思いついたものはすべて代替言語を扱っています(私は今のところ厳密に英語にとどまっています)。完全を期すためだけにイベントメソッドとスタイル設定XAMLを含めましたが、問題はそこにあるとは思いません。

XAML:

<MultiBox:MultiBox Name="callNotes" Grid.Column="1" Width="Auto" Height="Auto" Margin="2,5,15,20" VerticalAlignment="Stretch" AcceptsReturn="True" FontWeight="Bold" GotFocus="callNotes_GotFocus" SelectAllOnGotFocus="False" SpellCheck.IsEnabled="True" xml:lang="en-US" Style="{StaticResource TextBoxStyle}" TextChanged="callNotes_TextChanged" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" />

<Style x:Key="TextBoxStyle" TargetType="{x:Type MyNamespace:MultiBox}">
    <Setter Property="CharacterCasing" Value="Upper" />
    <Setter Property="HorizontalAlignment" Value="Stretch" />
    <Setter Property="VerticalAlignment" Value="Top" />
    <Setter Property="Height" Value="23" />
    <Setter Property="Width" Value="Auto" />
    <Setter Property="SelectAllOnGotFocus" Value="True" />
    <Setter Property="TextWrapping" Value="Wrap" />
</Style>

コード:

private void callNotes_TextChanged(object sender, TextChangedEventArgs e)
{
    callNotes.Text.ToUpper();
    lineCountOne.Content = ((callNotes.Text.Length / 78) + 1);
}

private void callNotes_GotFocus(object sender, RoutedEventArgs e)
{
    callNotes.CaretIndex = callNotes.Text.Length;
}
4

2 に答える 2

1

jschroedlの提案を試しても運がなかった後(彼の答えが正しいはずだったのはわかっていますが)、考えられるすべての設定で遊んでみました。Spellcheck-Visual TextBoxStudio/.NETのインストール自体に問題がないことを確認するためだけに有効にしました。そうではなかったことがわかりました。TextBoxプログラムを通じて指定されたものを選択すると、SelectAll()メソッドがトリガーされるようにするために、数か月前に行ったことがありました。そのコードからこの特定のものを選別するTextBoxと、すべてがうまく機能します。繰り返しになりますが、jschroedlのおかげで、彼がこれを知る方法がないことを私は知っています。誰かが同様の問題に遭遇した場合に備えて、問題のあるコードを以下に示します。

    protected override void OnStartup(StartupEventArgs e)
    {
        EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotKeyboardFocusEvent, new RoutedEventHandler(SelectAllText), true);

        base.OnStartup(e);
    }

    protected static void SelectAllText(object sender, RoutedEventArgs e)
    {
        var textBox = e.OriginalSource as TextBox;
        if (textBox != null && textBox.Name != "callNotes")
            textBox.SelectAll();
    }

&& textBox.Name!= "callNotes"を追加すると、問題が解決しました。

于 2012-12-27T07:27:55.470 に答える
1

エラーを修正しようとするコードを確認すると役立ちます。検出されたすべてのエラーをループし、最初の提案を受け入れる単純なコードを次に示します。特定のエラーのみを修正したい場合は、特定のインデックスでエラーを取得して、関心のある特定のエラーにスキップする必要があります。

        int ndx;
        while ((ndx = callNotes.GetNextSpellingErrorCharacterIndex(0, LogicalDirection.Forward)) != -1) 
        {
            var err = callNotes.GetSpellingError(ndx);
            foreach (String sugg in err.Suggestions)
            {
                err.Correct(sugg);
                break;
            }
        }
于 2012-12-23T18:34:43.697 に答える