středa 6. srpna 2008

.NET DataGridView a změna chování při stisku kláves

Na Internetu je posáno mnoho řešení, jak změnit chování DataGridView (DGV) při stisku kláves, např. při Enter přejít na další sloupec místo na další řádku. Bohužel, DGV a ani dokumentace k němu není v tomto ohledu přímočaré, a proto i mnoho lidí (dokonce i z Microsoftu) radí používat EditingControlShowing událost a hlídat KeyDown u objevivšího TextBoxu. To je ovšem takové lámání přes koleno. Nejlepší řešení je od Marka Rideouta, manažera DataGridView v Microsoftu. (Ano, DataGridView má asi svého ředitele :-)), viz http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=88530&SiteID=1

V podstatě stačí vyvtvořit podtřídu DGV a přepsat virtuální funkce:

protected override bool ProcessDialogKey(Keys keyData)
{
Keys keyCode = (keyData & Keys.KeyCode);
if (keyCode == Keys.Enter || keyCode == Keys.Tab)
{
return this.ProcessRightKey(keyData);
}
return base.ProcessDialogKey(keyData);
}

protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)
{
return this.ProcessRightKey(e.KeyData);
}
return base.ProcessDataGridViewKey(e);
}

Žádné komentáře: