Перетаскивание ссылки на объект VB.Net - PullRequest
1 голос
/ 26 ноября 2008

Я пытаюсь «поменять» содержимое двух ячеек и их сопоставления. Для этого мне нужно перетащить ссылку на ячейку, а не на само строковое значение. Затем я могу использовать эту ссылку для обновления словаря, а также получить значение. Это позволяет мне делать своп, так как у меня будет ссылка на старую ячейку, чтобы добавить туда необходимое значение.

У меня проблема в том, что я не знаю, как передать ссылку на ячейку:

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    If e.Button = MouseButtons.Left Then
        DataGridView1.DoDragDrop(DataGridView1.CurrentCell, DragDropEffects.Copy)
    End If

End Sub

и в событии отбрасывания:

Private Sub DataGridView1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop

   'Problem is here -->'Dim copyedFromCell As DataGridViewCell = DirectCast(e.Data(), DataGridViewCell)** 
    Dim copyedFromKey As String = GetMappingForCell(copyedFromCell) 
    Dim thisKey As String = GetMappingForCell(DataGridView1.CurrentCell)
    Dim copyedFromValue As String = copyedFromCell.Value
    Dim thisValue As String = DataGridView1.CurrentCell.Value

    mappings(copyedFromKey) = DataGridView1.CurrentCell
    mappings(thisKey) = copyedFromCell

    DataGridView1.CurrentCell.Value = copyedFromValue
    copyedFromCell.Value = thisValue

End Sub

Возможно ли то, что я пытаюсь сделать? Я полностью сломал это? Спасибо:)

1 Ответ

1 голос
/ 03 марта 2009

Ваш e.Data является IDataObject, , а не значением, которое вы отправили с DoDragDrop.

Чтобы получить отправленное вами значение, вы должны позвонить e.Data.GetData(...).

Чтобы исправить ваш код, замените проблемную строку на:

Dim copiedFromCell As DataGridViewCell = _
   e.Data.GetData(GetType(DataGridViewTextBoxCell))

(или тип DataGridView1.CurrentCell.)

Вы можете получить список доступных типов, позвонив по номеру e.Data.GetFormats().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...