Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 DataGridView переключение между ячейкам при нажатии Enter в режиме редактировании  [new]
kab19
Member

Откуда:
Сообщений: 2
Пиведенный код работает при нажатии клавиши А, но при использовнии Enter дальше 5-го столбца не заходит, то есть отрабатывает только 1 раз.
+ Код
private void dataGridView3_KeyDown(object sender, KeyEventArgs e)
{
            if (e.KeyCode == Keys.ControlKey)
                CtrlPressed = true;
}

private void dataGridView3_KeyUp(object sender, KeyEventArgs e)
{
	if (CtrlPressed && dataGridView3.Rows.Count != 0)
        {
		switch (e.KeyCode)
                {
                    case Keys.ControlKey:
                        CtrlPressed = false;
                        break;
                    case Keys.E:
                        e.Handled = true;
                        int CurrentRow = dataGridView3.CurrentRow.Index;
                        DataGridViewCell CurrentCell = dataGridView3.Rows[CurrentRow].Cells[1];
                        dataGridView3.CurrentCell = CurrentCell;
                        dataGridView3.BeginEdit(true);                        
                        break;
                }
        }
}

private void dataGridView3_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
	TextBox DGV_TextBox = e.Control as TextBox;
        DGV_TextBox.PreviewKeyDown -= new PreviewKeyDownEventHandler(DGV_TextBox_PreviewKeyDown);
        DGV_TextBox.PreviewKeyDown += new PreviewKeyDownEventHandler(DGV_TextBox_PreviewKeyDown);
}

void DGV_TextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
	//if (e.KeyCode == Keys.A)
        if (e.KeyCode == Keys.Enter)            
        {
		int CurrentRow = dataGridView3.CurrentCell.RowIndex;
                int CurrentCollumn = dataGridView3.CurrentCell.ColumnIndex;
                switch (CurrentCollumn)
                {
                    case 1:
                        CurrentCollumn = 5;
                        break;
                    case 5:
                        CurrentCollumn = 6;
                        break;
                    case 6:
                        CurrentCollumn = 7;
                        break;
                }
                DataGridViewCell CurrentCell = dataGridView3.Rows[CurrentRow].Cells[CurrentCollumn];
                dataGridView3.CurrentCell = CurrentCell;
                dataGridView3.BeginEdit(true);
        }
}
20 фев 19, 21:12    [21815817]     Ответить | Цитировать Сообщить модератору
 Re: DataGridView переключение между ячейкам при нажатии Enter в режиме редактировании  [new]
kab19
Member

Откуда:
Сообщений: 2
Решил проблему использованием делегата и события CellEndEdit:
+ Код
        private void GoToNextCell(DataGridView DGV, int CurrentRow, int CurrentCollumn)
        {
            switch (CurrentCollumn)
            {
                case 1:
                    CurrentCollumn = 5;
                    break;
                case 5:
                    CurrentCollumn = 6;
                    break;
                case 6:
                    CurrentCollumn = 7;
                    break;
            }
            DataGridViewCell CurrentCell = dataGridView3.Rows[CurrentRow].Cells[CurrentCollumn];
            dataGridView3.CurrentCell = CurrentCell;
            dataGridView3.BeginEdit(true);
        }

        private void dataGridView3_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int CurrentCollumn = dataGridView3.CurrentCell.ColumnIndex;
            if (CurrentCollumn != 7)
            {
                int CurrentRow = dataGridView3.CurrentCell.RowIndex;
                this.BeginInvoke(new MethodInvoker(() =>
                {
                    GoToNextCell(dataGridView3, CurrentRow, CurrentCollumn);
                }));
            }
        }
25 фев 19, 03:36    [21818424]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить