panel 里面有若干个 picturebox 控件(简称 picbox), 分别有: 1.选中 2.未选中 状态
希望点击任何一个 picbox 的时候, 其他 picbox 的状态置为 2
目前的想法是将此 picbox 的点击事件传给父控件, 然后由父控件依次通知各子控件但是如何将子控件 picbox 的点击事件传给父控件呢? 或者有别的更好的办法达到同样的效果?

解决方案 »

  1.   


    {
      pictureBox1.Click += OnPictureBoxClicked;
      pictureBox2.Click += OnPictureBoxClicked;
      //...
    }void OnPictureBoxClicked(object sender, EventArgs e)
    {
       PictureBox pb = sender as PictureBox;
       //...
    }
      

  2.   

    楼主貌似问的是 winform的问题1楼的方式应该是比较常用的,所有子控件的事件交由同一事件处理程序处理
      

  3.   

    在每个picbox单击的事件中,先循环将panel所有的picbox设置为2状态,然后在将选种的那个picbox设置为1状态.
      

  4.   

     
      pictureBox1.Click += OnPictureBoxClicked; 
      pictureBox2.Click += OnPictureBoxClicked; 
      //... 
    } void OnPictureBoxClicked(object sender, EventArgs e) 

      foreach (control ctr in this.panel1.Controls)
      {
          if(ctr.GetType()=typeof(PictureBox)
          ((PictureBox)ctr).状态属性=状态属性.2;
       }
      PictureBox pb = sender as PictureBox; 
           pb).状态属性=状态属性.1;
      //... 
    }
      

  5.   

    嗯, winform
    pannel 有空白区域, 不过应该关系不大, 注意下就好了
    谢谢了, 大体就采取这这种方法吧
    不过有点奇怪的是, 我一般碰到这问题都是重载下 wndproc(), 等本层处理好了再将消息进一步分发, 这次竟然不行
      

  6.   

    问题解决了, 谢谢楼上诸位的耐心解答, thx!
      

  7.   

    自然是子控件弹出事件给父控件,父控件处理:
    {
      //...
      sonPictureBox1.Click += OnSonPictureBoxClicked; 
      sonPictureBox2.Click += OnSonPictureBoxClicked; 
      //
      //... 
    } void OnPictureBoxClicked(object sender, EventArgs e) 

      foreach (control ctr in this.panel1.Controls) 
      { 
          if(ctr.GetType()=typeof(PictureBox) 
          {
               ((PictureBox)ctr).状态属性=((!sender)?状态属性.2:状态属性.1); 
          }
      } 
    }