求教:窗体的 静态 类变量的 作用
EmpList.rar
(45.67 KB)
发上代码附件
我的问题是:
为什么 Emp窗体 必须声明一个 该窗体类的一个 公共静态 变量,必须通过该窗体类变量在 GetScore窗体上 调用 Emp窗体 的BindList()方法,即: Emp.parent.BindList(),而不能 Emp emp = new Emp(); → emp.BindList(); 为什么? 这种做法或用法称作什么?
在下学生拜谢老师大侠先!!!
==========================
namespace EmpList
{
public partial class Emp : Form
{
public static Emp parent = null; //声明静态成员,以便在另一个窗体上调用该窗体的子窗体(listView)上的方法
//否则 Emp.cs 的 62行 → lv.Text = emps[i].ID; 会出现 “未将对象引用设置到对象实例”
public Emp()
{
InitializeComponent();
parent = this;
// BindList();
}
//可以长度为3的数组存储3个员工的信息
Employee[] emps = new Employee[3];
public void InitData()
{
emps[0] = new Employee();
emps[0].ID = "001";
emps[0].Name = "张三";
emps[0].Age = 18;
emps[1] = new Employee();
emps[1].ID = "002";
emps[1].Name = "李四";
emps[1].Age = 18;
emps[2] = new Employee();
emps[2].ID = "003";
emps[2].Name = "王五";
emps[2].Age = 18;
}
private void Emp_Load(object sender, EventArgs e)
{
//01.先构造出数据存储到数组中
InitData();
//02.将构造的员工添加到LIstView中
BindList();
}
public void BindList()
{
//清空ListView中的所有项
listView1.Items.Clear();
//如何将数组中的数据绑定到LIstVIew
//ListView中每一项都是ListViewItem
for (int i = 0; i <emps.Length; i++)
{
ListViewItem lv = new ListViewItem();
lv.Text = emps[i].ID;
//SubItems是每一项的对应的列
// lv.SubItems.Add(emps[i].ID);
lv.SubItems.Add(emps[i].Name);
lv.SubItems.Add(emps[i].Age.ToString());
lv.SubItems.Add(emps[i].Assess);
lv.SubItems.Add(emps[i].Score.ToString());
listView1.Items.Add(lv);
}
}
//对象数组实现窗体间数据的传递
private void listView1_DoubleClick(object sender, EventArgs e)
{
//如何将Emp窗体中的员工数组中的员工信息读取到GetScore窗体中?
//找到当前用户选中的员工
string id= listView1.SelectedItems[0].Text;
//必须循环遍历整个数据,将数组中的每个员工的编号与选中的员工编号
//比较,如果一致,则将该员工的信息传递到GetScore中
int index = 0;//定义一个变量保存选中员工在数组中的位置
for (int i = 0; i < emps.Length; i++)
{
if(emps[i].ID==id)
{
index = i;
break;
//return 不能用return
}
}
//获取到了选中的对象
Employee emp = emps[index];
GetScore frm = new GetScore();
frm.emplist = emp;
frm.Show();
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
=========================
namespace EmpList
{
public partial class GetScore : Form
{
public GetScore()
{
InitializeComponent();
}
public Employee emplist;
private void GetScore_Load(object sender, EventArgs e)
{
txtName.Text = emplist.Name;
txtAssess.Text = emplist.Assess;
txtScore.Text = emplist.Score.ToString();
}
//点击评分
private void btnScore_Click(object sender, EventArgs e)
{
emplist.Assess = txtAssess.Text;
emplist.Score = Convert.ToInt32(txtScore.Text);
//调用Emp窗体的BindList()方法重新绑定
//Emp emp = new Emp();
//emp.BindList();
Emp.parent.BindList();//这里必须用Emp窗体上的静态成员parent来调用Emp窗体上的BindList()方法,
this.Close(); //否则 Emp.cs 的 62行 → lv.Text = emps[i].ID; 会出现 “未将对象引入实例”错误
}
}
}