none
動態建立物件時的屬性存取 RRS feed

  • 問題

  • 大家好

    假設我有ㄧ個 button 是在 run time 的時候才建立的, 並不是在表單那邊拖曳進去的

    請問要怎麼存取他的物件屬性呢? 假設我要存取 .text (編譯的時候就不過了, 因為那個物件是要 compile完才會建出來的 )

    謝謝

    2011年9月30日 上午 11:29

解答

  • 各位好, 小弟已找到替代方法

    這是在建立 numericupdown 中的屬性 Name的code

     this.ManualCalValueNumericUpDown[i].Name = ManualCalButon_Prefix[i] + "_NumericUpDown";

    但是在動態建立這個numericupdown 時候, compiler 不認得我塞給他的Name (ManualCalButon_Prefix[i] + "_NumericUpDown";)

    所以我直接用ㄧ開始宣告出來的  this.ManualCalValueNumericUpDown[i].Name 就過了.... 

    謝謝

    2011年10月3日 上午 06:10

所有回覆

  • 應該是你的屬性名稱寫錯了, 您可以這樣寫:

    Button btn=new Button();

    btn.Text="OK";

    this.Controls.Add(btn);

    2011年9月30日 上午 11:51
  • 你如何建立的?
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年9月30日 下午 12:23
  • 報告tihs 屬性名稱應該沒錯
    2011年10月3日 上午 01:51
  •             for (i = 0;  i < ManualCalNum ; i++)
    {
                    this.ManualCalTuneButton[i] = new Button();
                    this.ManualCalTableLayoutPanel.Controls.Add(this.ManualCalTuneButton[i], 2 + (i / ManualCalNum) * 2, (i % ManualCalNum) + 1);
                    this.ManualCalTuneButton[i].Text = "TUNE";
                }
    2011年10月3日 上午 01:52
  •             for (i = 0;  i < ManualCalNum ; i++)
     {
                    this.ManualCalTuneButton[i] = new Button();
                    this.ManualCalTableLayoutPanel.Controls.Add(this.ManualCalTuneButton[i], 2 + (i / ManualCalNum) * 2, (i % ManualCalNum) + 1);
                    this.ManualCalTuneButton[i].Text = "TUNE";
                }


    模擬了一下您的程式碼,可以通過編譯

            Button[] ManualCalTuneButton = new Button[2];
            int ManualCalNum = 2;
            private void Form1_Load(object sender, EventArgs e)
            {
                for (int i = 0; i < ManualCalNum; i++)
                {
                    this.ManualCalTuneButton[i] = new Button();
                    this.ManualCalTableLayoutPanel.Controls.Add(this.ManualCalTuneButton[i], 2 + (i / ManualCalNum) * 2, (i % ManualCalNum) + 1);
                    this.ManualCalTuneButton[i].Text = "TUNE";
                }
                                   
              
            }
    

     請檢查看看ManualCalTuneButton陣列大小有沒有宣告,型別是不是Button

     
    Shadowと愉快なコード達

    2011年10月3日 上午 02:04
  • 沒有耶  因為這之後我有做function的委派

    AutoCalButton[i].GetType().GetEvent("Click").AddEventHandler(AutoCalButton[i],

                    Delegate.CreateDelegate(ty, this, AutoCalButon_Prefix[i] + "_Auto_CalButton_Click", false));

    就是click事件發生後會觸發上述的function

    2011年10月3日 上午 05:10
  •         private void ICTAT_Manual_CalButton_Click(object sender, EventArgs e)
            {
                if (((Button)(sender)).Name == "ICTAT" + "_CalButton_CalButton")
                {
                    WriteReg(1, 0x1, 0x0041, Delay500ms);
                    DumpUSBProtocol();
                }
                else if (((Button)(sender)).Name.Substring(0,20) == "ManualCalTuneButton_")
                {            
                    //ICTAT_NumericUpDown.Value++;
                }
                else
                    WriteReg(1, 0x1, 0x0004, Delay500ms);
            }
    在我中間mark掉 //ICTAT_NumericUpDown.Value++; 此行會出錯
    這個ICTAT_NumericUpDown也是透過相同手法建立的item
    2011年10月3日 上午 05:20
  • 各位好, 小弟已找到替代方法

    這是在建立 numericupdown 中的屬性 Name的code

     this.ManualCalValueNumericUpDown[i].Name = ManualCalButon_Prefix[i] + "_NumericUpDown";

    但是在動態建立這個numericupdown 時候, compiler 不認得我塞給他的Name (ManualCalButon_Prefix[i] + "_NumericUpDown";)

    所以我直接用ㄧ開始宣告出來的  this.ManualCalValueNumericUpDown[i].Name 就過了.... 

    謝謝

    2011年10月3日 上午 06:10
  • 問的是Button,結果實際有問題的是NumericUpDown。

    可惜論壇沒有按讚的功能...

    2011年10月3日 上午 06:17
  • 阿尼大大抱歉啦

    因為他是相同的方法建出來的

    我想道理應該是一樣的

    2011年10月3日 上午 06:23
  • 發問時最忌諱是這種... 雞同鴨講。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年10月3日 下午 12:35