DataGridView изменение стандартного поведения
От: Shkolik Беларусь svetguitars.nm.ru
Дата: 14.07.08 08:59
Оценка:
Есть такая проблема:

Большой проект, куча форм с таблицами. Заказчик хочет, чтобы таблицы по своему отзывались на табуляцию, энтер и так далее. Возникает вопрос, как это реализовать? Если к примеру работать по типу такого (по энтеру нужно произвести каке-то действия и оставть выделенной текущюю ячейку):
Код:



private void dgvMain_KeyDown(object sender, KeyEventArgs e) 
{            
switch (e.KeyCode) 
            { 
                case Keys.Enter: 
                    dgvMain_CellDoubleClick(dgvMain, new DataGridViewCellEventArgs(dgvMain.CurrentCell.ColumnIndex, dgvMain.CurrentCell.RowIndex)); 
                    dgvMain.Rows[dgvMain.CurrentCell.RowIndex].Selected = true; 
                    break;              
                default: break; 
            } 
}




То все отлично, за исключением того, то фокус ввода переходит нижележащей строке... Как от этого избавиться? Надо залочить обработчик ентера у самого грида, но как к нему подступиться?

ЗЫ: Ребят, выручайте, надо было сделать еще вчера
Re: DataGridView изменение стандартного поведения
От: baranovda Российская Империя  
Дата: 14.07.08 09:52
Оценка:
Здравствуйте, Shkolik, Вы писали:


S>То все отлично, за исключением того, то фокус ввода переходит нижележащей строке... Как от этого избавиться? Надо залочить обработчик ентера у самого грида, но как к нему подступиться?


S>ЗЫ: Ребят, выручайте, надо было сделать еще вчера


Думаю, проще всего написать наследника, переопределить стандартный Behavior и вынести его в настройки
Re[2]: DataGridView изменение стандартного поведения
От: Shkolik Беларусь svetguitars.nm.ru
Дата: 14.07.08 10:35
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, Shkolik, Вы писали:



S>>То все отлично, за исключением того, то фокус ввода переходит нижележащей строке... Как от этого избавиться? Надо залочить обработчик ентера у самого грида, но как к нему подступиться?


S>>ЗЫ: Ребят, выручайте, надо было сделать еще вчера


B>Думаю, проще всего написать наследника, переопределить стандартный Behavior и вынести его в настройк


В общем-то да, так и есть, но проблема в том, что проект очень большой... куча форм с гридами — если делать наследника, то придется перелопачивать весь код Изначально планировалась функция, общая для всех гридов, для определения их поведения (в функцию передается ссылка на грид и режим редактирования), но возникла вышеописанная проблема.

Может есть другие варианты?
Re[3]: DataGridView изменение стандартного поведения
От: baranovda Российская Империя  
Дата: 14.07.08 11:18
Оценка:
Здравствуйте, Shkolik, Вы писали:

S>Здравствуйте, baranovda, Вы писали:


B>>Здравствуйте, Shkolik, Вы писали:



S>Может есть другие варианты?


Мне кажется, без наследника никак. Стандартный бихейвор обработки нажатия клавиш событиями подменить вряд ли получится (это если использовать утилитный класс), а вот в OnKeyDown или на худой конец, в WndProc — гарантированно.
Re[4]: DataGridView изменение стандартного поведения
От: Shkolik Беларусь svetguitars.nm.ru
Дата: 14.07.08 11:46
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Здравствуйте, Shkolik, Вы писали:


S>>Здравствуйте, baranovda, Вы писали:


B>>>Здравствуйте, Shkolik, Вы писали:



S>>Может есть другие варианты?


B>Мне кажется, без наследника никак. Стандартный бихейвор обработки нажатия клавиш событиями подменить вряд ли получится (это если использовать утилитный класс), а вот в OnKeyDown или на худой конец, в WndProc — гарантированно.


Понятно, спасибо за помощь. Жаль что нет другого варианта... придется менять целую кучу кода Ну чтож, буду разбираться. Еще раз спасибо.
Re: DataGridView изменение стандартного поведения
От: seimur  
Дата: 14.07.08 17:01
Оценка:
Здравствуйте, Shkolik, Вы писали:

S>Есть такая проблема:


S>Большой проект, куча форм с таблицами. Заказчик хочет, чтобы таблицы по своему отзывались на табуляцию, энтер и так далее. Возникает вопрос, как это реализовать? Если к примеру работать по типу такого (по энтеру нужно произвести каке-то действия и оставть выделенной текущюю ячейку):

S>Код:



S>
S>private void dgvMain_KeyDown(object sender, KeyEventArgs e) 
S>{            
S>switch (e.KeyCode) 
S>            { 
S>                case Keys.Enter: 
S>                    dgvMain_CellDoubleClick(dgvMain, new DataGridViewCellEventArgs(dgvMain.CurrentCell.ColumnIndex, dgvMain.CurrentCell.RowIndex)); 
S>                    dgvMain.Rows[dgvMain.CurrentCell.RowIndex].Selected = true; 
e.Handled = true; //попробуйте это
S>                    break;              
S>                default: break; 
S>            } 
S>}
S>




S>То все отлично, за исключением того, то фокус ввода переходит нижележащей строке... Как от этого избавиться? Надо залочить обработчик ентера у самого грида, но как к нему подступиться?


S>ЗЫ: Ребят, выручайте, надо было сделать еще вчера
Теоретически нет разницы между теорией и практикой, но на практике она есть
Re[2]: DataGridView изменение стандартного поведения
От: Shkolik Беларусь svetguitars.nm.ru
Дата: 16.07.08 13:50
Оценка:
Здравствуйте, seimur, Вы писали:

S>Здравствуйте, Shkolik, Вы писали:


S>>Есть такая проблема:


S>>Большой проект, куча форм с таблицами. Заказчик хочет, чтобы таблицы по своему отзывались на табуляцию, энтер и так далее. Возникает вопрос, как это реализовать? Если к примеру работать по типу такого (по энтеру нужно произвести каке-то действия и оставть выделенной текущюю ячейку):

S>>Код:



S>>
S>>private void dgvMain_KeyDown(object sender, KeyEventArgs e) 
S>>{            
S>>switch (e.KeyCode) 
S>>            { 
S>>                case Keys.Enter: 
S>>                    dgvMain_CellDoubleClick(dgvMain, new DataGridViewCellEventArgs(dgvMain.CurrentCell.ColumnIndex, dgvMain.CurrentCell.RowIndex)); 
S>>                    dgvMain.Rows[dgvMain.CurrentCell.RowIndex].Selected = true; 
S>e.Handled = true; //попробуйте это
S>>                    break;              
S>>                default: break; 
S>>            } 
S>>}
S>>




S>>То все отлично, за исключением того, то фокус ввода переходит нижележащей строке... Как от этого избавиться? Надо залочить обработчик ентера у самого грида, но как к нему подступиться?


S>>ЗЫ: Ребят, выручайте, надо было сделать еще вчера



Спасибо, частично решило проблему. Но в будующем видимо придется написать свой контрол, тк есть элементы поведения, которые DGV обеспечить не может...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.