2013-01-16 75 views
1

我有上有一個標籤控件的窗體,並在這些標籤中的一個,我有一個ComboBox。取決於用戶在此ComboBox中選擇的值,需要填充不同的控件。這工作正常,但是,當我嘗試檢索用戶已將其放入TextBox控件的文本時,我已填充,TextBox.Text沒有任何回報給我。 TextBox.Text當我添加一個TextBox以相同的形式,但它包含在窗體初始化(而不是與下面的方法來填充窗體上更高),這讓我覺得我缺少在控制屬性正常工作。TextBox.Text沒有返回

  • 我不想來填充它的文本控制,我希望用戶在運行中輸入字符串 - 我想用TextBox.Text獲得該值,字符串我已經在不值控制。

從我使用的TextBox和其他控制填充到標籤控制方法段:

private System.Windows.Forms.TextBox filePathBox; 

private void populateControls(string someText) 
    { 
     if (someText == "Something") 
     { 
      // 
      // TextBox 
      // 
      this.filePathBox.Location = new System.Drawing.Point(6, 61); 
      this.filePathBox.Name = "filePathBox"; 
      this.filePathBox.Size = new System.Drawing.Size(220, 20); 

      this.tabPage1.Controls.Add(this.filePathBox); 
      this.filePathBox.Show(); 
     } 
     else if (someText == "SomethingElse") 
     { 
      //populate other controls. 
     } 
    } 

而且,爲了測試,我有一個按鈕,簡單地顯示字符串的MessageBox那是在TextBox,這不會導致任何結果。

private void button2_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(filePathBox.Text); 
    } 

再次,它讓我覺得我從TextBox缺少一些特性,但任何事情會在這一點可以理解。

+4

是不是您的文本框從構造函數中設置在'InitializeComponent'中?還有,你在哪裏設置「文本」屬性? – Default

+0

我沒有看到你在哪裏設置「Text」屬性。爲什麼應該有東西? –

+0

你確定用戶鍵入你認爲他/她的文本框嗎?你可以將BackColor屬性設置爲不同的值。另外 - 如果多次調用populateControls(),則可能會覆蓋filePathBox變量(您沒有提到創建實例的位置),同時將多個框添加到該選項卡。 –

回答

1

改變您:

this.filePathBox = new TextBox(); 

到:

if(this.filePathBox==null) 
{ 
    this.filePathBox = new TextBox(); 
} 
+0

儘管所有控件都是根據用戶在下拉列表中選擇的內容填充的,但是我是否仍然要在InitializeComponent()中創建這些控件的實例?如果是這樣,那麼會不會導致大量內存被用於不被使用的不同控件組? – steamrolla

+0

@thewhitehorserider,這就是爲什麼你需要上面的代碼... – Bolu

+0

謝謝。每個WinForms項目中的組件都會在Designer.cs文件中自動聲明和初始化組件? – steamrolla

0

我想你正確初始化filePathBox在InitializeComponents()(窗體設計器中的內容),所以......在filePathBox.Text將是初始爲空。你必須用內容來填充它,它顯示了一些之前......這樣的:

filePathBox.Text = "something"; 
MessageBox.Show(filePathBox.Text); 
+0

填充時,不要在控件中包含任何內容。只想採取用戶輸入並做一些事情。 – steamrolla

+0

是的,但如果用戶在TB中什麼也沒有輸入,你怎麼能假裝它的文本內容是不同的?如果您在填寫結核病之前單擊按鈕,您將不會從MessageBox中選擇任何東西... –

+0

是的 - 對不起,我應該明確暗示這一點。即使用戶輸入了一些運行時,我也從TextBox.Text中得不到任何東西。 – steamrolla

0

我創建了一個快速的樣品和鋸沒有問題。確保您的構造函數調用InitializeComponents,希望這有助於

private System.Windows.Forms.TextBox filePathBox = new TextBox(); 

    public Form1() 
    { 
     InitializeComponent(); 
     PopulateControls("Something"); 
    } 

    public void PopulateControls(string someText) 
    { 
     if (someText == "Something") 
     { 

      this.filePathBox.Location = new System.Drawing.Point(6, 61); 
      this.filePathBox.Name = "filePathBox"; 
      this.filePathBox.Size = new System.Drawing.Size(220, 20); 

      this.tabPage1.Controls.Add(this.filePathBox); 
      this.filePathBox.Show(); 
     } 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (filePathBox != null) 
     { 
      MessageBox.Show(filePathBox.Text); 
     } 
    }