如何使DataGridView编辑控件的输入行为与TextBox相同?

时间:2018-05-21 21:51:02

标签: c# .net vb.net winforms datagridview

有没有办法让输入DataGridView文本框单元的工作方式与输入TextBox完全相同?默认情况下,只需单击并拖动鼠标即可在TextBox中选择文本,即使控件不是以焦点开始,但在DGV中,您似乎必须先选择单元格才能更改所选文本。

编辑:我正在尝试使DataGridView的行为与MS Access中的表格相同,您可以在单元格中动态选择文本,而单元格中没有焦点,单击单击 。 (我注意到在Access中,文本在单元格获得焦点之前显示为已选中,因此与我上面提到的不完全相同,但也可以接受。)

一旦单元格编辑控件具有焦点,文本选择工作正常,但是当我首先进入单元格时似乎无法实现。

我目前正在使用DataGridView1.BeginEdit(False)进行编程控制来显示编辑控件,但这里唯一的选项是False(未选择任何内容)或True(所有选中的文字)。 编辑:使用EditOnEnter会导致选择整个单元格文本,并且需要再次单击鼠标才能动态选择单元格内容的一部分。

当然DataGridViewTextBoxEditingControl继承了TextBox,这样的行为应该是可能的吗?

1 个答案:

答案 0 :(得分:0)

我不认为你提出的问题是可能的,这里有一些非常接近的事情。

    private void OnCellMouseClick(object sender, DataGridViewCellMouseEventArgs cellMouseEventArgs)
    {
        if (cellMouseEventArgs.RowIndex < 0 || cellMouseEventArgs.ColumnIndex < 0)
        {
            return;
        }
        var cellRef = _dataGridView[cellMouseEventArgs.ColumnIndex, cellMouseEventArgs.RowIndex];
        if (cellRef == null || cellRef.IsInEditMode || cellRef.ReadOnly)
        {
            return;
        }
        _dataGridView.BeginEdit(false);
        if (!(cellRef is DataGridViewComboBoxCell))
        {
            return;
        }
        var editingControl = DataGridView.EditingControl as DataGridViewComboBoxEditingControl;
        if (editingControl != null)
        {
            editingControl.DroppedDown = true;
        }
    }

当然正常订阅_dataGridView.CellMouseClick += OnCellMouseClick;

这产生的行为是这样的,当你点击编辑开始时,这对组合框也有一个改进,通常需要打开2或3次点击,这样就完成了一次。您无法立即选择文本,您必须单击一次。我已经尝试过使用MouseEnter和类似的东西,不幸的是无法准确地生成你所要求的东西。如果其他人有完整的解决方案,请提交,因为我也喜欢它!