Mam ten kod. Po trafieniu wejścia, gdy toolFolderName (TOOLBAR TEXTBOX), klawisz Enter jest przetwarzany w porządku. Następnie, pomimo e.Handled = true; pożary wydarzenia filesDataGridView_KeyUp. Ciekawnie (a może nie, decydujesz), jeśli ustawię punkt przerwania w toolFolderName_KeyPress i naciśnij, gdy wykonanie pęknie, bez robienia niczego innego, naciśnięcie klawiszy nie propaguje się do zdarzenia DGV.

Zdaję sobie sprawę, że używam obu imprez KeyUp i KeyPress. Czy e.Handled nie działa na tych wydarzeniach? Chcę paska narzędzi TOOLBOX i DGV na tym samym formularzu, aby użyć klucza Enter, każdy z własnych celów. Jakie podejście powinienem wziąć?

private void toolFolderName_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Keys)e.KeyChar == Keys.Return)
    {
         // code
         // code
         e.Handled = true;//does this not mean "Hey, every control on this form,
                          //ignore this keystroke, it has been handled?"
    }
}

private void filesDataGridView_KeyUp(object sender, KeyEventArgs e)
{
    // receives Enter key despite e.Handled in toolFolderName_KeyPress
    if (e.KeyCode == Keys.Return)
    {
        // processing code
        e.Handled = true;
    }
}
0
RobertSF 22 listopad 2020, 18:09

1 odpowiedź

Najlepsza odpowiedź

e.Handled Dotyczy tylko tego bardzo zdarzenia. Jeśli chcesz stłumić przetwarzanie klawiatup, musisz użyć tej samej logiki w obsłudze klawiatury lub ustawić flagę (najprawdopodobniej w obsłudze klawisza obsługi, które informuje o tym, aby zignorować swoje zdarzenie keyup jako dobrze.

1
Heinz Kessler 22 listopad 2020, 15:27