【问题标题】:Append clipboard text to a listbox将剪贴板文本附加到列表框
【发布时间】:2017-01-01 22:44:29
【问题描述】:

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

据我所知..

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

但这会给我这个错误..

参数 1:不能从 'string' 转换为 'System.Collections.Generic.IEnumerable'

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

-更新-

我现在知道了,但是每次我点击按钮时,它都会覆盖旧按钮,而不是在列表框中添加新项目

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

如何添加新项目?

【问题讨论】:

  • 看看我更新的答案也许会有所帮助

标签: c# .net wpf winforms listbox


【解决方案1】:

Clipboard.GetText 有签名

public static string GetText()

List&lt;T&gt;.AddRange 有签名

public void AddRange( IEnumerable<T> collection )

所以本质上,您是在尝试将string 添加为IEnumerable&lt;T&gt;,这会给您带来上述错误。

最好使用List&lt;T&gt;.Add 来达到这样的目的:

_items.Add(items);

【讨论】:

  • 更新了我的问题
  • @JonnyKhanas:this SO answer 对你有帮助吗?
【解决方案2】:

您的问题是关于 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);
    }

【讨论】:

    【解决方案3】:

    由于您每次点击都会创建新的“_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 在方法范围之外声明。

    【讨论】:

      【解决方案4】:

      您的问题是您每次都在初始化一个新列表:

      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;
      

      【讨论】:

        【解决方案5】:

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

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

        如果您不想为每一行设置单独的 listBox 项,只需执行以下操作:

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

        【讨论】:

          猜你喜欢
          • 2019-01-01
          • 2013-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多