ОБСУЖДЕНИЕ

Keydown

4 ответов 5,5 тыс.
Автор темы
Уважаемые коллеги,подскажите начинающему решение такой вот,заурядной,вроде бы,проблемки
на гриде надо отловить нажатие Enter для того чтобы перейти к ячейке с i+1 индексом,проблема в том что событие KeyDown грида ловит всё кроме этого самого Enter:
вот код:
private void grPlan_KeyDown(object sender, KeyEventArgs e)
{
try
{

if (e.KeyCode == Keys.Enter)
{
ProcessDialogKey(Keys.Tab);
return;
}
}
catch
{
}
base.OnKeyDown(e);
}
 
проблема в том что событие KeyDown грида ловит всё кроме этого самого Enter:
как проверяли?
для начала попробуйте выполнить
Код:
if (e.KeyCode == Keys.Enter)
MessageBox.Show("Enter pressed...");
 
проверял бряком,тоесть при нажатии Enter проскакивает мимо проверки
но вот что интересно:не отрабатывает сей метод:
if (keyData == Keys.Enter)
{
msg.WParam = new IntPtr(Convert.ToInt32(Keys.Tab));
return base.ProcessCmdKey(ref msg, Keys.Tab);
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
НО!
работает вот этот:
if (keyData == Keys.Enter)
{

SendKeys.Send("{TAB}");

return base.ProcessCmdKey(ref msg, keyData);
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}

функционал выполнен но причину понять не могу-может кто-то подскажет
 
C++:
if (keyData == Keys.Enter)
{
keyData = Keys.Tab;
msg.WParam = new IntPtr((int)Keys.Tab);
}
return base.ProcessCmdKey(ref msg, keyData);
попробуй так
 
этот метод тоже отрабатывает,спасибо
но всё же интересно в чем была проблема))будем разбираться
спасибо.