已知:
public Hashtable ht=new Hashtable();
public class class1
{
public string name="c1";
}
public class class2
{
public string name="c2";
}
public class class3
{
public string name="c3";
}
// .
// .
// .
//class1,class2,class3……classN 这些类可以看成是一些写好forms窗体类
public class classN
{
public string name="cN";
}
public class change
{
public change()
{
}
public void rename(类型? ci,string stri) //???这个地方怎么定义参数ci???
{
ci.name=stri;
}
}
想要的操作:
//对N个类进行判断操作。如果类被实例化一次,直接修改name;如果没有,则实例化,然后修改name
if (ht中是否记录了对象c1的ID) { c1.name="c11";}
else { c1=new class1(); c1.name="c11";添加c1的ID到ht中 }
if (ht中是否记录了对象c2的ID) { c2.name="c22";}
else { c2=new class2(); c1.name="c22"; 添加c2的ID到ht中 }
if (ht中是否记录了对象c3的ID) { c3.name="c33";}
else { c3=new class3(); c1.name="c33"; 添加c3的ID到ht中 }
// .
// .
// .
if (ht中是否记录了对象cN的ID) { cN.name="cNN";}
else { cN=new classN(); c1.name="cNN"; 添加cN的ID到ht中 }
最终需要的类:(转化为批量操作:)
public void main()
{
change change1=new change();
change1.rename(c2,c2.name+"2")
change1.rename(c5,c5.name+"5")
change1.rename(c99,c99.name+"99")
}
说明
上面那些代码可能语法不对,请高手自己改成C#下的。只希望能看懂我的问题所在。
假设有100个窗体类class1,class2,class3 ... class100,不需要实例化所有的窗体,而是需要对某个窗体操作时,再判断窗体是否被实例化启动了,然后再修改 所实例化的窗体的内容。而且修改时,必须把窗体类当作一个变量方便批量操作。
因此
1 需要定义一个 change类,控制所有的窗体情况。怎么写好这个change类???
2 或者怎么可以把窗体类class1,class2,class....N这些当作一个变量?
直接拿原例来说吧:
frm1 f1= new frm1();
f1.Load += new EventHandler(form_Load);
f1.Closed += new EventHandler(form_Closed);
f1.Show();
frm2 f2= new frm2();
f2.Load += new EventHandler(form_Load);
f2.Closed += new EventHandler(form_Closed);
f2.Show();
frmN fN= new frmN();
fN.Load += new EventHandler(form_Load);
fN.Closed += new EventHandler(form_Closed);
fN.Show();
能不能编写个函数供调用:如下
public void bindForm(System.Windows.Forms fi)
{
frmi fi= new frmi();
fi.Load += new EventHandler(form_Load);
fi.Closed += new EventHandler(form_Closed);
fi.Show();
}
反正就是不知道如何写参数fi的类型,因为frm1,frm2,frm3等等这些类同属于一个命名空间,但父类forms也不对!
怎么可以把frmi这个类,转化为一个可调用的参数
刚查了下,貌似用反射机制来实现。但还是不太会:
public void bindForm(string formclassName)
{
创建formclassName对应的窗体类实例,
调用里面的方法
设置某些成员的属性。
}
互换的青春
智慧大石