Solved

Vb code to drag multiple items from the MSFlexgrid

Posted on 2007-03-24
1
1,603 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
ID: 18827977
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

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: Martin
Here are a few simple, working, games that you can use as-is or as the basis for your own games. Tic-Tac-Toe This is one of the simplest of all games.   The game allows for a choice of who goes first and keeps track of the number of wins for…
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.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

861 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