类里如何调用窗口控件?
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void dgaddlistbox(string text);
public void addlistbox(string text)
{
if (listBox1.InvokeRequired)
{
dgaddlistbox dg = new dgaddlistbox(addlistbox);
listBox1.Invoke(dg, new object[] { text });
}
else
{
if (listBox1.Items.Count > 100) listBox1.Items.RemoveAt(100);
text = DateTime.Now.ToString() + "|" + text;
listBox1.Items.Insert(0, text);
}
}
public class myclass
{
public string text;
public void my()
{
...
...
...
//这个位置要如何才能调用 addlistbox
//调用位置
}
}
private void button1_Click(object sender, EventArgs e)
{
myclass mc = new myclass();
mc.text = "my text";
Thread t = new Thread(new ThreadStart(mc.my));
t.IsBackground = true;
t.Start();
}
}
}
因为要用带多个参数创建线程,所以用类。但是类里面又没办法用非静态方法。把addlistbox修饰为 static ,addlistbox里的listBox1又会报错。要什么方法才可以在线程里才能设置form控件?首先我的实际应用,线程是带很多参数创建的。上面只是个简单的例子。
[最优解释]
举个例子
Form1中有Button button1
在Form1的后台代码中写一个公开出来的属性btn 其值为button1
Public Button btn
{
get { return this.button1; }
}
然后再其他类中就可以通过Form1的实例调用btn 也就是调用button1了
Form1 fm=new Form1();
fm.btn......... //完成了调用
[其他解释]
myclass mc = new myclass(addlistbox);
public?class?myclass
????????{
private Action Foo;
public myclass(Action foo) { Foo = foo; }
????????????public?string?text;
????????????public?void?my()
????????????{
????????????????...
????????????????...
????????????????...
????????????????//这个位置要如何才能调用?addlistbox
????????????????//调用位置
Foo();
????????????}
????????}
[其他解释]
把Form传给myclass也可以,
[其他解释]
你写的dgaddlistbox这个委托和addlistbox方法是为了在另一个线程中操作控件,
你在my这个方法中直接调用addlistbox()
[其他解释]
我已经用类,所以类里是不能直接调用非静态方法,如果把addlistbox()声明为静态方法,方法里直接引用的控件会报同样的错。
[其他解释]
没看懂,,,,,
[其他解释]
就是这个方法解决,之前我就想怎么实例化来引用,但没想到这个,果断解决问题。
[其他解释]
既然好用,分啊!!!!!!
------其他解决方案--------------------
已经给你一半的分了,关键是,虽然写着不报错,后面就搞大了,问题没有解决,几个线程调用到这个方法,就出几个form1,悲剧!