问题描述
最近在做一套进销存的系统,在第三级菜单中有很多按扭要调用不同的窗体!本来只要在每个按扭的点击事件中调用窗体就可以了,可是最近看了SourceGrid的源码发现里面在点击不同单元格调用不同窗体时,他用了一个方法:根据所点击单元格的内容,去找相对的窗体,在实例化对应的窗体然后调用!我在想能不能也通过获得按扭的Text属性,然后去找到对应的窗体并实例化!privatevoidlinkEvents_Executed(objectsender,EventArgse){SourceGrid.CellContextcellContext=(SourceGrid.CellContext)sender;TypeformType=(Type)((SourceGrid.Cells.Cell)cellContext.Cell).Tag;Formform=(Form)Activator.CreateInstance(formType);form.Owner=this;form.Show();}如果有谁看过SourceGrid源码的,可以试试下面是我模仿上面的代码privatevoidButton_click(objectsender,EventArgse){buttonbt=(button)sender;TypeformType=(Type)bt.text;Formform=(Form)Activator.CreateInstance(formType);form.Show();}窗体的Name属性我都是用按扭的Text命名的!系统提示错误是:bt.text是string类型不能类型化大家帮帮忙
解决方案
解决方案二:
一般都把额外的信息放到控件的Tag属性中。string的值要是一个窗体的全名称,比如TestProject.Form2
解决方案三:
TypeformType=(Type)bt.text;这个是强制转换,就是把字符串转换成form类型,肯定是不行的。我用过findControl(stringcontrolID),但可能不能用在你的情况。我猜测的一个方案是把你的formtype都放在一个assembly里面,然后用gettype()