如题,我创建了一个WinForm应用程序,如ApplicationTest,里面有一个窗体FormTest,FormTest中有几个Button按钮,btnA,btnB,btnC然后我又建了一个类库ClassLib,里面有个方法MyInitalStyle()
我想请教一下,这个方法里面有没有什么办法可以获取设置FormTest中的按钮的属性和事件,代码是怎么写的?

解决方案 »

  1.   

    to Cherishny
     请问具体代码是怎么写的呢?
      

  2.   

    to xunkai0823
      我在类库里的类继承了UserControl,然后在方法里写
    Form frm=this.findForm();
    再遍历frm里面的控件,但是仔细看了看是不行的,然后我就不知道还能怎么写了,有哪位高手指点一下
      

  3.   

    可以的  在方法的构造函数里写比如//定义一个BUTTON类的全局变量
    private Button bt;
    PUBLIC CLASS A
    {
             public a(Button a)
             {
                this.bt=a;//这样你就可以把WINFORM的BUTTON传过来了,其他也是一样的方法
             }
    }
      

  4.   

    记得使用类库的时候  要using 类库名
      

  5.   


     public  class Styles
        {
            public Color TxtBackColor
            {
                get { return Color.Blue; }
            }
            public Color TxtForeColor
            {
                get { return Color.Red; } 
            }        public void SetStyles(Control control)
            {
                control.BackColor = this.TxtBackColor;
                control.ForeColor = TxtForeColor;
            }
        }//form 里面
             public Form1()
            {
                InitializeComponent();
                Styles s = new Styles();
                s.SetStyles(this.button1);
            }
      

  6.   

    不是的,我的意思是MyInitalStyle() 方法不用传参进去的,在类库ClassLib里这个方法是个虚方法,在应用程序里使用的时候,FormTest会继承ClassLib类,并重写MyInitalStyle() ,MyInitalStyle() 里主要是给窗体的Button控件的Tag属性赋值,然后再调用基类中的MyInitalStyle()--base.MyInitalStyle(),使用重写方法里的Button的Tag值做相关的操作
      

  7.   

    在ClassLib里定义按钮,MyInitalStyle设置按钮属性
    在web里通过类继承是可以实现的
      

  8.   

    to wuyq11
    WinForm不行吗?
      

  9.   

    绝对是可以的你先把btnA,btnB,btnC的访问级别设置成public
    然后在MyInitalStyle方法里面想办法去得到一个FormTest的引用,通过那个引用就可以访问到btnA,btnB,btnC只是你这么做违反了封装,你这样做很别扭
      

  10.   

    这样的方法,你看行不行对于FormTest的Button按钮,btnA,btnB,btnC 
    用一个函数来定义它的属性,这样你就可以调用这个函数,然后设置它的属性
    如下:
    public string function
    {
       get
      {
       return"This is the property value"
      }
       set
      {
       //do whatever needs to be done to set the property
      }
    }然后在类库ClassLib前面加上using ApplicationTest
    你就可以调用FormTest设置属性了
    调用方式为:
    ApplicationTest.FormTest.function楼主如果在线话,可以加我qq商讨下,这只是初步想法,没有在vs2005上验证,不知道可不可行,如果可行希望楼主加个qq,了解下具体的实现过程
      

  11.   


    不对呀,
    楼主对于属性的赋值不多,
    你可以单独将这个属性设为public就行了,不用把空间所有的属性都设为public
    个人觉得不违反封装,
      

  12.   

    不把访问级别设置为public的,只是给它的Tag赋值
      

  13.   

    可以:你把Button控件类做为参数传递就可以。如public static MyInitalStyle(Button obj)还有就是通过继承和属性来设计.
      

  14.   

    通过继承和属性来设计?这个的思路又是怎么样的呢,你说的把Button控件类做为参数传递不是我想要的
      

  15.   


    你试了我的方法了吗?
    我觉得如果楼主不想要public的话,可以试试private,如果出了问题,我再研究下可加我qq讨论~~我qq:164184837
      

  16.   

    Form frm=this.findForm();
    这句错了。
    FORM1 FM=(FROM1)FRM;
    然后再调用。
    用反射也可以。只是速度慢一些。
      

  17.   

    我贴一下我代码详细说下把~~~
    namespace ZLXControl
    {
        public class BaseControl : UserControl
        {
           /// <summary>
           /// 重写控件样式
            /// </summary>
            protected virtual void InitialControlStyle()
            {
                try
                {
                    Form frm = this.FindForm();
                    ControlCollection controls = frm.Controls;
                    foreach (Control control in controls)
                    {
                        if (control is Button)
                        {
                            Button btn = (Button)control;
                            btn.Image = (Image)rsBaseControl.ResourceManager.GetObject(btn.Tag.ToString());
                        }
                    }
                }
                catch (Exception ex)
                {
                    FrameWork.WriteSystemLog(2, 3, "0000", ex.Message);
                    throw new SystemException(ex.Message, ex);
                }
            }
        }
    }
    在ZLXControl这里就定义了这个虚方法,然后在应用程序ApplicationTest的用户控件TestControl后台代码里,TestControl又继承了BaseControl ,并在里面重载了InitialControlStyle()
    public class TestControl: BaseControl 
    {
      protected override void InitialControlStlye()
            {
                try
                {
                    btnSearch.Tag = "s0000-0000";
                    btnQuery.Tag = "s0000-0000";
                    base.InitialControlStlye();
                }
                catch (Exception ex)
                {
                }
            }
    }这里在InitialControlStlye()里面给用户控件TestControl的按钮控件的Tag赋值,再调用基类,也就是
    BaseControl类的InitialControlStlye()方法为TestControl的按钮设置样式这样做我主要是要在应用程序中每创建一个用户控件,我只要继承BaseControl然后在里面重写InitialControlStlye(),给当前用户控件的按钮的Tag赋值,再调用基类InitialControlStlye(),就可以给按钮设置样式,是可以通用整个项目的,我主要是在虚方法中不知道怎么写代码来动态获取当前用户控件中的按钮
      

  18.   

    我给个建议:“引用”---添加 ---System.Windows.Form 然后,类库,就可以条用控件名的参数