1

次のように、いくつかのピクチャボックスを動的に作成し、ピクチャボックスのクリックイベントを作成しています

Image myImage = Image.FromFile("image/Untitled6.png"); 
PictureBox[] txtTeamNames = new PictureBox[5];        

for (int i = 0; i < txtTeamNames.Length; i++)
{
  var txt = new PictureBox();
  txtTeamNames[i] = txt;                
  txtTeamNames[i].Image = myImage;                
  txtTeamNames[i].Height = 53;
  txtTeamNames[i].Width = 48;                
  this.panel1.Controls.Add(txtTeamNames[i]);                
  txtTeamNames[i].Visible = true;
  txtTeamNames[i].Click += new EventHandler(this.clcikeventhandle);
}

誰かが画像ボックスをクリックしたときに、その配列のインデックスと名前を見つけるにはどうすればよいですか?

void clickEventHandler(object sender, EventArgs e)
{          
  //???
}
4

4 に答える 4

3

引数PictureBoxを介してアクセスできます。senderだからこれを試してください:

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);
}

編集:アプローチ#2

しかし、クラス スコープでその配列を宣言することに満足できない場合は、次のアプローチを試すことができます。

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

それで:

void clcikeventhandle(object sender, EventArgs e)
{            
    int index = int.Parse((sender as PictureBox).Tag.ToString());
}
于 2013-04-01T17:41:36.417 に答える
1

別の提案 - から継承するカスタム クラスを作成しますPictureBox。余分なIndexプロパティがあります。そして、次の 2 行の間に設定できます。

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

そのようです:

txtTeamNames[i].Index = i;

次に、ハンドラーで次のようにします。

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

変数の同じスコープを保持します。これは、懸念がある場合に役立ちます。txtTeamNamesスコープをクラス レベルにアップグレードしても問題ない場合は、 Hossein Narimani Radによる別の回答を参照してください。

于 2013-04-01T17:54:39.013 に答える
0
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;
                }
            } 
        }
}
于 2016-03-30T08:51:59.987 に答える