标题:求教:窗体的 静态 类变量的 作用
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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)
        {

        }


      
    }
}


授人以渔,不授人以鱼。
2014-02-02 12:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以後不要起parent這種名字

授人以渔,不授人以鱼。
2014-02-02 12:36
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
Emp emp = new Emp();
emp.BindList();
==================

这样 就会出现 “未将对象引用设置到对象实例”,我试过了。

我曾这样试过多次,也试过 把 public static Emp parent = null 改为 非静态的,也试过 在 BindList() 中实例化 Employee[] emps = new Employee[3]; 都失败了。

总之,改变一处,出现问题 就 修改,但另一个问题又出现。只能用1楼的代码才可以,郁闷。

[ 本帖最后由 learnerok 于 2014-2-2 12:43 编辑 ]
2014-02-02 12:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
我改了兩個模塊、兩個地方,你自己仔細比較一下。

授人以渔,不授人以鱼。
2014-02-02 12:42
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
以下是引用TonyDeng在2014-2-2 12:42:35的发言:

我改了兩個模塊、兩個地方,你自己仔細比較一下。

============
好的,我还没找到,我仔细查看一下,太感谢您的耐心辅导!!!
2014-02-02 12:44
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
TonyDeng老师 改的 2处:

第一处是:
// public static Emp parent = null;


 Emp()
{
InitializeComponent();
//parent = this;
// BindList();
}


第二处是:
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();

}
[/color]
 

//Emp.parent.BindList();//这里必须用Emp窗体上的静态成员parent来调用Emp窗体上的BindList()方法,
琀栀椀猀.Close();//否则 Emp.cs 的 62行 →氀瘀.Text = emps[i].ID; 会出现 “未将对象引入实例”错误



======================

我试过了,这样就会出现“未将对象引用设置到对象实例”错误。

[ 本帖最后由 learnerok 于 2014-2-2 12:55 编辑 ]
2014-02-02 12:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
我運行沒有問題,那是你的事。要麽把代碼黏貼回去。

授人以渔,不授人以鱼。
2014-02-02 12:52
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
以下是引用TonyDeng在2014-2-2 12:52:37的发言:

我運行沒有問題,那是你的事。要麽把代碼黏貼回去。

============

好的,我试试。感谢您!!!
2014-02-02 12:56
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
以下是引用TonyDeng在2014-2-2 12:52:37的发言:

我運行沒有問題,那是你的事。要麽把代碼黏貼回去。

===================

TonyDeng老师,我把我之前的代码全部注释掉,两个窗体完全复制您的代码,但是 Emp窗体类 出现如下错误


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);
            }
        }
2014-02-02 13:24
learnerok
Rank: 2
等 级:论坛游民
帖 子:387
专家分:47
注 册:2011-5-21
得分:0 
期待老师指点帮助,感谢ing!!!
2014-02-02 18:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-426994-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.576159 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved