954,535 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Adding controls into a ListView

Greetings.
I have searched high and low for the above topic but to no avail :confused:
Is it possible to add a combo box into one of the columns of a listview control?
Please advise.

red_evolve
Posting Whiz
313 posts since Jun 2003
Reputation Points: 53
Solved Threads: 1
 

It is possible. Look into the API "SetParent"

You might want to download the API-Guide Network. (Sorry, can't recall the URL off hand)

cypher
Newbie Poster
17 posts since Jul 2004
Reputation Points: 14
Solved Threads: 0
 

Greetings.
Hey, thanks so much for the "direction".
Did a search in google and I guess I've got a rough picture already.
I'll come back with codes when I'm stuck. ;)
Thanks a lot!

red_evolve
Posting Whiz
313 posts since Jun 2003
Reputation Points: 53
Solved Threads: 1
 

Greetings.
Right, I have came up with a few lines of codes.

I have 6 rows in the listview, and I need to add 1 comboBox to each row at subItem number 2.
At runtime, I could see 1 comboBox at row 1.
I guess all 6 combo boxes are piled up there. :D

Do Until myRS.EOF = True 
        Set objItem = listviewEIP.ListItems.Add(, "A" & myRS!com_code, myRS!com_name) 
        objItem.SubItems(1) = "Something" 
        objItem.SubItems(3) = "Anything" 
        myRS.MoveNext 
    Loop 

    comboID(0).Visible = False 
    With listviewEIP.ColumnHeaders 
    
        Load comboID(1) 
        Call fillCombo(1) 
        comboID(1).Top = listviewEIP.ListItems.Item(1).Height 
        comboID(1).Left = .Item(3).Left 
        comboID(1).Width = .Item(3).Width 
        comboID(1).Visible = True 
        SetParent comboID(1).hWnd, listviewEIP.hWnd 
        comboID(1).ZOrder 
            
        For i = 2 To 6 
            Load comboID(i) 
            fillCombo (i) 
            comboID(i).Top = listviewEIP.ListItems.Item(i - 1).Height 
            comboID(i).Left = .Item(3).Left 
            comboID(i).Width = .Item(3).Width 
            comboID(i).Visible = True 
            SetParent comboID(i).hWnd, listviewEIP.hWnd 
            comboID(i).ZOrder 
        Next i 
    End With


How can I solve that? Please help.
Thanks.

red_evolve
Posting Whiz
313 posts since Jun 2003
Reputation Points: 53
Solved Threads: 1
 

Well, looks like you have the right idea for the SetParent API. In all honesty, I've never tried adding controls to a list view or anything else that has multiple places to put them (aside from a toolbar, but that's slightly different).

You might try to find a way to address subItem2's handle. Every control in Windows has a control (or atleast has the opportunity to apply for one). If you want to think about it in a very basic concept, imagine everything is a picturebox, except not everything has a Picture property. From there, you can see that everything has a Height, Width, and Handle. Beyond that, the controls just add their own properties as needed.

So if you can find a way to retrieve subItem2's hWnd, then you should be in business.

cypher
Newbie Poster
17 posts since Jul 2004
Reputation Points: 14
Solved Threads: 0
 

Greetings.
Ok, I got you.
By the way, I could not fully understand wat does hWnd do.
Could you please explain a little if possible?
In addition, I tried using the combo box's Height property but there is an error stating that combo box's height is read-only, n thus I can't use that parameter to do things with it. I'm not modifying the parameter, but I just want that value.
Please advise.

red_evolve
Posting Whiz
313 posts since Jun 2003
Reputation Points: 53
Solved Threads: 1
 
Greetings. Ok, I got you. By the way, I could not fully understand wat does hWnd do. Could you please explain a little if possible? In addition, I tried using the combo box's Height property but there is an error stating that combo box's height is read-only, n thus I can't use that parameter to do things with it. I'm not modifying the parameter, but I just want that value. Please advise.

Try taking a look at http://www.vbaccelerator.com . He has a whole pile of stuff there about sub classing and so on. In fact I'd be amazed if his freely downloadable enhanced listview didn't already do exactly what you want.

mnemtsas
Posting Whiz in Training
200 posts since Jul 2004
Reputation Points: 16
Solved Threads: 1
 
Greetings. Ok, I got you. By the way, I could not fully understand wat does hWnd do. Could you please explain a little if possible?

Everything in windows is an object. Whenever an object is created, it is given a handle by which windows (or any other program that has access to that handle) can address that object. Forms and controls both have handles, although not all controls register to receive them. That's basically what the hWnd (Some weird way of sayinghandle for a Window.

cypher
Newbie Poster
17 posts since Jul 2004
Reputation Points: 14
Solved Threads: 0
 

Greetings.
Thanks for the url, mnemtsas! Can't really get what you meant by this though:-
In fact I'd be amazed if his freely downloadable enhanced listview didn't already do exactly what you want.
Well, I've browsed thru vbaccelerator , I found something about subclassing.
[1] Add a Check Box to the Left Hand Side of a Drop-Down Combo Box (Currently looking into this as I guess the concept is quite similar.)
[2] Detect when a Combo Box Drops Down or Closes Up (This is indeed very confusing for me!)
Cypher, thanks a lot for the explanation! Understood, but now's time to apply the theory (toughest part! :sad: ).

red_evolve
Posting Whiz
313 posts since Jun 2003
Reputation Points: 53
Solved Threads: 1
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You