自定义双击文本框

时间:2012-03-21 00:51:06

标签: c#

private void newThumbNail(int docType, string fileName)
{
  thmbNail[thmbNailCnt] = new GroupBox();
  thmbNail[thmbNailCnt].Parent = panel1;            
  thmbNail[thmbNailCnt].Visible = true;
  thmbNail[thmbNailCnt].Location = new Point(2, 5 + ((thmbNailCnt * 50) + 2));
  thmbNail[thmbNailCnt].Size = new Size(222, 50);

  picBox[thmbNailCnt] = new PictureBox();
  picBox[thmbNailCnt].Parent = thmbNail[thmbNailCnt];
  picBox[thmbNailCnt].Visible = true;
  picBox[thmbNailCnt].Location = new Point(6, 13);
  picBox[thmbNailCnt].Size = new Size(31, 31);

  switch (docType)
  {
    case 1: picBox[thmbNailCnt].Image = wordImg;
      break;
    case 2: picBox[thmbNailCnt].Image = pptImg;
      break;
    case 3: picBox[thmbNailCnt].Image = excelImg;
      break;
    case 4: picBox[thmbNailCnt].Image = pdfImg;
      break;
  }


  texBox[thmbNailCnt] = new TextBox();
  texBox[thmbNailCnt].Parent = thmbNail[thmbNailCnt];
  texBox[thmbNailCnt].Visible = true;
  texBox[thmbNailCnt].Location = new Point(53, 24);
  texBox[thmbNailCnt].Size = new Size(163, 20);
  texBox[thmbNailCnt].Text = fileName;
  texBox[thmbNailCnt].Enabled = false;
  texBox[thmbNailCnt].BackColor = Color.Silver;
  texBox[thmbNailCnt].ForeColor = Color.Black;
  texBox[thmbNailCnt].DoubleClick += new System.EventHandler(changeText);

  thmbNailFN[thmbNailCnt] = fileName;
  data[thmbNailCnt, 0] = fileName;
  data[thmbNailCnt, 1] = docType.ToString(); 

  thmbNail[thmbNailCnt].Controls.Add(picBox[thmbNailCnt]);
  thmbNail[thmbNailCnt].Controls.Add(texBox[thmbNailCnt]);

  thmbNailCnt++;
}

private void changeText(object sender, EventArgs e)
{
  this.Enabled = true;
}

private void newThumbNail,添加一个带有图片框和文本框的组框作为其元素。我为文本框自定义了双击事件,遗憾的是它没有执行。为什么会这样?

2 个答案:

答案 0 :(得分:1)

您的活动不会触发,因为TextBox已被禁用。但是我认为解决方案可能是对界面的重新设计,因为双击时启用控件不是预期的行为。禁用控件的关键是防止用户与其进行交互。

或许将其设置为只读可能是更好的选择?这样它仍会触发事件。

答案 1 :(得分:1)

如果未启用,则不会在TextBox上触发该事件。所以,它不起作用,因为你这样做:

texBox[thmbNailCnt].Enabled = false;

我认为您打算在双击处理程序中执行以下操作(而不是使用this

(sender as TextBox).Enabled = true;

您必须尝试双击启用文本框?

如果是这样,那么您就无法使用Enabled属性,因为在禁用文本框时不会触发点击事件。

相反,您可以使用ReadOnly属性来阻止用户对文本进行任何更改:

texBox[thmbNailCnt].ReadOnly = true;

private void changeText(object sender, EventArgs e)
{
    (sender as TextBox).ReadOnly = false;
}

这不会使它在禁用时具有暗淡的外观。如果你愿意的话,你可以做一些改变,让它看起来一样。