I've just had one of those doh! moments so I thought I'd write about it here in case I ever forget it.
I've avoided using the listbox for years and years (since VB5 I think) since it doesn't fill a specified height.
Forced back to a listbox for a bit of owner draw code I want to implement (which is really cool and easy in .net by the way) I was hit by my age old problem.. then a property just jumped out at me, IntegralHeight which is set to true by default, this is the magic little thing I've been looking for which (if set to false) stops the listbox resizing to a multiple of it's item height. I'm not sure how long this has been here and I feel an idiot for missing it if it was in VB5 but now I know, and I'll use listboxes for more stuff rather than stick with listviews in detail mode.