none
請問各位大大關於2010版和2008版C#指令 (Controls) 的問題 RRS feed

  • 一般討論

  • 因為我想用for迴圈執行textbox1,textbox2,textbox3中的Text文字

    例如:

    其他的宣告我忽略了...

    using System.Web;

    int[] number = {1,2,3,4,5};

    for(int i=1;i<=5;i++)

    {

          string tbName = string.Format("textbox{0}",i);

          this.Controls[tbName].Text = number[i-1].Tostring();

    }

    請問在2010版中this.Controls[tbName].Text = number[i-1].Tostring();

    該怎麼轉換成2008版本可執行的形式

    因為同樣的指令在2008版本中無法執行

    出現了NullReferenceException 並未將物件參考設定為物件的執行個體

    請問各位大大 我該怎麼改寫呢??



    2012年5月13日 下午 03:18

所有回覆

  • 首先 陣列宣告的方式是錯的

    另外

    如果是Web Application 

    不管是是 2008 或是2010 都不支援 Controls[ string ] 的用法

    如果是Windows Form Application (不需要using System.Web)

    確認有textbox1 ~ textbox5 的存在

    還有不存在number[5] , 只有number[0]~number[4]



    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年5月13日 下午 03:48
  • textbox1~5已存在Form上

    排版亂掉了 抱歉

    還有我輸入this.Controls[tbName].Text = number[i].Tostring(); 的時候 "."後面的物件都是可以選取的

    2012年5月13日 下午 05:35
  • 可否上傳你的 vs 2008的專案 ?

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年5月13日 下午 05:46
  • [Control.ControlCollection.Item 屬性 (String)] 是有的, 沒弄錯的話, 這屬性自 .Net Framework 2.0 就支援了

    我唯一看到的可能性是你的 ToString() 的大小寫有問題, 因為你寫成 Tostring()


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月13日 下午 05:55
    版主
  • 不知道有沒有誤解你的需求,我把你所提供的程式碼改成下列的樣子,希望對你有幫助。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace DemoCSharp
    {
        public partial class WebForm4 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                int[] number = { 1, 2, 3, 4, 5 };
    
                //for (int i = 1; i <= 5; i++)
                for (int i=0;i<number.Length;i++) //改成用number陣列的長度來做FOR LOOP的依據
                {
                    //改成讀取number的陣列值
                    //string tbName = string.Format("textbox{0}", i);
                    string tbName = string.Format("textbox{0}", number[i]);
    
                    //this.Controls[tbName].Text = number[i - 1].Tostring();
                    //Controls是個集合,只能用index來存取,我嘗試改成下列的樣子
                    //另外控制項必須轉型為TextBox
                    (this.FindControl(tbName) as TextBox).Text = number[i].ToString(); //C#有分大小寫,因此必須改成ToString()
                }
            }
        }
    }


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月13日 下午 11:17
  • 您好,

    小弟拉了5個textBox,使用您的code是可work的哦!

    您可以debug一下,看是錯在那裡哦!

    是不是this.Controls[tbName]取到的是null呢?


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年5月14日 上午 01:28
  • 這是Web專案還是Windows專案?

    2012年5月14日 上午 03:54
  • 問題已解決

    感謝各位細心回覆我的問題,我已經找到問題的癥結點了,就是我把textbox放在groupbox上面

    所以造成this.Controls[tbName].Text找不到東西

    只要改成this.groupBox1.Controls[tbName].Text = number[i-1].ToString();

    問題就得解決了

    int[] number = {1,2,3,4,5};

    for(int i=1;i<=5;i++)

        {

        string tbName = string.Format("textbox{0}",i);

        this.groupBox1.Controls[tbName].Text = number[i-1].ToString();

        }

    最後還是謝謝各位大大

    2012年5月14日 下午 04:19
  • 那可以請你以後發問時可以詳細一點嗎 ?

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月14日 下午 04:50
    版主