2012-02-20 13 views
1

我試圖創建一個文本框名稱,因爲我有很多它們,所以它會使寫入更容易,而不是使用循環。我正在使用Visual Stdio 2010,.NET 2.0。下面的代碼是我的例子,但我無法讓它工作。C#在飛行中創建文本框名稱

private delegate void NameCallBack(string varText, int b); 
public void UpdateTextBox(string input, int t) 
{ 
    //TextBox tb = FindControl ("textBox" + t.ToString()) as TextBox; 
    TextBox tb = this.Controls["textBox" + t.ToString()] as TextBox; 

    if (InvokeRequired) 
    { 
     tb.BeginInvoke(new NameCallBack(UpdateTextBox), new object[] { input, t }); 
    } 
    else 
    { 
     tb.Text = tb.Text + Environment.NewLine + input; 
    } 
} 

我已經看了一些關於這裏和其他網絡來源的例子,但我只是不明白。有人能指出什麼可能是一個愚蠢的錯誤嗎?非常感謝:)

對不起,我得到的錯誤是,它不更新文本框,這不是一個真正的錯誤。如果我使用註釋掉的代碼,那麼它找不到「FindControl」方法。我看起來像this.controls,但我很困惑,我一直在嘗試這個很長時間,我想我需要休息一下:)

+0

WPF,Silverlight等? – MyKuLLSKI 2012-02-20 18:56:58

+0

什麼不起作用?你會得到什麼樣的錯誤? – Msonic 2012-02-20 18:57:10

+0

看看Controls.Find()方法。 – HardCode 2012-02-20 18:58:01

回答

0

我將你的代碼複製到一個示例WinForms項目,它工作正常。

你可能已經檢查這一點,但它是值得一提的是,你希望你的TextBoxMultiline,你前添加一個換行符增加的實際文本,所以第一行是空的。 如果您的TextBox的高度允許它一次只顯示一行,則帶有文本的行可能只是不可見,因此它看起來沒有更新。

無論哪種方式,我做了一些小的修改你的代碼,以簡化它一點點,而不是先輸入之前輸入新行:

private delegate void NameCallBack(string varText, int b); 
public void UpdateTextBox(string input, int t) 
{ 
    TextBox tb = this.Controls[String.Format("textBox{0}", t)] as TextBox; 

    if (InvokeRequired) 
    { 
     tb.BeginInvoke(new NameCallBack(UpdateTextBox), input, t); 
    } 
    else 
    { 
     if (!String.IsNullOrEmpty(tb.Text)) 
     { 
      tb.Text += Environment.NewLine; 
     } 
     tb.Text += input; 
    } 
} 

看來工作。

更新

如果這樣還是不行,這個問題似乎是在其他地方。 請再次檢查您希望文本出現的文本框名稱爲textBox<x>,其中<x>是適當的數字。

另一件事是確保不會拋出任何異常(它們可能會在代碼中的其他位置被捕獲)。爲了打破在所有異常去調試例外...並在出現選中複選框與公共語言運行庫異常相關時拋出列的窗口。

+0

嘿,謝謝!唯一的事情是我的文本框大約是600 x 600,多行但不顯示任何內容,但是如果我註釋掉文本框tb = ...並將tb分配給textBox2,它會在屏幕上正確顯示,有什麼想法? – James 2012-02-20 19:49:41

+0

你如何調用UpdateTextBox方法?確保你使用像UpdateTextBox(「我的文本」,2);。 – 2012-02-20 19:56:14

+0

我稱之爲...程序。MainLogWindow.UpdateTextBox(convertedHex,textBox); – James 2012-02-20 20:03:26