习题:设计一个“简单通讯录”程序,在窗体上建立一个下拉列表框、两个文本框和两个标签,实现如下功能:当用户在下拉式列表框中,选择一个学生姓名后,在“学生姓名”、“地址”两个文本框中分别显示出对应的姓名和地址。
窗体布局
下拉列表框
学生姓名:
地 址:
一、我的努力
对于一个下拉列表框,要实现输出两个信息:姓名和地址,我想不出更好的方法来完成。我的思路是:再用一个下拉列表框,用于存放学生的地址,设置运行时隐藏。
我的代码:
namespace 作业
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
cbo_Namelist.Items.Add("张无忌");
cbo_Namelist.Items.Add("赵敏");
cbo_Namelist.Items.Add("灭绝师太");
cbo_Namelist.Items.Add("周芷若");
cbo_Namelist.Items.Add("张三丰");
cbo_Namelist.SelectedIndex = 0;
}
private void cbo_Namelist_SelectedIndexChanged(object sender, EventArgs e)
{
switch (cbo_Namelist.SelectedIndex)
{
case 0:
cb_Address.Items.Clear();
cb_Address.Items.Add("武当派");
cb_Address.SelectedIndex = 0;
//显示姓名
this.txtb_Name.Text = cbo_Namelist.SelectedItem.ToString();
//显示地址
this.txtb_Address.Text = cb_Address.SelectedItem.ToString();
break;
case 1:
cb_Address.Items.Clear();
cb_Address.Items.Add("蒙古");
cb_Address.SelectedIndex = 0;
this.txtb_Name.Text = cbo_Namelist.SelectedItem.ToString();
this.txtb_Address.Text = cb_Address.SelectedItem.ToString();
break;
case 2:
cb_Address.Items.Clear();
cb_Address.Items.Add("峨眉派");
cb_Address.SelectedIndex = 0;
this.txtb_Name.Text = cbo_Namelist.SelectedItem.ToString();
this.txtb_Address.Text = cb_Address.SelectedItem.ToString();
break;
case 3:
cb_Address.Items.Clear();
cb_Address.Items.Add("峨眉派");
cb_Address.SelectedIndex = 0;
this.txtb_Name.Text = cbo_Namelist.SelectedItem.ToString();
this.txtb_Address.Text = cb_Address.SelectedItem.ToString();
break;
case 4:
cb_Address.Items.Clear();
cb_Address.Items.Add("武当派");
cb_Address.SelectedIndex = 0;
this.txtb_Name.Text = cbo_Namelist.SelectedItem.ToString();
this.txtb_Address.Text = cb_Address.SelectedItem.ToString();
break;
default :
cb_Address.Items.Clear();
break;
}
}
}
}
二、忽然想到
我想,一道题目不太可能出错。我这样自己增加一个下拉列表框来完成这样的题目,肯定不对。可是,我想不出其他方法。希望高手大侠不吝赐教。这道题目该怎么完成?
------解决思路----------------------
或者你图省事,不用二维数组,用两个一维数组string[]来分别存放姓名和地址也是可以的
选择一项后,取出SelectedIndex就是数组的索引
------解决思路----------------------
通讯录联系人数量理论是无限的,你难道要无限添加case1,case2,case3,case4.....?
------解决思路----------------------
我认为这是一个设计上的问题,仔细思考下如何存储这些数据比较合适,不要过于纠结控件怎么用,那些只是一个表现形式而已
------解决思路----------------------
声明一个类 包含姓名和地址,赋值并添加到list集合,绑定到cbo的DataSource(msdn上有实例);
在selectedIndexChanged事件中 获取 SelectedItem ,在转换成你定义的类,把类的属性赋值给textbox控件。就这么简单,不用搞的那么费劲
------解决思路----------------------
winform,直接把数据源在类里面private个字段放着,在下拉列表的事件中去数据源中找对应的数据不就行了