2017-01-01 35 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;