0

これは、WPF と C# に関連しています。プログラムにいくつかのボタンがあり、それらがクリックされると、イベントを処理した後でも点滅し続けます。たとえば、私が持っているボタンは、ユーザー入力に基づいて新しいウィンドウを開くことになっています。ユーザーの入力が正しくない場合、MessageBox が表示されます。MessageBox を閉じると、ボタンが点滅し始めます。ユーザー入力が正しければ、新しいウィンドウが開きます。新しいウィンドウから古いウィンドウをクリックすると、ボタンが点滅し始めます。新しいウィンドウを閉じると、ボタンが点滅し始めます。

メインウィンドウにフォーカスを当てるために、このボタンに関係するコード全体で this.Focus() を使用してみました。e.Handled = true を使用してみましたが、それを止めるものはないようです。プログラムにアクセスできるようにしたいので、そのプロパティをfalseに設定してボタンをFocusableにしないでください。

何が起こっているのですか?

ボタンの XAML コードは次のとおりです。

<Button x:Name="btnSearch" Content="Search" Background="#4a89be" Foreground="White"
        MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave"
        Click="btnSearch_Click" />

ボタンの C# コード (私には機能しなかったため、 this.Focus() はありません):

private void btnSearch_Click(object sender, RoutedEventArgs e)
{
    if (!String.IsNullOrEmpty(txtNumber.Text.ToString()) && txtNumber.Text.ToString().Length >= 10)
    {
        if (QueryWindow == null)
        {
            QueryWindow = new DatabaseQueryWindow();
            QueryWindow.Show();
            QueryWindow.Closed += new EventHandler(QueryWindow_Closed);
        }
        else if (QueryWindow != null && !QueryWindow.IsActive)
        {
            QueryWindow.Activate();
        }

            QueryDB();
        }
   else
   {
       MessageBox.Show("Please enter a valid # (Format: YYYYmm####)");
   }
}

void QueryWindow_Closed(object sender, EventArgs e)
{
    QueryWindow = null;
}


private void Button_MouseEnter(object sender, MouseEventArgs e)
{
    Button b = sender as Button;
    if (b != null)
    {
        b.Foreground = Brushes.Black;
    }
}
private void Button_MouseLeave(object sender, MouseEventArgs e)
{
    Button b = sender as Button;
    if (b != null)
    {
        b.Foreground = Brushes.White;
    }
}
4

1 に答える 1

2

ボタンへのフォーカスを無効にせずにこの動作を取り除く方法に興味がある人のために:

アクションが実行された後、ボタンの隣にあるテキストボックスなど、別のコントロールにフォーカスをリダイレクトするだけです: txtBox.Focus();

私のために働いた。別の簡単な方法を見つけることができませんでした。

于 2013-10-12T00:32:49.457 に答える