将光标定位在GridViewComboBoxColumn(Telerik)中

时间:2014-05-23 10:00:52

标签: c# winforms telerik datagridcomboboxcolumn

我正在使用RadGridView,里面有一个GridViewComboBoxColumn视图。 编辑器本身是一个基于以下内容的自定义编辑器:RadDropDownListEditor。

我正在尝试实现它,以便按向左或向右箭头不会影响单元格或选择项目,而是将光标移动到编辑器中。因此我的问题是如何在那里访问光标的位置。

   class CustomizedDropDownEditor : RadDropDownListEditor
{
    public override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (e.KeyCode == System.Windows.Forms.Keys.Left || e.KeyCode == System.Windows.Forms.Keys.Right)
        {
            //Customized left right arrow key behaviour

        }
        else
        {
            base.OnKeyDown(e);
        }
    }

我已经尝试了一些东西,但没有提出一种方法可以访问编辑器的文本框或那里的选择开始。

编辑: 尽管上面的代码拦截了键,但左箭头键仍然会导致单元格离开(右箭头键不会导致这种情况)。是否有可能避免这种情况,如果是这样的话?

TNX。

1 个答案:

答案 0 :(得分:1)

将属性转换为EditorElement后,您可以访问编辑器RadDropDownListEditorElement属性中的文本。如果你想在同一覆盖中做到这一点:

class CustomizedDropDownEditor : RadDropDownListEditor
{
    public override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (e.KeyCode == System.Windows.Forms.Keys.Left || e.KeyCode == System.Windows.Forms.Keys.Right)
        {
            //Customized left right arrow key behaviour

            int selectionStart = ((RadDropDownListEditorElement)this.EditorElement).SelectionStart;

            int selectionLength = ((RadDropDownListEditorElement)this.EditorElement).SelectionLength;

        }
        else
        {
            base.OnKeyDown(e);
        }
    }
}

或者,如果您想从其他地方进行此操作,您可以通过网格的ActiveEditor属性执行相同的操作(尽管我不会想象您会想要做什么其他很多,因为编辑当然会关闭并丢失你的文字选择!):

private void RadGridView1_OnMouseLeave(object sender, EventArgs e)
{
    int selectionStart = ((RadDropDownListEditorElement)((CustomizedDropDownEditor)radGridView1.ActiveEditor).EditorElement).SelectionStart;
}

This Telerik article提供了一个示例,当EndEdit事件触发时,您可能也会感兴趣地访问该文本。