我有一个方法只需点击一下按钮即可运行。
我遇到的问题是将click evethandler添加到每个图片框中。如果我第二次单击搜索按钮,现在有两个eventhndler注册到该图片框,依此类推。因此,当我按下两次搜索按钮后点击图片盒时,我会点击两个消息框。
有没有办法放弃前一个并且只保留最新的事件处理程序?
private void btnSearch_Click(object sender, EventArgs e)
{
ClearPicBoxs();
if((!txtBoxSearch.Text.Equals("Search...") || !txtBoxSearch.Text.Equals("")) && isLoggedIn)
{
//Get Product ids from database which have supplied keyword
DAOKeyword.SelectKeywords(txtBoxSearch.Text, productIdsList);
int cnt = 0;
foreach (int productId in productIdsList)
{
ImageDAOImpl DAOIamge = new ImageDAOImpl();
picPrd = pictureBoxList[cnt];
picPrd.Text = productId.ToString();
picPrd.Click += new System.EventHandler((sender1, e1) => picPrd_Click(sender, e, productId));
picPrd.Image = ByteArrayToImagebyMemoryStream(DAOIamge.SelectImage(productId));
picPrd.SizeMode = PictureBoxSizeMode.StretchImage;
picPrd.Refresh();
cnt++;
}
lblLatest_Search.Text = "''" + txtBoxSearch.Text + "''";
productIdsList.Clear();
}
else
{
//Select Latest Posted Products
}
}
private void picPrd_Click(object sender, EventArgs e, int productId)
{
//Use productId to get info about product
MessageBox.Show(productId.ToString());
}
答案 0 :(得分:0)
我不确定列表pictureBoxList的填充位置,以及为什么只要手动设置控件属性就需要将其项目分配给控件。
如果每次在分配事件处理程序之前重新实例化控件,它应该只触发一次 我的建议是替换以下行
picPrd = pictureBoxList[cnt];
使用以下行
picPrd = new PictureBox();