Как сделать поведение записи элемента управления редактирования DataGridView таким же, как в TextBox? - PullRequest
0 голосов
/ 22 мая 2018

Есть ли способ сделать так, чтобы ввод ячейки текстового поля DataGridView работал так же, как ввод текстового поля?По умолчанию текст можно выделить в TextBox, просто щелкнув и перетащив мышь, даже если элемент управления не начинается с фокуса, но в DGV вам, кажется, приходится выбирать ячейку, прежде чем вы сможете изменить выделенный текст.

РЕДАКТИРОВАТЬ: я пытаюсь заставить DataGridView вести себя так же, как таблицы в MS Access, где вы можете динамически выделять текст в ячейке, которая еще не имеет фокуса с помощью одного кликаи перетащите.(Я заметил, что в Access текст отображается как выбранный до того, как ячейка получает фокус, поэтому он не совсем такой, как я спрашиваю выше, но также будет приемлемым.)

Как только элемент управления для редактирования ячейки имеет фокус,выделение текста работает нормально, но я не могу этого добиться при первом входе в ячейку.

В настоящее время я использую программное редактирование, используя DataGridView1.BeginEdit(False), чтобы показать элемент управления редактированием, но единственные параметрыздесь False (ничего не выделено) или True (весь текст выделено). Редактировать: Использование EditOnEnter приводит к выделению всего текста ячейки, и для динамического выделения только части содержимого ячейки требуется еще один щелчок мыши.

Конечно, такое поведение должно бытьвозможно, так как DataGridViewTextBoxEditingControl наследует TextBox в любом случае?

1 Ответ

0 голосов
/ 22 мая 2018

Я не думаю, что вы спрашиваете, возможно, вот что-то очень близко.

    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 и подобным, и, к сожалению, не могу произвести именно то, что вы просите.если у кого-то еще есть полное решение, пожалуйста, отправьте его, потому что мне бы тоже понравилось!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...