2012-03-21 81 views
1
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添加一個包含圖片框和文本框作爲其元素的組框。我爲文本框自定義了一個雙擊事件,不幸的是它沒有執行。爲什麼?自定義文本框的雙擊

+0

「this.Enabled」是否有假?如果父容器('this')被禁用,它將不會收到任何事件。 .Net沒有控制數組,所以我對這個代碼示例所看到的有點困惑。 – LarsTech 2012-03-21 01:34:51

回答

1

由於TextBox被禁用,您的事件不會觸發。不過,我認爲解決方案可能是對界面的重新設計,因爲雙擊時不希望啓用控件的行爲。禁用控件的關鍵是防止用戶與其進行交互。

也許將其設置爲readonly可能是更好的選擇?這樣它仍然會發射事件。

1

如果未啓用DoubleClick事件,則不會觸發TextBox。因此,它不會工作,因爲你這樣做:

texBox[thmbNailCnt].Enabled = false; 

我相信你的意思做的雙擊處理程序如下

(sender as TextBox).Enabled = true; 

你必須努力(而不是使用this)使文本框啓用自己雙擊?

如果是這樣,那麼您無法使用Enabled屬性,因爲禁用了文本框時點擊事件不會觸發。

相反,你可以使用ReadOnly屬性,這將阻止用戶進行的文本進行修改:

texBox[thmbNailCnt].ReadOnly = true; 

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

這會不會給它變暗出來看它當它被禁用時。如果你願意的話,你可以做一些輔助修改,使它看起來一樣。