KyKiske22
KyKiske22
2015-05-27 07:28
采纳率: 14.3%
浏览 3.3k

关于在C# Winform中的方法事件中使用大量if-else问题

winform运行比较顺利,但if-else代码太多 诸如如下情况
实现功能按钮:private void Button_Click(object sender,EventArgs e)
{
if ( listBox1.SelectedIndex==0)
{ a = int.Parse(DataText.Text);listBox1.SelectedIndex = 0; listBox1.Items[0] = "a的值为" + a + " 。"}
else if ( listBox1.SelectedIndex==1)
{ b = int.Parse(DataText.Text);listBox1.SelectedIndex = 1; listBox1.Items[1] = "b的值为" + b + " 。"}
else if ( listBox1.SelectedIndex==2)
{ c = int.Parse(DataText.Text);listBox1.SelectedIndex = 2; listBox1.Items[2] = "c的值为" +c+ " 。"}
...............
}
一共这里有100多个if-else

还有一个滚动条显示数据按钮 也是如此(这个有转换算法)
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
if(richBox1.Text=="a的最大值为100,最小值为0")
{
int data1 = (int)hScrollBar1.Value;int data2 = data1 * 5;TextBox1.Text = data2.ToString();
}
else if(richBox1.Text=="b的最大值为100,最小值为0")
{
int data1 = (int)hScrollBar1.Value;int data2 = data1 /10;TextBox1.Text = data2.ToString();
}
......一共也是100多个

但这样写代码比较冗长。之前看过张子阳的委托,最后还是无法实现要求(看了改写后总是显示最后一个程序)。也用面向对象的建立接口多态写法也写过,但因为控件太多,导致new的对象太多,程序经常卡壳。求大神指点。。。或者给予一个正确的面向对象写法(在控制台里就写成功过,但是在winform里一次也没用面向对象法解决这个问题)。(づ。◕‿‿◕。)づ

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • guwei4037
    guwei4037 2015-05-27 07:34

    找规律啊,if表达式跟里面要执行的代码有什么关系?或者从设计上面避免这种情况的发生。

    点赞 评论
  • danielinbiti
    danielinbiti 2015-05-27 07:39

    这是面向对象没关系。关键在于代码简化
    比如

     if ( listBox1.SelectedIndex==0)
    { a = int.Parse(DataText.Text);listBox1.SelectedIndex = 0; listBox1.Items[0] = "a的值为" + a + " 。"}
    else if ( listBox1.SelectedIndex==1)
    { b = int.Parse(DataText.Text);listBox1.SelectedIndex = 1; listBox1.Items[1] = "b的值为" + b + " 。"}
    可以直接
    char c = (char)(listBox1.SelectedIndex+97);
    listBox1.Items[listBox1.SelectedIndex] = c + "的值为" + DataText.Text+ " 。"//不过这个字符串中a的值,这个a字符看能不能动态获取。那用Ascii码转,小写a的ascii码是97,里面放吧,反正是写死的。
    
    下面一个if else 也一样改造
    
    点赞 评论
  • albertbush
    不是阿尔伯特 2015-05-27 07:53

    上面那部分,可以这样写

    listBox1.Items[listBox1.SelectedIndex] = string.Format("{0}的值为{1} 。",(char)(listBox1.SelectedIndex+97),int.Parse(DataText.Text));
    

    下面那部分,用文字表述的,比较困难,文字表述的格式一样的话(但是这个很难保证),可以用Regex来获取a,b,c,d,然后转数值型-97,就获得了数组索引。用一个数组(数组的元素是一个代理)可以解决其余问题。

    点赞 评论
  • qq_16794101
    qq_16794101 2015-05-27 15:25

    找规律啊,if表达式跟里面要执行的代码有什么关系?或者从设计上面避免这种情况的发生。

    点赞 评论

相关推荐