求助 如何把switch-case/if-else转换成委托啊

KyKiske22 2015-03-19 03:21:40
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace killIfElse
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
createListBox();
}
public void createListBox()
{
listBox1.Items.Add("1");
listBox1.Items.Add("2");
listBox1.Items.Add("3");
listBox1.Items.Add("4");
}
private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
if(listBox1.SelectedIndex==0)
{
textBox1.Text = listBox1.SelectedItems[0].ToString();
}
else if (listBox1.SelectedIndex == 1)
{
textBox1.Text = listBox1.SelectedItems[0].ToString();
}
else if (listBox1.SelectedIndex == 2)
{
textBox1.Text = listBox1.SelectedItems[0].ToString();
}
else if (listBox1.SelectedIndex == 3)
{
textBox1.Text = listBox1.SelectedItems[0].ToString();
}
}
}
}
这里是鼠标点击ListBox1后会将ListBox1的内容显示到TextBox上,我参考了张子阳的委托实例,结果还是不对。
(因为我这里要写个项目,listbox1里面起码得有三百行,如果全是ifelse或swithcase会造成代码冗余等等问题还是有数)
哪位大神帮我写一份参考参考啊 万分感激!
...全文
249 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-03-19
  • 打赏
  • 举报
回复
即使没有任何关系,这对应关系完全可以存到文件里或数据库里,然后读取出来,生成树 你这纯手工生成的树,而且对应关系也是代码写死,不做分支怎么判断
WM_JAWIN 2015-03-19
  • 打赏
  • 举报
回复
引用 4 楼 KyKiske22 的回复:
好的。ListBox的知道了。多谢 那如果是TreeView的呢?(TreeView是建立在Debug里用XmlDocument对象相关方法加载的) 点击TreeView后DataText的值如下。 private void treeAfterSelect(object sender, TreeViewEventArgs e) //点击节点后获取相应的数据,并设置滚动条的初值和最值 { if (treeView1.SelectedNode.ToString() == "TreeNode:A") { DataText.Text = "50"; listBox1.SelectedIndex = 0; } else if (treeView1.SelectedNode.ToString() == "TreeNode: B") { DataText.Text = "50"; listBox1.SelectedIndex = 1; } else if (treeView1.SelectedNode.ToString() == "TreeNode: C") { DataText.Text = "50"; listBox1.SelectedIndex = 2; } else if (treeView1.SelectedNode.ToString() == "TreeNode: D") { DataText.Text = "50"; listBox1.SelectedIndex = 3; } 如何简化if-else/switch-case????
那个50跟1,2,3跟有TreeNode X有什么关系,有明显的关系,要以直接算出来,要是没有关系,那你只能一个一个if了
WM_JAWIN 2015-03-19
  • 打赏
  • 举报
回复
三百个委托
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
自己定个id Dictionary<int, Action> d = new Dictionary<int, Action>() { {0, ()=>{ textBox1.Text=“1”}}, {1, ()=>{ textBox1.Text=“2”}}, {2, ()=>{ textBox1.Text=“3”}}, {3, ()=>{ textBox1.Text=“4”}} }; d[id].Invoke(); 看了文章 这么写出来了
本拉灯 2015-03-19
  • 打赏
  • 举报
回复
你要委托,要根据些个值用到不同的业务罗辑时才用。而不是乱用 Dictionary<string, Action> dir2 = new Dictionary<string, Action>(); dir2.Add("001",B1); dir2.Add("002",B2); dir2.Add("003",B3); string code="001"; 这里代码自己赋值 dir[code]();//调用委托方法 public void B1() { xxx } public void B2() { xxx } public void B3() { xxx }
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
引用 10 楼 wyd1520 的回复:
Dictionary<string, int> dir = new Dictionary<string, int>(); dir.Add("TreeNode:A", 1); dir.Add("TreeNode:B", 2); dir.Add("TreeNode:C", 3); dir.Add("TreeNode:D", 4); listBox1.SelectedIndex = dir[treeView1.SelectedNode.ToString()]; Dictionary<string, string> dir2 = new Dictionary<string, string>(); dir2 .Add("TreeNode:A", "50"); dir2 .Add("TreeNode:B", "30"); dir2 .Add("TreeNode:C", "20"); dir2 .Add("TreeNode:D", "10"); DataText.Text = dir2[treeView1.SelectedNode.ToString()]; 要学会变通,不要傻傻的,只会拿别人的代码COPY ,
Dictionary的使用了解些了,不过需求的问题还是没解决,实际上我这里每个if里有6个各不相同的赋值语句。不过谢谢你了
本拉灯 2015-03-19
  • 打赏
  • 举报
