2017-01-01 91 views
1

因此,我创建了一个变量来保存我的剪贴板文本,并且我不知道如何将它附加到列表框。将剪贴板文本追加到列表框

这是据我得到了..

private void clipboardBtn_Click(object sender, EventArgs e) 
{ 
    string items = Clipboard.GetText(); 
    List<string> _items = new List<string>(); 
    _items.AddRange(items); 
} 

但我抛出这个错误..

参数1:无法从 '字符串' 转换为 “System.Collections中。 Generic.IEnumerable'

这是什么原因造成的?我该如何解决?这甚至是将文本附加到列表框的正确方法吗?

-UPDATE-

我现在得到这个,但每次我点击它会覆盖旧的一个按钮,而不是追加一个新的项目列表框中

string items = Clipboard.GetText(); 
    List<string> _items = new List<string>(); 
    _items.Add(items); 
    listBox1.DataSource =_items; 

我如何添加一个新的项目?

+0

的winform或WPF? – Paparazzi

+0

看看我更新的答案也许它会帮助 – jonathana

回答

1

Clipboard.GetText有签名

public static string GetText() 

List<T>.AddRange有签名

public void AddRange(IEnumerable<T> collection) 

所以基本上你想添加一个string作为IEnumerable<T>它给你上面的错误。

为此目的一样,更好地利用List<T>.Add

_items.Add(items); 
+0

更新我的问题 – JonnyKhanas

+0

@JonnyKhanas:是否[这个SO回答](http://stackoverflow.com/a/17615338/1305969)帮助你? – zx485

+0

不幸的不是 – JonnyKhanas

0

你的问题是关于List对象,而不是关于ListBox控制。
AddRange()方法需要一个集合,您可以通过使用Split改变你的字符串集合(阵列)。

_items.Add(YourGetClipBoardTextString); 

您的更新后,可以追加新的项目,以这种方式列表框:

private void clipboardBtn_Click(object sender, EventArgs e) 
{ 
      string YourGetClipBoardTextString = "aaa;bbb;ccc;ddd"; 
      List<string> _items = new List<string>(); 
      _items.AddRange(YourGetClipBoardTextString.Split(';').ToArray()); // you can split the string by any char seperator ";" " ", "," etc... 
} 
如果你不需要分割字符串只使用Add()方法

foreach (string itm in _items) 
    { 
     listBox1.Items.Add(itm); 
    } 
0

由于您在每次点击时创建新的“_items”,因此无法看到旧项目。像这样尝试,

List<string> _items = new List<string>(); 
    private void clipboardBtn_Click(object sender, EventArgs e) 
    { 
     string items = Clipboard.GetText(); 
     _items.Add(items); 
     listBox1.DataSource =_items; 
    } 

_items在方法范围之外声明。

0

首先,你需要将剪贴板内容分成每行字符串,那么你需要将它们添加到列表框中:

string[] items = Clipboard.GetText().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 
listBox1.Items.AddRange(items); 

如果你不想为每个单独的列表框项目行,只是这样做:

listBox1.Items.Add(Clipboard.GetText()); 
0

你的问题是,你每次初始化一个新的列表:

string items = Clipboard.GetText(); 
List<string> _items = new List<string>();//<New list here results in removal of existing item 
_items.Add(items); 
listBox1.DataSource =_items; 

尝试是这样的:

string items = Clipboard.GetText(); 
List<string> _items = listBox1.DataSource as List<string>;// You may have type casting issues here - 
_items.Add(items); 
listBox1.DataSource =_items;