Solved

Vb code to drag multiple items from the MSFlexgrid

Posted on 2007-03-24
1
1,595 Views
Last Modified: 2013-11-25
I have a Treeview control and MSFlexgrid in my VB application. The records in the grid will be displayed based on the folder selected in the treeview. Now i want to drag multiple items from the grid and drop those into a folder in the treeview so that the items from one folder will be moved to the dropped folder. I have done it. I have written the drag event in the Mousedown event of MSFlexgrid

My problem is, i cannot select the multiple items in the grid with the mouse but i can do so by using shift key and mouse left button. This is because the drag event is written in Mousedown event of the grid.

My code in Mousedown event of MSFlexgrid is, (VB code)
drag_listingsids is the variable that stores the id of each row in the grid.

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
If frmmain.MSFlexGrid1.RowSel > 0 And frmmain.MSFlexGrid1.row > 0 Then
    j = 1
    current_row = frmmain.MSFlexGrid1.row
    end_row = frmmain.MSFlexGrid1.RowSel
    If frmmain.MSFlexGrid1.row <= frmmain.MSFlexGrid1.RowSel Then
        For i = frmmain.MSFlexGrid1.row To frmmain.MSFlexGrid1.RowSel
            If drag_listingids = "" Then
                drag_listingids = MSFlexGrid1.TextMatrix(i, 0)
            Else
                drag_listingids = drag_listingids & "," & MSFlexGrid1.TextMatrix(i, 0)
            End If
        Next
    ElseIf frmmain.MSFlexGrid1.row > frmmain.MSFlexGrid1.RowSel Then
        For i = frmmain.MSFlexGrid1.RowSel To frmmain.MSFlexGrid1.row
            If drag_listingids = "" Then
                drag_listingids = MSFlexGrid1.TextMatrix(i, 0)
            Else
                drag_listingids = drag_listingids & "," & MSFlexGrid1.TextMatrix(i, 0)
            End If
        Next
    End If
End If
MSFlexGrid1.OLEDrag                   ''''''''''''''''''''''''''  DRAG  ''''''''''''''''''''
End If
End Sub


In short what i want to do is, select multiple items in the grid using mouse, drag them and drop them into the treeview folder.
0
Comment
Question by:str_kani
1 Comment
 
LVL 32

Accepted Solution

by:
Robberbaron (robr) earned 500 total points
Comment Utility
MSFlexGrid cant act as an normal DrgSource as you found.

I tried it using Right-mouse as the drag action..... it will trigger ok provided the target has OLEDropMode=manual

Non standard I know but it works.


see http://www.codeguru.com/forum/archive/index.php/t-8455.html for more discussion. He used a timer control to determine wether the Drag should enable which is probably more intuitive.


'--------------------------------

Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim j As Integer, i As Integer
    Dim current_row As Integer, end_row As Integer
   
    If Button = vbRightButton Then
        If Me.MSFlexGrid1.RowSel > 0 And Me.MSFlexGrid1.Row > 0 Then
            j = 1
            current_row = Me.MSFlexGrid1.Row
            end_row = Me.MSFlexGrid1.RowSel
        End If
        MSFlexGrid1.OLEDrag                 ''''''''''''''''''''''''''  DRAG  ''''''''''''''''''''
    End If
End Sub


Private Sub MSFlexGrid1_OLEStartDrag(Data As MSFlexGridLib.DataObject, AllowedEffects As Long)
'http://www.codeguru.com/forum/archive/index.php/t-8455.html
   
    Dim sTmpStr As String
    Dim iVal As Integer
    Dim i As Integer
    '
    sTmpStr = ""
    '
    '


    With MSFlexGrid1
   
      'populate drag info
       mstrDragInfo = "test2"
       
    ' Build up the data to copy over to the other grid
    ' In this case, it's a tab-delimeted list of the selected row
       
        For i = .Col To .ColSel
            sTmpStr = sTmpStr & MSFlexGrid1.TextMatrix(.Row, i) & vbTab
        Next

        'set data - has to be set even if drag data comes from other sources!
        Data.SetData sTmpStr, vbCFText  'send the control name
       
        'set drop effect
        AllowedEffects = vbDropEffectCopy
       
    End With
End Sub


Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

' get the data from the clipboard and copy it to the drop-flexgrid
'
    Text1.Text = ""
    If Data.GetFormat(vbCFText) = True Then
        Text1.Text = Data.GetData(vbCFText)
    End If
    MsgBox "DragDrop:"
End Sub

Private Sub Text1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
    Text1.Text = "qwe"
End Sub


0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Introduction While answering a recent question (http://www.experts-exchange.com/Q_27402310.html) in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now