Muszę wyłączyć zmianę ostrości za pomocą strzałek na formularzu. Czy istnieje prosty sposób, aby to zrobić?Jak wyłączyć nawigację na WinForm za pomocą strzałek w C#?
Dziękuję
Muszę wyłączyć zmianę ostrości za pomocą strzałek na formularzu. Czy istnieje prosty sposób, aby to zrobić?Jak wyłączyć nawigację na WinForm za pomocą strzałek w C#?
Dziękuję
Coś wzdłuż linii:
private void Form1_Load(object sender, EventArgs e)
{
foreach (Control control in this.Controls)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
Należy ustawić KeyPreview
true na formularzu. Obsługuj zdarzenie KeyDown/KeyUp/KeyPress
i ustaw e.Handled
w module obsługi zdarzeń na wartość true dla kluczy, które mają zostać zignorowane.
To podejście nie wydaje się działać, nie ma e.Handled na PreviewKeyDownEventArgs – andynormancx
e.Handled istnieje, ale w sposób: private void Form1_KeyUp (object sender, KeyEventArgs e), KeyDown itp mam problemy z takim podejściem też. Spróbuję tego na czystym projekcie. –
Tak, istnieje w zdarzeniu KeyDown, ale ustawienie go nie pomaga, nawigacja już się odbyła w tym punkcie. – andynormancx
ja skończyło się z kodem poniżej której ustawić funkcję do każdej kontroli na formularzu:
(Kod jest oparty na jednej z andynormancx)
private void Form1_Load(object sender, EventArgs e)
{
SetFeatureToAllControls(this.Controls);
}
private void SetFeatureToAllControls(Control.ControlCollection cc)
{
if (cc != null)
{
foreach (Control control in cc)
{
control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
SetFeatureToAllControls(control.Controls);
}
}
}
void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
{
e.IsInputKey = true;
}
}
Próbowałem tego aproach, gdzie formularz obsługuje zdarzenie podglądu jeden raz. Generuje mniej kodu niż pozostałe opcje.
Po prostu dodaj tę metodę do zdarzenia PreviewKeyDown
w formularzu i ustaw właściwość KeyPreview
na true
.
private void form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
case Keys.Down:
case Keys.Left:
case Keys.Right:
e.IsInputKey = true;
break;
default:
break;
}
}
Witam carlos. Chciałem użyć waszej krótszej wersji, ale kiedy ją przetestowałem, nie zrobiło to, co powinno niestety ... (i pamiętałem oczywiście, żeby ustawić "Form.KeyPreview = true"). Dopiero kiedy dodałem foreach() w Form_Load, zachowanie zmieniło się. Czy testowałeś to? – spaceman
Działa idealnie. Dziękuję Ci! Krótka notatka dla innych osób: foreach (kontrola kontrolna w this.Controls) nie zawiera wszystkich formantów - możesz mieć kontenery (np. System.windows.forms.panel) w formularzu. –
Nie pomyślałbym o tym, ale to wydaje się całkowicie działać. (Moim celem było warunkowe wyłączenie Enter, ale ten sam pomysł.) Dzięki! – neminem