【问题标题】:Customize double click for text box自定义双击文本框
【发布时间】:2012-03-21 10:15:26
【问题描述】:
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,添加一个以图片框和文本框为元素的组框。我为文本框自定义了一个双击事件,不幸的是它没有执行。为什么会这样?

【问题讨论】:

  • this.Enabled 曾经是假的吗?如果父容器 (this) 被禁用,它将不会收到任何事件。 .Net 没有控制数组,所以我对这个代码示例看到的内容有点困惑。

标签: c#


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果未启用,DoubleClick 事件将不会在 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;
    }
    

    这不会使它看起来像禁用时那样变暗。如果您愿意,您可以进行一些额外的更改以使其看起来相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2013-03-02
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多