Reputation: 111
This is how I'm adding the item to the listBox:
this.listBoxSnap.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
And this is how I'm trying to add them to the listView:
ListViewCostumControl.lvnf.Items.AddRange(WindowSnap.GetAllWindows(true, true).ToArray());
This is the listView control code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MinimizeCapture
{
public partial class ListViewCostumControl : UserControl
{
public static ListViewControl lvnf;
public ListViewCostumControl()
{
InitializeComponent();
lvnf = new ListViewControl();
lvnf.Location = new Point(50, 50);
lvnf.Size = new Size(50, 50);
lvnf.View = View.SmallIcon;
lvnf.Dock = DockStyle.Fill;
lvnf.SuspendLayout();
lvnf.LabelEdit = true;
lvnf.Sorting = SortOrder.None;
this.Controls.Add(lvnf);
lvnf.ResumeLayout(false);
}
public class ListViewControl : System.Windows.Forms.ListView
{
public ListViewControl()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(System.Windows.Forms.Message m)
{
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
private void ListViewNFTest_Load(object sender, EventArgs e)
{
}
}
}
The errors I'm getting when trying to add the items to the listView are:
Error 14 The best overloaded method match for 'System.Windows.Forms.ListView.ListViewItemCollection.AddRange(System.Windows.Forms.ListView.ListViewItemCollection)' has some invalid arguments
Error 15 Argument 1: cannot convert from 'MinimizeCapture.WindowSnap[]' to 'System.Windows.Forms.ListView.ListViewItemCollection'
This is the GetAllWindows method:
public static WindowSnapCollection GetAllWindows(bool minimized, bool specialCapturring)
{
windowSnaps = new WindowSnapCollection();
countMinimizedWindows = minimized;//set minimized flag capture
useSpecialCapturing = specialCapturring;//set specialcapturing flag
EnumWindowsCallbackHandler callback = new EnumWindowsCallbackHandler(EnumWindowsCallback);
EnumWindows(callback, IntPtr.Zero);
return new WindowSnapCollection(windowSnaps.ToArray(), true);
}
And this is the WindowSnapCollection:
public WindowSnapCollection(WindowSnap[] items, bool asReadOnly)
{
base.AddRange(items);
base.TrimExcess();
this.asReadonly = asReadOnly;
}
WindowSnap is the name os the class with the GetAllWindow method.
Is this example I did now is a good solution? I added it to the listView control code at the top:
Object myObj = new Object();
ListViewItem[] items = new ListViewItem[8];
Then in constructor:
items[0].Text = myObj.ToString();
items[0].Tag = myObj;
lvnf.Items.AddRange(items);
Do I need the tag? How do I use it instead of making an instance of 8 items?
Upvotes: 0
Views: 853
Reputation: 9610
The problem is what you are trying to add, that is what
WindowSnap.GetAllWindows(true, true).ToArray()
is returning as an argument.
The listbox AddRange parameter accepts two different arguments;
AddRange(Object[])
AddRange(ListBox.ObjectCollection)
So the first accepts any array of objects, and this is what you are using.
ListView however is not as flexible. It accepts;
AddRange(ListViewItem[])
AddRange(ListView.ListViewItemCollection)
Therefore, you cannot send an array of objects as you can with listbox. You have to be more specific in the type of data you pass to it.
I would suggest that you create some kind of wrapper around it to change the format of the data you want into the expected input format.
Upvotes: 3