none
請問一個有關元件控制的問題... RRS feed

  • 問題

  •  

    我在自訂的panel上產生了一個label元件與button元件...希望當按下button時, label顯示 "CLICK!"... 但實際上會產生一個例外錯誤~~ 請問是哪裡有問題呢?

     

    Code Snippet

    internal class SampleControl : Panel
    {
      private Label a;

     public SampleControl(int width, int height)
      {
        Panel frame = new Panel();
        frame.BorderStyle = BorderStyle.FixedSingle;
        frame.SetBounds(0, 0, width, height);         
        frame.Parent = this;           
          
        //create a label                      
        Label a = new Label();
        a.Text = "This is a label.";
        a.Location = new Point(7, 12);           
        a.Size = new Size(135, 15);
        frame.Controls.Add(a);

     

       //create a button with a click event
        Button Btest = new Button();        
        Btest.Text = "OK";
        Btest.Location = new Point(243, 291);
        Btest.Size = new Size(127, 36);
        Btest.Click += new System.EventHandler(this.Btest_Click);
        frame.Controls.Add(Btest);

       ...
      }

     

     private void Btest_Click (object obj, EventArgs ea)
      {           
        a.Text="CLICK!";
      }

       ...

    }

     

    2007年6月26日 上午 07:36

解答

  • hi 你好:

                  你必須把你的labal  new成全域變數喔^^

      

    Code Snippet

    internal class SampleControl : Panel
    {
      private Label a=new Label();  

     public SampleControl(int width, int height)
      {
        Panel frame = new Panel();
        frame.BorderStyle = BorderStyle.FixedSingle;
        frame.SetBounds(0, 0, width, height);         
        frame.Parent = this;           
          
        //create a label                      
        Label a = new Label();   這行刪掉
        a.Text = "This is a label.";
        a.Location = new Point(7, 12);           
        a.Size = new Size(135, 15);
        frame.Controls.Add(a);

     

       //create a button with a click event
        Button Btest = new Button();        
        Btest.Text = "OK";
        Btest.Location = new Point(243, 291);
        Btest.Size = new Size(127, 36);
        Btest.Click += new System.EventHandler(this.Btest_Click);
        frame.Controls.Add(Btest);

       ...
      }

     

     private void Btest_Click (object obj, EventArgs ea)
      {           
        a.Text="CLICK!";
      }

       ...

    }

                                                                                                   馬小玲 

    2007年6月26日 上午 09:41
  •   //create a label                      
        Label a = new Label();

     

    外面定義一個 private Label a;

    裡面又定義一個 Label a

     

    Button Click 要抓的那個 a 還是 null,

    自然會有 exception 了

     

    把上面那行改成

    a = new Label();

    試試看

     

    2007年6月26日 上午 09:45

所有回覆

  • hi 你好:

                  你必須把你的labal  new成全域變數喔^^

      

    Code Snippet

    internal class SampleControl : Panel
    {
      private Label a=new Label();  

     public SampleControl(int width, int height)
      {
        Panel frame = new Panel();
        frame.BorderStyle = BorderStyle.FixedSingle;
        frame.SetBounds(0, 0, width, height);         
        frame.Parent = this;           
          
        //create a label                      
        Label a = new Label();   這行刪掉
        a.Text = "This is a label.";
        a.Location = new Point(7, 12);           
        a.Size = new Size(135, 15);
        frame.Controls.Add(a);

     

       //create a button with a click event
        Button Btest = new Button();        
        Btest.Text = "OK";
        Btest.Location = new Point(243, 291);
        Btest.Size = new Size(127, 36);
        Btest.Click += new System.EventHandler(this.Btest_Click);
        frame.Controls.Add(Btest);

       ...
      }

     

     private void Btest_Click (object obj, EventArgs ea)
      {           
        a.Text="CLICK!";
      }

       ...

    }

                                                                                                   馬小玲 

    2007年6月26日 上午 09:41
  •   //create a label                      
        Label a = new Label();

     

    外面定義一個 private Label a;

    裡面又定義一個 Label a

     

    Button Click 要抓的那個 a 還是 null,

    自然會有 exception 了

     

    把上面那行改成

    a = new Label();

    試試看

     

    2007年6月26日 上午 09:45
  • 感謝 馬小玲, Steve Vai...

     

        結果原來是自己一時粗心寫錯了...再次感謝你們的熱心回覆!!!~ 

     

    earthcat

    2007年6月26日 上午 09:52