2015-05-13 27 views
2

嗨,我想收集this庫的輸出到列表框中。不能添加字符串到列表框

下面是從測試項目代碼一部分,我試圖修改:

public partial class Form1 : Form 
{ 
    D.Net.Clipboard.ClipboardManager Manager; 

    public Form1() 
    { 
     InitializeComponent(); 
     Manager = new D.Net.Clipboard.ClipboardManager(this); 
     Manager.Type = D.Net.Clipboard.ClipboardManager.CheckType.Text; 
     Manager.OnNewTextFound += (sender, eventArg) => 
     { 
      button1.Text = eventArg;   //just testing, working correctly 
      listBox1.Items.Add(eventArg);  //does not show neither result nor any error 
      MessageBox.Show(String.Format("New text found in clipboard : {0}", eventArg)); 
     }; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     listBox1.Items.Add("test");    //working correctly 
    } 
} 

問題是當我嘗試添加項目到它什麼也不做的名單,以及代碼進一步線(以這個功能)根本不運行。

我試圖通過一些自定義類和不同的表達式來修復它,但沒有爲我工作(是的,我是一個noob)。還試圖用textBox來做,結果是一樣的,但按鈕上的文本會按照它應該改變。

看起來像完全跛腳的問題,但我花了近5個小時的谷歌搜索,閱讀微軟文檔,SO,最接近我可以得到的是this,因爲我可以看到東西建議那裏已經實施。

+0

;',做了'MessageBox'工作是否正確? –

+0

嘗試使用'listBox1.Items.Add(eventArg.ToString());'看看是否有效。 –

+0

'button1.Text = eventArg;'甚至不會爲我編譯。 – Ulric

回答

1

OnNewTextFound事件正在從UI單獨的線程上觸發,因此您嘗試更新UI失敗。在另一個線程中拋出異常,放棄該方法的其餘部分,但是UI線程繼續執行。

你必須調用Invoke()以執行代碼後面的UI線程上:如果您刪除`listBox1.Items.Add(eventArg)

listBox1.Invoke(new MethodInvoker(delegate { listBox1.Items.Add(eventArg); })); 
-1

在構建表單的過程中,無法將項目添加到列表框中。您需要將代碼移到Load事件中。

+0

剛剛嘗試過,結果是一樣的。 – Obelus

0

您將EventArgs添加到ListBox的Items列表中。是否有可添加的eventArgs。[someString]?

+0

不,VS建議只是非標準操作,並且在庫代碼中沒有任何聲明,但是我可以看到'string text'。 – Obelus

+0

我現在看到了。委託用第二個參數聲明爲一個字符串。我的下一個問題是事件何時被解僱? eventArg能否爲空?也許添加一個空檢查只添加一個值的項目。即。如果(!string.IsNullOrEmpty(eventArg)){listBox1.Items.Add(eventArg); } – iCode

相關問題