Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как эмулировать нажатие кнопки мыши? / 8 сообщений из 8, страница 1 из 1
19.03.2005, 09:16
    #32969434
Deft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
Народ! Ситуация такая - есть стандартный DataGrid, и есть ContextMenu. Все работает, все классно, по нажатию правой кнопки мыши выпадает менюшка именно в том месте где курсор, но ячейка над которой происходит нажатие не получает фокус (из-за того что правая кнопка), поэтому вопрос:

Как сделать так, чтобы при нажатии правой кнопки происходило выделение нужной ячейки?
...
Рейтинг: 0 / 0
19.03.2005, 11:44
    #32969494
JeSert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
один из вариантов создать обработчик для левой кнопки пустой а потом его вызвать.
...
Рейтинг: 0 / 0
19.03.2005, 11:59
    #32969501
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
Не думаю, что это необходимо - потому что при нажатии правой кнопкой над выделенной ячейкой вылетает не контекстное меню а меню с Copy, Paste... (оно как бы и логично). Получается что как только мы правой кнопкой будем выделять ячейку - будет либо теряться контекстное меню, либо меню с Copy, Paste. К сожалению пока не нашёл как выделить ячейку, зато знаю как по нажатию кнопки определить местоположение мыши - может быть тебе поможет, если ты всё таки решишь выделять ячейки правой кнопкой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseDown
        If e.Button = MouseButtons.Right Then

            Dim myGrid As DataGrid = CType(sender, DataGrid)
            Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
            hti = myGrid.HitTest(e.X, e.Y)
            Dim message As String = "You clicked "

            Select Case hti.Type
                Case System.Windows.Forms.DataGrid.HitTestType.None
                    message &= "the background."
                Case System.Windows.Forms.DataGrid.HitTestType.Cell
                    message &= "cell at row " & hti.Row & ", col " & hti.Column
                Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader
                    message &= "the column header for column " & hti.Column
                Case System.Windows.Forms.DataGrid.HitTestType.RowHeader
                    message &= "the row header for row " & hti.Row
                Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize
                    message &= "the column resizer for column " & hti.Column
                Case System.Windows.Forms.DataGrid.HitTestType.RowResize
                    message &= "the row resizer for row " & hti.Row
                Case System.Windows.Forms.DataGrid.HitTestType.Caption
                    message &= "the caption"
                Case System.Windows.Forms.DataGrid.HitTestType.ParentRows
                    message &= "the parent row"
            End Select

            Console.WriteLine(message)
        End If
    End Sub
...
Рейтинг: 0 / 0
19.03.2005, 12:40
    #32969517
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
Вот так ячейка будет выбираться по правому клику (LOL даже сконтекстным меню - только сейчас попробовал ):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseDown
        If e.Button = MouseButtons.Right Then

            Dim myGrid As DataGrid = CType(sender, DataGrid)
            Dim hti As System.Windows.Forms.DataGrid.HitTestInfo = myGrid.HitTest(e.X, e.Y)
     
            If hti.Type = DataGrid.HitTestType.Cell Then
                Dim m As DataGridCell
                m.ColumnNumber = hti.Column
                m.RowNumber = hti.Row
                DataGrid1.CurrentCell = m
            End If
        End If
    End Sub
...
Рейтинг: 0 / 0
19.03.2005, 16:04
    #32969658
Deft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
Спасибо хлопцы!
Столбцы в таблице заменены на NoEditable (грубо говоря написан класс который не позволяет входить в режим редактирования ячейки поэтому контекстное меню самой ячейки не появляется), поэтому никаких конфликтов с системной менюшкой и моей, не будет
...
Рейтинг: 0 / 0
19.03.2005, 18:07
    #32969711
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
авторСтолбцы в таблице заменены на NoEditable (грубо говоря написан класс который не позволяет входить в режим редактирования ячейки поэтому контекстное меню самой ячейки не появляется)
Если не в лом, положи сюда этот класс или вышли на мыло (очень интересно поглядеть).
...
Рейтинг: 0 / 0
21.03.2005, 11:49
    #32970871
Deft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
2vladgrig

Често говоря мне было бы стыдно называть это классом, просто "кастрированный" класс столбца

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Namespace DataGridBrowser
    Public Class DGNoActiveCellColumn
        Inherits DataGridTextBoxColumn
        Private SelectedRow As Integer
        Public Event StartEditing()
        Protected Overloads Overrides Sub Edit(ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)
            RaiseEvent StartEditing()
            Me.DataGridTableStyle.DataGrid.Select(rowNum)
            SelectedRow = rowNum

        End Sub

     End Class
End Namespace

А потом когда автодизайнер кода при добавлении столбцов в стиле проставит принадлежность столбцов к DataGridTextBoxColumn, заменить их на, у меня к примеру DGNoActiveCellColumn.

Но возникает проблема, которая рождает продолжение форума:
при таком раскладе все классно, выделяется строка полностью, такой эффект мне был нужен, но есть маленькое "но". Если мы кликаем по ячейке один раз, то выделяется вся строка. Если мы кликаем снова по этой ячейке - выделение исчезает. Не могу ничего с этим сделать. Я вышел из положения событием Mouse_Up ==> Select(CurrentRowCell). Но все равно не приятно - на время нажатой кнопки выделение изчезает.
...
Рейтинг: 0 / 0
21.03.2005, 16:59
    #32971895
vladgrig
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как эмулировать нажатие кнопки мыши?
Спасибо, только этот namespace мне уже был известен... Я часом подумал что у тебя есть что то вроде класса для выделения не целой строки а одной ячейки в строке - вот на это я бы посмотрел с превеликим удовольствием. Ни у кого примерчика не завалялось?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как эмулировать нажатие кнопки мыши? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]