Hi Khanh,
The PreviewKeyDown event is not suitable for this since you cannot suppress the keypress. You can create a custom control and override the ProcessDialogKey method:
public class MyListView : RadListView
{
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Tab)
{
var view = this.ListViewElement.ViewElement as DetailListViewElement;
var element = this.ListViewElement;
int columnIndex = element.Columns.IndexOf(element.CurrentColumn);
ITraverser<ListViewDetailColumn> colEnumerator = (ITraverser<ListViewDetailColumn>)view.ColumnScroller.Traverser.GetEnumerator();
colEnumerator.Position = columnIndex;
if (colEnumerator.MoveNext())
{
var isEditing = element.IsEditing;
element.CurrentColumn = colEnumerator.Current;
if (isEditing)
{
element.BeginEdit();
}
return true;
}
else
{
ListViewTraverser enumerator = view.Scroller.Traverser.GetEnumerator() as ListViewTraverser;
enumerator.Position = element.CurrentItem;
if (enumerator.MoveNext())
{
var isEditing = element.IsEditing;
colEnumerator.Reset();
colEnumerator.MoveNext();
element.CurrentColumn = colEnumerator.Current;
element.CurrentItem = enumerator.Current;
element.SelectedItem = enumerator.Current;
if (isEditing)
{
element.BeginEdit();
}
return true;
}
}
}
if (keyData == (Keys.Tab | Keys.Shift))
{
var view = this.ListViewElement.ViewElement as DetailListViewElement;
var element = this.ListViewElement;
int columnIndex = element.Columns.IndexOf(element.CurrentColumn);
ITraverser<ListViewDetailColumn> colEnumerator = (ITraverser<ListViewDetailColumn>)view.ColumnScroller.Traverser.GetEnumerator();
colEnumerator.Position = columnIndex;
if (colEnumerator.MovePrevious())
{
var isEditing = element.IsEditing;
element.CurrentColumn = colEnumerator.Current;
if (isEditing)
{
element.BeginEdit();
}
return true;
}
else
{
ListViewTraverser enumerator = view.Scroller.Traverser.GetEnumerator() as ListViewTraverser;
enumerator.Position = element.CurrentItem;
if (enumerator.MovePrevious())
{
var isEditing = element.IsEditing;
colEnumerator.MoveToEnd();
element.CurrentColumn = colEnumerator.Current;
element.CurrentItem = enumerator.Current;
element.SelectedItem = enumerator.Current;
if (isEditing)
{
element.BeginEdit();
}
return true;
}
}
}
return base.ProcessDialogKey(keyData);
}
}
I hope this helps. Should you have any other questions, do not hesitate to ask.
Regards,
Dimitar
Progress Telerik
Get
quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers.
Learn More.