QuickBooksDev Ответов: 2

Как перетащить файл из проводника в ячейку datagridview в окне VB.NET


Привет
Я пытаюсь понять, как перетащить файл изображения из Проводника Windows в ячейку DataGridView в форме Windows.

Основная функция dropDrop работает, но я не знаю, в какую ячейку нужно упасть.
Поэтому я пытаюсь получить столбец/строку ячейки из других событий, но он попадает не в ту ячейку.

То, что я видел, - это использовать HitTest в событии DaaGriveView DragDrop, но тип hittest всегда равен none, поэтому индекс столбца и строки всегда равен -1. (Тип должен быть ячейка).

Итак, каков же правильный метод перетаскивания файла изображения из Проводника Windows в ячейку в DataGridView?

Спасибо

Что я уже пробовал:

Использование HitTest но тип всегда отсутствует
Использование других событий для получения последнего хорошего столбца/строки ячейки.

Maciej Los

А что вы пробовали?

2 Ответов

Рейтинг:
2

Maciej Los

Цитата:
Использование HitTest но тип всегда отсутствует

Практическое руководство.Метод HitTest (Int32, Int32) (System.Окна.Формы)[^] возвращает информацию о местоположении, такую как индексы строк и столбцов, заданные координаты x и Y.

Ну, вы не упомянули о том, как вы получаете координаты мыши... Так что, пожалуйста, проверьте это: c# - контекстное меню Datagridview всегда показывает -1 в hittest[^] чтобы получить более подробную информацию о вашей проблеме.


Вот вам статья: Перетаскивание текста из одного Datagrirdview в другое в приложении C# Windows[^] что может быть полезно для решения вашей проблемы.


QuickBooksDev

Вот раздел кода DropDrag, но он из e.x и e.y. я рассмотрю другую публикацию, но это из внешнего источника (проводник файлов), а не из другой ячейки.

QuickBooksDev

Private Sub DataGridView1_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView1.DragDrop
Dim C, R as integer
...
Dim myDGV As DataGridView = sender
        Dim HtInfo As DataGridView.HitTestInfo = myDGV.HitTest(e.X, e.Y)
        If HtInfo.Type = DataGridViewHitTestType.Cell Then
            C = HtInfo.ColumnIndex
            R = HtInfo.RowIndex
            DropColNo = C : DropRowNo = R
            lblDebug.Text &= " Hit=" & C & "," & R & " "
            myUseCol = C : myUseRow = R
            'DataGridView1.CurrentCell = DataGridView1(C, R)
            Debug.WriteLine("Drag Drop Current HIT Cell " & C & "," & R)
            GoTo DoPic
        Else
            C = HtInfo.ColumnIndex : R = HtInfo.RowIndex
            Debug.WriteLine("Drag Drop Current Bad HT=" & C & "," & R)
            lblDebug.Text &= " Invalid type " & HtInfo.Type.ToString()
            If DropColNo > -1 AndAlso DropRowNo > -1 Then
                myUseCol = DropColNo : myUseRow = DropRowNo
                'DataGridView1.CurrentCell = DataGridView1(DropColNo, DropRowNo)
                Debug.WriteLine("Drag Drop bad Hit Cell " & DropColNo & "," & DropRowNo & " " & HtInfo.Type.ToString())
            Else
                lblDebug.Text &= " invalid drop=" & DropColNo & "," & DropRowNo & " "
                Debug.WriteLine("Drag Drop bad dropCol/Row invalid drop=" & DropColNo & "," & DropRowNo & " ")
            End If
        End If
...
End Sub

Maciej Los

Вы должны справиться с 3 событиями: CellMouseDown, DragEnter, DragDrop- но вы используете только один. Следуйте за этим: Как обеспечить функциональность перетаскивания файлов в приложении Visual C# и измениться в соответствии с вашими потребностями.

Рейтинг:
0

QuickBooksDev

Похоже, что у этого другого сообщения есть решение и использование

Point p = dataGridView2.PointToClient(new Point(e.X, e.Y);
DataGridView.HitTestInfo info = dataGridView2.HitTest(p.X, p.Y);


Решить проблему.

Спасибо