Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Получить значение из под мышки в DataGrid.


Автор: vladd 26.3.2012, 18:10
Здравствуйте.
Как получить значение из ячейки строки в DataGrid над которой находится мышка?
Т.е. сначало надо определить строку над которой находится мышка, а потом считать значение из ячеек. 
Кроме как через координаты не имею представления как это можно сделать без клика. Помогите пожалуйста.

Автор: diadiavova 26.3.2012, 18:57
Отлови событие CellMouseEnter, там в аргументах найдешь и строку и столбец, можешь передать их полям класса и они всегда будут возвращать актуальные индексы.

Автор: vladd 27.3.2012, 07:33
Спасибо! Все получаю нужную строку. Но возник еще вопрос. Как сделать чтобы  CellMouseEnter работал только когда я в нем вожу мышкой? Сейчас он у меня работает даже если я в режиме отладки программы нахожусь в коде, а форма программы на втором уровне под окном VS.

Автор: diadiavova 27.3.2012, 08:12
Цитата(vladd @  27.3.2012,  08:33 Найти цитируемый пост)
 Как сделать чтобы  CellMouseEnter работал только когда я в нем вожу мышкой? 

Так и должно по идее.
Цитата(vladd @  27.3.2012,  08:33 Найти цитируемый пост)
Сейчас он у меня работает даже если я в режиме отладки программы нахожусь в коде, а форма программы на втором уровне под окном VS. 

Не совсем понял, что значит работает, по идее он должен срабатывать именно тогда, когда мышка наводится на ячейку. Можно, конечно, поизголяться и выполнять действия либо по условию, либо вообще снимать обработчик с события, когда он не нужен (RemoveHandler), но не знаю, хорошая ли это идея.

Автор: vladd 27.3.2012, 09:09
На снимке видно на втором плане форма и DataGrid. Когда я ставлю точку останова в коде во время работы программы, то она срабатывает и показывает 12 строку DataGrid. Т.е. срабатывает через VS, как будто её и нет. Это или глюк VS, или я чего то делаю не так. 

Добавлено @ 09:18
user posted image

Автор: diadiavova 27.3.2012, 09:37
vladd, возможно это последняя ячейка, на которую попал курсор перед тем, как ты перешел к студии? Трудно сказать, я ведь не знаю, какую ты там логику запилил.

Автор: vladd 27.3.2012, 10:20
Сделал отдельно программку TestDataGrid. Там только форма и DataGrid. Если запускать её из кода, поставив сразу точку останова, то получается тот же самый эффект.  CellMouseEnter работает через VS. 
Код
Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        DataGridView1.Rows.Add(20)
        DataGridView1.Height = 900
    End Sub

    Private Sub DataGridView1_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellMouseEnter
        Dim R As Integer       
        If e.RowIndex >= 0 Then
            R = e.RowIndex
        End If
    End Sub
End Class


Код простейший.

Автор: diadiavova 27.3.2012, 16:20
Цитата(vladd @  27.3.2012,  11:20 Найти цитируемый пост)
Сделал отдельно программку TestDataGrid. 

Вообще-то надо было саму программу выложить.
Цитата(vladd @  27.3.2012,  11:20 Найти цитируемый пост)
 Если запускать её из кода, поставив сразу точку останова, то получается тот же самый эффект.  CellMouseEnter работает через VS. 

Сложно сказать, очень может быть, что это проблема даже не студии, а взаимодействия WinForm и WPF. Гуй студии написан с использованием последней, а впф не использует контролов из user32.dll, поэтому иногда при взаимодействии могут быть такие эффекты. Это предположение, конечно, но там и другие нюансы есть, например, когда в студии открываешь проект, то при наведении на ссылку на стартовой странице появляется тултип, если в процессе загрузки проекта перейти к другому приложению, то этот тултип будет отображаться поверх его окна вплоть до окончания загрузки. Скорей всего этот эффект из той же оперы.

Автор: vladd 28.3.2012, 09:44
Цитата(diadiavova @ 27.3.2012,  16:20)

Вообще-то надо было саму программу выложить.

А как можно выложить исходник без файлообменника в rar, силами форума? 

Автор: diadiavova 28.3.2012, 09:49
Цитата(vladd @  28.3.2012,  10:44 Найти цитируемый пост)
А как можно выложить исходник без файлообменника в rar, силами форума?  

Внимательнее изучи форму отправки сообщения. Там есть поле для ввода имени файла с кнопкой "Обзор" рядом.

Автор: vladd 28.3.2012, 12:57
Цитата(diadiavova @ 28.3.2012,  09:49)

Внимательнее изучи форму отправки сообщения. Там есть поле для ввода имени файла с кнопкой "Обзор" рядом.

Пробовал, загрузка идет, а в предварительном просмотре уже нет файла. Т.е. файл не закрепляется в сообщении.  
Оказывается закрепляется, только в предварительном просмотре его нет. Поэтому и задал этот вопрос. 
Закрепил исходник  по Data Grid.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)