我有一个form,里面有很多picturebox作为city的图示,又有一个city类,现在需要在点击picturebox的时候,在form.labelbox.text中显示picturebox对应的city的name属性。
public class city
{
       //城市名称
        private string _cityname;
        public string CityName
        {
            get
            {
                return _cityname;
            }
            set
            {
                _cityname = value;
            }
        }        //城市ID
        private int _id;
        public int ID
        {
            get
            {
                return _id;
            }
        }        private PictureBox _cityimage;
        public PictureBox CityImage
        {
            get
            {
                return _cityimage;
            }
            set
            {
                _cityimage = value;
                _cityimage.Click+=new EventHandler(cityimage_Click);
            }
        }        private void cityimage_Click(object sender, EventArgs e)
        {
            //需解决;
        }
}
以上是city类中和问题有关的代码,就是city类3个属性的定义
form中引用了city类,会申明一个city的数组,同时把form中的的一个picturebox会赋值给对应的city[i].CityImage,现在需要的是cityimage_Click事件能够返回给form,使form中的labelbox.text=city[i].cityname。但问题是city不能改变form中的值。
那么现在cityimage_Click我该怎么写,或者是不是需要在city里申明一个变量,在form中用一个timer依次判断city[i]的这个变量是否改变,如果是,则获取i对应的city[i].cityname来赋值给form.labelbox.text。请各位有钱出钱有力出力,帮偶解决这样一个问题

解决方案 »

  1.   

    用事件吧!
    public delegate void CitySelectHandler(string cityName);public class city
    {
      public event CitySelectHandler CitySelect;
      ......
      private void cityimage_Click(object sender, EventArgs e)
      {
        //需解决;
        CitySelect(_cityname);
      }
      ......
    }form
    {
      .....
      构造函数
      {
        city.xx += ....(city_select);
      }
      .....
      private coid city_select(string cityName)
      {
        labelbox.text = cityname;
      }
    }
      

  2.   

    在city类中定义一个事件:
    如下:
    public delegate void City_PictureClicked(PictureBox sender,string CityName,string CityID);public class city 

        public event City_PictureClicked PictureClicked();
          //城市名称 
            private string _cityname; 
            public string CityName 
            { 
                get 
                { 
                    return _cityname; 
                } 
                set 
                { 
                    _cityname = value; 
                } 
            }         //城市ID 
            private int _id; 
            public int ID 
            { 
                get 
                { 
                    return _id; 
                } 
            }         private PictureBox _cityimage; 
            public PictureBox CityImage 
            { 
                get 
                { 
                    return _cityimage; 
                } 
                set 
                { 
                    _cityimage = value; 
                    _cityimage.Click+=new EventHandler(cityimage_Click); 
                } 
            }         private void cityimage_Click(object sender, EventArgs e) 
            { 
                //需解决; 
                  if(PictureClicked!=null) PictureClicked(cityimage,cityname,ID );
            } 
    }
    然后在Form中:city objCity=new city();
    city.PictureClicked+=new EventHandler(city_PictureClicked)
    private void city_PictureClicked(PictureBox sender,string CityName,string CityID)
    {
        //在这里进行处理
    }
      

  3.   


    系统报错:错误 1 “city_PictureClicked”的重载均与委托“System.EventHandler”不匹配
      

  4.   


    系统报错:错误 1 “city_PictureClicked”的重载均与委托“System.EventHandler”不匹配呵呵,这个是没有在编译器里面写的,你直接在编译器面书写的话,是可以不这样的
      

  5.   

    可以参考一下这里的参数传递方式
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5