2013-08-07 35 views
-1

我在運行時爲我的表單添加了一個TextBox,這是一個全新的項目,所以這是我迄今爲止唯一的代碼,所以我100%肯定這不是我的自己做:在WinForms表單中沒有顯示TextBox

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      TextBox box = new TextBox(); 
      box.Location = new Point(2, 2); 

      this.Controls.Add(box); 
     } 
    } 
} 

爲什麼TextBox不顯示?沒有任何東西。我在各處設置了斷點,但沒有一個能夠幫助我。全部似乎正常,但不是。

+0

@HansPassant,這裏的代碼沒有問題。我使用設計師添加了按鈕 -​​ 設計師負責其餘部分。 button1_Click **不運行,因爲當這段代碼不起作用時,我用MessageBox.Show()替換它 - 然後猜猜看 - 單擊按鈕時顯示的MessageBox。爲什麼你會認爲我沒有「正確訂閱事件處理程序」?很明顯,我是 - 而且沒有理由另行假設。多年來我一直在這樣做 - 問題在於別的地方。 – uSeRnAmEhAhAhAhAhA

+0

@ user2645707你的表單是否有其他控件?我想你的表單有'Dock = DockStyle.Fill'的一些'Panel',因此你看不到添加的'TextBox'。 –

+2

如果你有這個按鈕,你的代碼完美工作。當我點擊按鈕時,我只是複製它,並在左上角有一個小文本框。 – Gloria

回答

1

將文本框添加到窗體的代碼位於button1_Click事件處理程序中。如果你將它移動到構造函數,它將工作得很好。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      TextBox box = new TextBox(); 
      box.Location = new Point(2, 2); 

      this.Controls.Add(box); 
     } 
    } 
} 
+1

然後你應該提到,當你發佈的問題。試圖預測你到底在問什麼,這不是我的問題。 另一方面,確保處理button1_click。嘗試添加此行button1.Click + = new System.EventHandler(button1_Click); – ChaiNavawongse

+3

@ user2645707你知道這傢伙正在花費自己的時間來試圖幫助你嗎? – Curt

+1

@ChaiNavawongse對不起,侵略不適合你。我很沮喪,因爲有些人做出了這麼多的假設和指責,有時候這種想法和想法會讓我失望。當它總是發生時,很難不生氣,而且他們錯了。感謝您盡力幫助。 – uSeRnAmEhAhAhAhAhA

2

代碼很簡單,我能想到的唯一原因是你必須添加一些其他的控制之前(寬足以覆蓋加TextBox),試試這個:

private void button1_Click(object sender, EventArgs e) 
    { 
     TextBox box = new TextBox(); 
     box.Location = new Point(2, 2); 
     this.Controls.Add(box); 
     box.BringToFront(); 
    } 

還要檢查事件處理程序ControlAdded,我猜的形式有此事件處理一些代碼,並丟棄加控制,如果它是類型TextBox,這樣的事情:

private void form_ControlAdded(object sender, ControlEventArgs e) { 
    if(e.Control is TextBox) Controls.Remove(e.Control); 
} 
+0

謝謝。我已經嘗試過BringToFront(即使按鈕(位於50,50)是窗體上的唯一控件),但沒有意義,因爲它沒有必要 - 但它仍然沒有幫助。 – uSeRnAmEhAhAhAhAhA

+0

@ user2645707嘗試重建或清理並再次構建解決方案,您當前的項目出現問題。 –

0

我有類似的問題。

看着代碼,我發現顯示的文本框的類型是System.Windows.Forms.TextBox,而那些沒有顯示的文本框的類型是VisualJS.Web.TextBox。也許你的問題是相似的。