Get the index of array of picturebox clicked

前端 未结 3 637
陌清茗
陌清茗 2021-01-25 20:14

I am creating some picturebox dynamically and click event for picturebox as follows

Image myImage = Image.FromFile(\"image/Untitled6.png\"); 
PictureBox[] txtTea         


        
相关标签:
3条回答
  • 2021-01-25 20:46

    You can access the PictureBox via the sender argument. So try this:

    PictureBox[] txtTeamNames;
    
    void YourMethod()
    {
        Image myImage = Image.FromFile("image/Untitled6.png"); 
        txtTeamNames = new PictureBox[5];        
        //The same as your code
    }   
    
    void clcikeventhandle(object sender, EventArgs e)
    {          
        int index = txtTeamNames.IndexOf(sender As PictureBox);
    }
    

    EDIT: Approach #2

    But if you are not happy with declaring that array in the class scope you can try this approach:

    //Same as your code
    for (int i = 0; i < txtTeamNames.Length; i++)
    {
        //Save as your code
        txtTeamNames[i].Tag = i;                        // ADD THIS LINE
    }
    

    Then:

    void clcikeventhandle(object sender, EventArgs e)
    {            
        int index = int.Parse((sender as PictureBox).Tag.ToString());
    }
    
    0 讨论(0)
  • 2021-01-25 21:00
    namespace your_name_project
    {
        public partial class Form_Begin : Form
        {
            PictureBox[] pictureBoxs = new PictureBox[6];
            public Form_Begin()
            {
                InitializeComponent();
                pictureBoxs[0] = pictureBox1; pictureBoxs[1] = pictureBox2; pictureBoxs[2] = pictureBox3;
                pictureBoxs[3] = pictureBox4; pictureBoxs[4] = pictureBox5;   pictureBoxs[5] = pictureBox6;     
            }
    //continue 
            List<PictureBox> pictureBoxes = new List<PictureBox>();
    
                private void buttonX1_Click(object sender, EventArgs e)
                {
                    for (int i = 0; i <3; i++)
                    {
                        pictureBoxs[i].Image =your_name_project.Properties.Resources.image_1;// load image1 and Image_2from resource in property of picturebox  
                    }
                    for (int i = 3; i < 6; i++)
                    {
                        pictureBoxs[i].Image = your_name_project.Properties.Resources.Image_2;
                    }
                } 
            }
    }
    
    0 讨论(0)
  • 2021-01-25 21:07

    Another suggestion - create a custom class, which inherits from PictureBox. It will have an extra Index property. And you can set it between these two lines:

    txtTeamNames[i].Visible = true;
    //assign the index here
    txtTeamNames[i].Click += new EventHandler(this.clcikeventhandle);
    

    like so:

    txtTeamNames[i].Index = i;
    

    Then in the handler:

    void clickEventHandle(object sender, EventArgs e)
    { 
      PictureBox pbox = sender As PictureBox;
      int index = pbox.Index();
      string name = pbox.Name();
    }
    

    You keep the same scope of variables, which may be useful if you are concerned about it. If you are okay with upgrading scope of txtTeamNames to class level, see another answer by Hossein Narimani Rad.

    0 讨论(0)
提交回复
热议问题