Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> На что ставить keypress? Опять datagrid 
:(
    Опции темы
sindi8
Дата 7.6.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Может кто подскажет?
Нужно отлавливать событие keypress для datagrid и устанавливать текущей строку, значение в которой начинается с нажатой буквы. Да вот в чем проблема: сделал обработчик keypress, а он срабатывает не на таблице, которая отображается, а на пустом месте датагрида (т.е. вне таблицы).
Отсюда вопрос - на что ставить обработчик? Или может я не с той стороны думаю?

Спсб всем откликнувшимся.
PM MAIL   Вверх
sindi8
Дата 7.6.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Вопрос снят
PM MAIL   Вверх
AntonSaburov
Дата 7.6.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 1
Всего: 118



Цитата(sindi8 @ 7.6.2005, 12:47)
Вопрос снят

А поделиться ? Мы же тут такие любопытные smile
PM MAIL WWW ICQ   Вверх
sindi8
Дата 7.6.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Выглядит примерно так.
Код

public class myGrid : DataGrid 
...
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
    MessageBox.Show(keyData.ToString());
    return true;
}

Отлавливает все, да только не так как надо. Мне-то нужно отлавливать для того, чтобы перемещаться по датагриду, а он с русским никак не связан. Показывает какая клавиша была нажата.
Так что вопрос остается - как?

Это сообщение отредактировал(а) sindi8 - 7.6.2005, 13:38
PM MAIL   Вверх
-ser-
Дата 8.6.2005, 03:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Код

this.dg1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.dg1_KeyPress);
...          

private void dg1_KeyPress(object sender, KeyPressEventArgs e)
{
    MessageBox.Show(" Key Pressed :" + e.KeyChar.ToString());            
}

и русский показывает корректно.

Цитата
устанавливать текущей строку, значение в которой начинается с нажатой буквы

а вообще, как ты себе представляешь все это. куда пользователь должен кликнуть на гриде чтобы где-то что-то нажать, да еще чтобы грид сразу же перелистнулся на нужную строку?

если я правильно понял твою задачу, корректно было бы рядом с гридом поместить, например TextBox, в котором пользователь печатает буквы, ты читаешь KeyPress этого Boxa и соответственно выполняешь махинации в гриде. тут все просто. если тебе это надо, и не знаешь как, дай знать.




--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
sindi8
Дата 8.6.2005, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата
если я правильно понял твою задачу

Ну в общем-то мою задачу ты понял правтически правильно. textBox конечно должен быть. Я просто как-то об этом забыл упомянуть.
Что сделал: когда пользователь что-то набирает в текстбоксе курсор в гриде перемещается на нужную позицию
В чем проблема: если у меня в гриде несколько столбцов - то пользователь допустим встает на нужный ему столбец, нажимает какую-то букву - в результате этого фокус должен переноситься на textBox и в нем (текстбоксе) должен быть отображен этот введенный символ. Соответственно поиск должен быть по тому столбцу, на котором пользователь начал ввод.
Отсюда вопросы:
1. как отлавливать нажатие (кейпресс у меня почему-то не отрабатывается)
2. откуда вытащить текущий номер столбца в гриде (знаю, что вопрос простой, но как-то времени у меня уже прилично съел).
Спасибо.
PM MAIL   Вверх
sindi8
Дата 8.6.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



по 2 - номер нашел. Что-то я затупил. smile
PM MAIL   Вверх
-ser-
Дата 9.6.2005, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



по 1.
ты используешь Студию или все вручную пишешь?
нажатие KeyPress на текстбоксе. все отрабатывается.
Код

private System.Windows.Forms.TextBox    tbComments;
...
this.tbComments.KeyPress += new System.Windows.Forms.KeyPressEventHandler( this.tbComments_KeyPress );            
...
private void tbComments_KeyPress( object sender, KeyPressEventArgs e )
{
    MessageBox.Show( e.KeyChar.ToString() );
}



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
sindi8
Дата 9.6.2005, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



В студии пишу вручную smile
Проблема-то не в текстбоксе. Вот смотри. Я пользователь. У меня открывается форма, в которой отображен датагрид с 2 столбцами. Я в гриде курсором перемещаюсь на нужный столбец, нажимаю какую-то буквенную клавишу, после чего фокус должен автоматически переноситься на текстбокс и в текстбоксе должен отображаться символ, на который я нажал (в частности русский). Дальше все что мне нужно работает. Именно суть в том, чтоб пользователь не парился на счет того, что для поиска ему нужно перейти на текстбокс. Вот.
PM MAIL   Вверх
-ser-
Дата 9.6.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Цитата
нажимаю какую-то буквенную клавишу

где? на чем нажимаешь?
датагрид тебе либо отсортирует столбец, либо позволит что-то ввести в определенную графу.

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


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
sindi8
Дата 9.6.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



Цитата
позволит что-то ввести в определенную графу

Датагрид readonly. А на счет Combobox я не догнал, что ты предлагаешь.
Вообще, к этому гриду я цепляю справочник, и все для родного пользователя, чтобы не из комбобокса данные выбирал а из грида. Согласись, если в справочнике несколько сотен строк - опухнеш искать все это дело в комбобоксе.
PM MAIL   Вверх
-ser-
Дата 9.6.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13



Код

dg1.ReadOnly = false;

и пиши в него что хочешь.

ComboBox я привел для аналогии работы с пользователем. может неудачно.


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
-ser-
Дата 9.6.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 1.2.2005

Репутация: 4
Всего: 13




P.S. для общего сведения. в VS2005 есть контрол DataGridView. он корректно отрабатывает KeyPress, так как ты хочешь, на ячейке. сам проверил.


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
sindi8
Дата 9.6.2005, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



smile
Цитата
и пиши в него что хочешь.

Да не надо мне ничего в грид вписывать! Я его специально ридонли сделал. Грид у меня для выбора данных. Вот смотри:
Есть обычный текстбокс, enabled=false (соответственно не подсвечен и никто туда ручками ниче ввести не может), а рядом кнопочка маленькая с тремя точечками - типа выбрать значение из справочника. Вот при нажатии на эту самую кнопочку я создаю экземпляр формы, на которой как раз этот грид, подключенный к справочнику, и текстбокс для поиска по этому самому гриду. Нашел чел, что искал в гриде, нажал не ентер и получил в самом первом текстбоксе (который enabled=false) нужное значение из справочника. Вот как все выглядит.
А на счет 2005 - интересно конечно, но она ведь пока только бета вроде как, и к тому же у меня ее нет.
PM MAIL   Вверх
sindi8
Дата 21.6.2005, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 6.6.2005
Где: Москва

Репутация: нет
Всего: нет



На самом деле все довольно просто оказалось. Вот код (если кому-то нужно).
Код

class myGrid : DataGrid
...
private void SetGridStyle()
{
 DataGridTableStyle tableStyle = new DataGridTableStyle();
 DataGridTextBoxColumn tbColumn = new DataGridTextBoxColumn();
 tableStyle.MappingName = "sometable"; //TableName в DataSet
 tbColumn.KeyPress += new EventHandler(this.tdColumn_KeyPress);
 tableStyle.GridColumnStyles.Add(tbColumn);
 this.TableStyles.Add(tableStyle);
}
...
private void tdColumn_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
 MessageBox.Show(e.KeyChar.ToString());
}


Это сообщение отредактировал(а) sindi8 - 21.6.2005, 12:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0553 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.