将剪贴板文本附加到列表框

时间:2017-01-01 22:44:30

标签: c# .net wpf winforms listbox

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

就我而言......

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

但是这引起了我的错误..

  

参数1:无法转换为&#39; string&#39;至   &#39; System.Collections.Generic.IEnumerable&#39;

造成这种情况的原因以及如何解决?这甚至是将文本附加到列表框的正确方法吗?

-UPDATE -

我现在得到了这个,但每次点击按钮都会覆盖旧按钮,而不是将新项目附加到列表框

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

如何追加新项?

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您的问题是List对象,而不是ListBox控件。
AddRange()方法需要集合,您可以使用Split将字符串转换为集合(数组)。

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()方法:

_items.Add(YourGetClipBoardTextString);

更新后,您可以通过这种方式将新项目附加到列表框中:

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

答案 2 :(得分: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在方法范围之外声明。

答案 3 :(得分:0)

首先,您需要将剪贴板内容拆分为每行的字符串,然后您需要将它们添加到列表框中:

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

如果您不希望每行都有单独的listBox项,请执行以下操作:

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

答案 4 :(得分: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;