程序中动态生成了若干个pictureBox,他们同为一个pictureBox[]的元素,并且他们的ContextMenuStrip指向同一个ContextMenuStrip实例,如何判断是哪个pictureBox元素打开的ContextMenuStrip呢?

解决方案 »

  1.   

    使用ContextMenuStrip.SourceControl 属性
      

  2.   

    比如:TextBox box =this.contextMenuStrip.SourceControl as TextBox;
    if (box !=null)
    {
        box.Text = "是我";
    }又比如:
    Form1 f=this.contextMenuStrip.SourceControl as Form1;
    if (f!=null)
    {
        f.Text="是我";
    }
      

  3.   

    同楼上,就楼主的要求,可以这样
    Control c = contextMenuStrip1.SourceControl;
    if (c.GetType().Name == "PictureBox")
    {
        MessageBox.Show(((PictureBox)c).Name);
    }
      

  4.   

    to hbxtlhx:PictureBox没有text属性的阿。
    to lxcnn:用你的代码了,MessageBox输出的是空的。我就是想得到那个打开ContextMenuStrip的PictureBox元素的数组序号就行。
      

  5.   

    窗体有一个button,点一下在SplitContainer生成一个PictureBox[]的元素,然后设置大小、位置、图片什么的:
    private void b_GenPhoto_Click(object sender, EventArgs e)
    {
    PhotoSplitContainer.Panel2.Controls.Add(Photoes[counter]);
    /*设置Photoes[counter]的属性*/
    Photoes[counter].ContextMenuStrip = contextMenuStrip1;
    counter++;
    }
    没什么特别的阿。
    我想问楼上的,你那段代码应该放在哪里的?
      

  6.   

    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
            {
                ContextMenuStrip menu = (ContextMenuStrip)sender;
                for (int i = 0; i< pictureBox.Count; i++)
                {
                    if ((PictureBox)menu.SourceControl == pictureBox[i])
                    {
                        // 是pictureBox[i]
                        break;
                     }            }
            }
      

  7.   

    倒塌,我要的是动态生成pictureBox的代码
    我想问楼上的,你那段代码应该放在哪里的?
    -----------
    这个问你自己啊,你想在哪个事件里判断,就放在哪个事件里
      

  8.   

    to cchon:问题解决了,谢谢!
    to lxcnn:谢谢啊,可能我没说清楚,呵呵。
    结帖了~