首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

类里怎么调用窗口控件

2012-12-15 
类里如何调用窗口控件?namespace test{public partial class Form1 : Form{public Form1(){InitializeComp

类里如何调用窗口控件?


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,悲剧!

热点排行