回复
Dictionary<string, int> dir = new Dictionary<string, int>(); dir.Add("TreeNode:A", 1); dir.Add("TreeNode:B", 2); dir.Add("TreeNode:C", 3); dir.Add("TreeNode:D", 4); listBox1.SelectedIndex = dir[treeView1.SelectedNode.ToString()]; Dictionary<string, string> dir2 = new Dictionary<string, string>(); dir2 .Add("TreeNode:A", "50"); dir2 .Add("TreeNode:B", "30"); dir2 .Add("TreeNode:C", "20"); dir2 .Add("TreeNode:D", "10"); DataText.Text = dir2[treeView1.SelectedNode.ToString()]; 要学会变通,不要傻傻的,只会拿别人的代码COPY ,
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
引用 6 楼 wyd1520 的回复:
private void treeAfterSelect(object sender, TreeViewEventArgs e) { Dictionary<string, int> dir = new Dictionary<string, int>(); dir.Add("TreeNode:A", 1); dir.Add("TreeNode:B", 2); dir.Add("TreeNode:C", 3); dir.Add("TreeNode:D", 4); listBox1.SelectedIndex = dir[treeView1.SelectedNode.ToString()]; DataText.Text = "50"; } 你看一句的IF都没用上
额 50写错了 后三个分别是30, 20 10
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
晕死, 不要取SelectedNode的文本来判断啊 不是有Index吗
早期试过了,不行啊, 我这个好多树节点包含好多子树节点。用Index后所有的对应行全乱了
本拉灯 2015-03-19
  • 打赏
  • 举报
回复
private void treeAfterSelect(object sender, TreeViewEventArgs e) { Dictionary<string, int> dir = new Dictionary<string, int>(); dir.Add("TreeNode:A", 1); dir.Add("TreeNode:B", 2); dir.Add("TreeNode:C", 3); dir.Add("TreeNode:D", 4); listBox1.SelectedIndex = dir[treeView1.SelectedNode.ToString()]; DataText.Text = "50"; } 你看一句的IF都没用上
於黾 2015-03-19
  • 打赏
  • 举报
回复
晕死, 不要取SelectedNode的文本来判断啊 不是有Index吗
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
好的。ListBox的知道了。多谢 那如果是TreeView的呢?(TreeView是建立在Debug里用XmlDocument对象相关方法加载的) 点击TreeView后DataText的值如下。 private void treeAfterSelect(object sender, TreeViewEventArgs e) //点击节点后获取相应的数据,并设置滚动条的初值和最值 { if (treeView1.SelectedNode.ToString() == "TreeNode:A") { DataText.Text = "50"; listBox1.SelectedIndex = 0; } else if (treeView1.SelectedNode.ToString() == "TreeNode: B") { DataText.Text = "50"; listBox1.SelectedIndex = 1; } else if (treeView1.SelectedNode.ToString() == "TreeNode: C") { DataText.Text = "50"; listBox1.SelectedIndex = 2; } else if (treeView1.SelectedNode.ToString() == "TreeNode: D") { DataText.Text = "50"; listBox1.SelectedIndex = 3; } 如何简化if-else/switch-case????
marswangbo 2015-03-19
  • 打赏
  • 举报
回复
...你这条件语句无论啥条件不都是一样的操作么..那要这些条件语句干嘛...
本拉灯 2015-03-19
  • 打赏
  • 举报
回复
private void listBox1_MouseClick(object sender, MouseEventArgs e) { if(listBox1.SelectedItems.Count>0) textBox1.Text = listBox1.SelectedItems[0].ToString(); } 这样不就完了么。写那么多做啥。
KyKiske22 2015-03-19
  • 打赏
  • 举报
回复
RT 换成委托就不会写了

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