2015-05-13 29 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

相关问题