读书人

类里怎么调用窗口控件

发布时间: 2012-12-15 15:16:03 作者: rapoo

类里如何调用窗口控件?


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()
[其他解释]
引用:
你写的dgaddlistbox这个委托和addlistbox方法是为了在另一个线程中操作控件,

你在my这个方法中直接调用addlistbox()



我已经用类,所以类里是不能直接调用非静态方法,如果把addlistbox()声明为静态方法,方法里直接引用的控件会报同样的错。


[其他解释]
引用:
myclass mc = new myclass(addlistbox);

public class myclass
{
private Action Foo;
public myclass(Action foo) { Foo = foo; }
public string……




没看懂,,,,,
[其他解释]
引用:
举个例子
Form1中有Button button1
在Form1的后台代码中写一个公开出来的属性btn 其值为button1
Public Button btn
{
get { return this.button1; }
}

然后再其他类中就可以通过Form1的实例调用btn 也就是调用button1了
Form1 fm=new Form……



就是这个方法解决,之前我就想怎么实例化来引用,但没想到这个,果断解决问题。
[其他解释]
引用:
引用:举个例子
Form1中有Button button1
在Form1的后台代码中写一个公开出来的属性btn 其值为button1
Public Button btn
{
get { return this.button1; }
}

然后再其他类中就可以通过Form1的实例调用btn 也就是调用butto……

既然好用,分啊!!!!!!
------其他解决方案--------------------


引用:
引用:引用:举个例子
Form1中有Button button1
在Form1的后台代码中写一个公开出来的属性btn 其值为button1
Public Button btn
{
get { return this.button1; }
}

然后再其他类中就可以通过……



已经给你一半的分了,关键是,虽然写着不报错,后面就搞大了,问题没有解决,几个线程调用到这个方法,就出几个form1,悲剧!

读书人网 >C#

热点推荐