如题,我创建了一个WinForm应用程序,如ApplicationTest,里面有一个窗体FormTest,FormTest中有几个Button按钮,btnA,btnB,btnC然后我又建了一个类库ClassLib,里面有个方法MyInitalStyle()
我想请教一下,这个方法里面有没有什么办法可以获取设置FormTest中的按钮的属性和事件,代码是怎么写的?
我想请教一下,这个方法里面有没有什么办法可以获取设置FormTest中的按钮的属性和事件,代码是怎么写的?
请问具体代码是怎么写的呢?
我在类库里的类继承了UserControl,然后在方法里写
Form frm=this.findForm();
再遍历frm里面的控件,但是仔细看了看是不行的,然后我就不知道还能怎么写了,有哪位高手指点一下
private Button bt;
PUBLIC CLASS A
{
public a(Button a)
{
this.bt=a;//这样你就可以把WINFORM的BUTTON传过来了,其他也是一样的方法
}
}
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);
}
在web里通过类继承是可以实现的
WinForm不行吗?
然后在MyInitalStyle方法里面想办法去得到一个FormTest的引用,通过那个引用就可以访问到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,了解下具体的实现过程
不对呀,
楼主对于属性的赋值不多,
你可以单独将这个属性设为public就行了,不用把空间所有的属性都设为public
个人觉得不违反封装,
你试了我的方法了吗?
我觉得如果楼主不想要public的话,可以试试private,如果出了问题,我再研究下可加我qq讨论~~我qq:164184837
这句错了。
FORM1 FM=(FROM1)FRM;
然后再调用。
用反射也可以。只是速度慢一些。
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(),就可以给按钮设置样式,是可以通用整个项目的,我主要是在虚方法中不知道怎么写代码来动态获取当前用户控件中的按钮