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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пиксельные координаты DataGridViewCell, Combobox в DataGridView 
V
    Опции темы
Linus
Дата 7.12.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, люди добрые. Прошу руку помощи. У меня имеется DataGridView, в котором есть столбец (DataGridViewTextBoxColumn) и очень надо на месте одной из ячеек поместить ComboBox. Так как изменить тип одной ячейки этой колонки я не смог, то подумал, что можно просто создать Combobox на месте этой одной ячейки. Только тут опять неприятности. Я не знаю, как найти координаты ячейки DataGridView (чтобы налепить на это место Combobox). В самом DataGridView используются полосы прокрутки (т.е. комбобокс тоже должен "летать" вместе с остальными ячейками грида при прокрутке). Помогите кто чем может, как это реализовать...
PM MAIL ICQ   Вверх
Dmitriy_Donetsk
Дата 8.12.2006, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Linux,

Цитата

Здравствуйте, люди добрые. Прошу руку помощи. У меня имеется DataGridView, в котором есть столбец (DataGridViewTextBoxColumn) и очень надо на месте одной из ячеек поместить ComboBox. Так как изменить тип одной ячейки этой колонки я не смог, то подумал, что можно просто создать Combobox на месте этой одной ячейки. Только тут опять неприятности. Я не знаю, как найти координаты ячейки DataGridView (чтобы налепить на это место Combobox). В самом DataGridView используются полосы прокрутки (т.е. комбобокс тоже должен "летать" вместе с остальными ячейками грида при прокрутке). Помогите кто чем может, как это реализовать... 



Вот довольно простой способ, как в любой ячейке DataGridView (в моем случае 0,0) поместить 
ComboBox:

Код

DataGridViewComboBoxCell ComboTextCell = new DataGridViewComboBoxCell();
            ComboTextCell.Items.Clear();
            ComboTextCell.Items.Add("Forum");
            ComboTextCell.Items.Add("Vingrad");
   
            dataGridView1[0, 0] = ComboTextCell;


И комбобокс "летает"  smile 
PM MAIL   Вверх
Linus
Дата 8.12.2006, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dmitriy_Donetsk, спасибо Вам огромное, помогло, именно то, что надо  smile  А вообще можно-ли как-то узнать координаты какой-либо ячейки (то есть при редактировании некоторых ячеек на событие BeginEdit чтобы выскакивало маленькое окошко рядом с редактируемой ячейкой для ввода разных параметров, которые потом переведутся в строку и запишутся в ячейку)
PM MAIL ICQ   Вверх
Dmitriy_Donetsk
Дата 8.12.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Linux,

Извеняюсь за поздний ответ, итак...

Координаты dataGridView по которым вы кликнули мышкой можно получить:

Код

private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
        {
            //Создаем "точку" - экземпляр класса System.Drawing.Point объект pt (которому передаются координаты нажатия мышки) 
            System.Drawing.Point pt = new Point(e.X, e.Y);
            if ((e.X>=100) && (e.X<=200))
            {
                // Реализуем код, который показывает окошко, используя эти координаты (e.X и e.Y)
            }

          
        }


Я так понимаю что вам подходит именно этот вариант, но можно еще использовать событие CellClick

Код

 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if ((e.ColumnIndex == 0) && (e.RowIndex == 1))
                MessageBox.Show("!!!");

        }



Теперь каждой клетке dataGridView вы можете назначить свой обработчик события smile 


PM MAIL   Вверх
Linus
Дата 9.12.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dmitriy_Donetsk, а если для редактирования ячейки пользователь не будет использовать мышь? Например, просто нажмёт на ячейке пробел. То есть как узнать координаты именно редактируемой ячейки, чтобы используя эти координаты рассчитать Location окошка, которое выскочет? Сколько я уже не смотрел различных свойств, нигде этого и не нашёл...  smile 

Заранее благодарен
PM MAIL ICQ   Вверх
Linus
Дата 9.12.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ура, я нашёл! Так близко лежало, а я так долго искал) 

Код

private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            Rectangle rect  = form.dataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true);
            MessageBox.Show("X: " + rect.X.ToString() + " Y: " + rect.Y.ToString());
            ......................................................................................
         }


Dmitriy_Donetsk, большое Вам спасибо за помощь  smile 
PM MAIL ICQ   Вверх
Dmitriy_Donetsk
Дата 9.12.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Linus,

Цитата

Dmitriy_Donetsk, а если для редактирования ячейки пользователь не будет использовать мышь? Например, просто нажмёт на ячейке пробел. То есть как узнать координаты именно редактируемой ячейки, чтобы используя эти координаты рассчитать Location окошка, которое выскочет? Сколько я уже не смотрел различных свойств, нигде этого и не нашёл...   


Если мы редактируем клетку в DataGridView, то единственное что мы можем получить это координаты этой клетки (номер строки и столбца); Прийдется ручками подгонять Location формы под эти номера. Используем свойство CellBeginEdit.

Создаем новую форму Form2, устанавл. свойство FormBorderStyle в None. (эта форма будет выскакивать рядом с редактируемой клеткой)

Код

 private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            //MessageBox.Show(e.RowIndex.ToString());
           // MessageBox.Show(e.ColumnIndex.ToString());
        
            {
                Form2 form2 = new Form2();
                form2.Left = e.ColumnIndex * 100; 
                form2.Top = e.RowIndex*100;
               //Грубо говоря, нужно правильно подогнать координаты
                form2.ShowDialog(); 
            }
        }



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

Для быстроты можно использовать не DataGridViewComboBoxCell, а DataGridViewComboBoxColumn.

Добавлено @ 14:07 
Linus,

Цитата

Ура, я нашёл! Так близко лежало, а я так долго искал) 


Congratulations  smile  Ваш способ действительно проще.
PM MAIL   Вверх
Linus
Дата 9.12.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Насколько я понимаю, это то, что вам требовалось, хотя как-то это сложно. не проще ли просто 
сделать каждую Cell в dataGridView Комбобоксом со своими значениями?
Для быстроты можно использовать не DataGridViewComboBoxCell, а DataGridViewComboBoxColumn.


Мне нужно было, чтобы столбец имел тип DataGridViewTextBoxColumn, и только одна ячейка в нём была комбобоксом, и ещё, чтобы при редактировании определённых ячеек у меня выскакивало окошко для ввода 4-х чисел A,B,C,D (в окошке 4 TextBox), а после выхода из этого окна чтобы в редактируемую ячейку вывелась строка в формате A; B; C; D  ("3.14; 15; 168; 123.65").

Теперь всё работает, thanx  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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