Показать сообщение отдельно
Старый 07.10.2003, 13:00   #4  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 124 (5) +++++
Регистрация: 14.12.2001
Нечто подобное я делал для ввода серийных номеров и гарантийных сроков для гарантийных талонов с помощью сканера штрих-кода. Не могу сказать, что мое решение изящное, однако ничего другого я придумать не смог. Вот оно (у нас на гриде две контролки, в которых при нажатии Enter курсор переходит на следующую запись, назовем их Control1 и Control2):

1. Заводим переменную curControl для хранения номера текущей контролки.

2. Перекрываем методы mouseDown на нужных контролках следующим образом:

PHP код:
public int mouseDown(int _xint _yint _buttonboolean _Ctrlboolean _Shift)
{
    
int ret;

    
curControl 1//здесь сохраняем номер выбраноой контролки
    
ret super(_x_y_button_Ctrl_Shift);

    Return 
ret;

3. Для поля, которое в гриде стоит справа от нужного нам (если наша контролка самая правая, то для первого поля) перекрываем метод gotFocus вот так:

PHP код:
    switch (curControl)
    {
        case 
:
            
Control1.setFocus();
        break;
        case 
:
            
Control2.setFocus();
        break;
    } 
4. Для Control1 перекрываем gotFocus:

PHP код:
public void gotFocus()
{
    
super();
    if (
curControl == 2)
        
Control2.setFocus();
    else
        
curControl 1;

5. Зеркальным образом перекрываем gotFocus для Control2.

6. Перекрываем modified для Control1 и Control2:

PHP код:
public void modified()
{
    
super();
    
DataSource_ds.next();

Где DataSource - имя источника данных для контролок Control1 и Control2.

Единственное ограничение этого решения - то, что с Control1 и Control2 нельзя перейти Tab'ом.

P.S. Пока писал, понял, что более красиво можно было сделать тоже самое, если сохранять на номер комнтролки, а ссылку на нее.