我是C#的半新手,我希望避免代码重复。我有一个父表单和一堆子表单。子表单都包含序列化文本框并将它们发送到公共接口对象的代码:
public partial class Normal : UserControl
{
Interfacer normintobj = new Interfacer(STATCTRL.NORMDIST);
public Normal()
{
InitializeComponent();
}
private void z_tb_KeyDown(object sender, KeyEventArgs e)
{
sendinfo(e,STATMAIN.VINP_Z_NORMAL);
}
private void serializethensendinfo()
{
normintobj.tbs[0] = UITest.testui(z_tb.Text);
normintobj.tbs[1] = UITest.testui(Mean_tb.Text);
normintobj.tbs[2] = UITest.testui(sd_tb.Text);
normintobj.tbs[3] = UITest.testui(left_tb.Text);
normintobj.tbs[4] = UITest.testui(tt_tb.Text);
}
private void unserializethensendinfo()
{
z_tb.Text = Convert.ToString(normintobj.tbs[0]);
Mean_tb.Text = Convert.ToString(normintobj.tbs[1]);
sd_tb.Text = Convert.ToString(normintobj.tbs[2]);
left_tb.Text = Convert.ToString(normintobj.tbs[3]);
tt_tb.Text = Convert.ToString(normintobj.tbs[4]);
}
private void sendinfo(KeyEventArgs e,int field)
{
serializethensendinfo();
normintobj.chk_tb_type(ref textBlock1, field, e);
unserializethensendinfo();
}
private void sendinfo(int field)
{
serializethensendinfo();
normintobj.chk_tb_type(ref textBlock1, field);
unserializethensendinfo();
}
private void Mean_tb_KeyDown(object sender, KeyEventArgs e)
{
sendinfo(e,STATMAIN.NORMDIST_MID);
}
private void sd_tb_KeyDown(object sender, KeyEventArgs e)
{
sendinfo(e,STATMAIN.NORMDIST_MID);
}
private void left_tb_KeyDown(object sender, KeyEventArgs e)
{
sendinfo(e, STATMAIN.VOUT_LEFT_NORMAL);
}
private void tt_tb_KeyDown(object sender, KeyEventArgs e)
{
sendinfo(e,STATMAIN.VOUT_LEFT_NORMAL);
}
private void z_tb_LostFocus(object sender, RoutedEventArgs e)
{
sendinfo( STATMAIN.VINP_Z_NORMAL);
}
private void Mean_tb_LostFocus(object sender, RoutedEventArgs e)
{
sendinfo(STATMAIN.NORMDIST_MID);
}
private void sd_tb_LostFocus(object sender, RoutedEventArgs e)
{
sendinfo(STATMAIN.NORMDIST_MID);
}
private void left_tb_LostFocus(object sender, RoutedEventArgs e)
{
sendinfo(STATMAIN.VOUT_LEFT_NORMAL);
}
private void tt_tb_LostFocus(object sender, RoutedEventArgs e)
{
sendinfo(STATMAIN.VOUT_TWO_NORMAL);
}
我对serializethensendinfo,unserializeandsendinfo以及重载的sendinfo方法有一个真正的问题...我发现自己在所有子表单(大约20个)上剪切和粘贴相同的函数,但随后更改了文本框的名称。当文本框都是不同的名称时,如何避免代码重复?
答案 0 :(得分:1)
如果不对所有页面上的文本框进行规范化,然后将这些方法推送到基类中,则无法轻松解决。
您可以执行某些操作,例如将方法推送到基类并更改方法签名以获取List,然后在页面级别创建将创建List的方法。
它应该减少逻辑重复,但你仍然需要编写一些代码。
private void serializethensendinfo( IEnumberable<TextBox> listOfTextBoxes )
{
for( int i = 0; i < listOfTextBoxes.Count; i++ )
{
normintobj.tbs[i] = UITest.testui(listOfTextBoxes[i].Text);
}
}
private void unserializethensendinfo( IEnumberable<TextBox> listOfTextBoxes )
{
for( int i = 0; i < listOfTextBoxes.Count; i++ )
{
listOfTextBoxes[i].Text = Convert.ToString(normintobj.tbs[i]);
normintobj.tbs[i] = UITest.testui(listOfTextBoxes[i].Text);
}
}
此代码未经测试,您可能需要传入List byref,以便您可以回写文本框。
此外,该列表可能需要在页面级别进行静态定义...不进行一些测试并完全理解方法的用例,我不是百分百肯定。