none
動態新增的Label如何改變指定某個Label的Text RRS feed

  • 問題

  • 請問我做了一個按鈕讓它被執行時可生成12個Label, 請問如何能做另一個按鈕去改變剛剛生成的Label的Text值?

    下面是button3被執行時可生成12個Label, 但我想做另一個按鈕去改變生成後其中一個Label的Text!!

    public void button3_Click(object sender, EventArgs e)
            {
                int x_pos = 50;
                int y_pos = 20;
                for (int i = 1; i <= 4; i++)
                {
                    for (int j = 1; j <= 3; j++)
                    {
                        Label lb = new Label();
                        lb.Name = "btn" + i.ToString() + j.ToString(); 
                        lb.Location = new System.Drawing.Point((x_pos * i), (y_pos * j));
                        lb.Text = "第 " + i.ToString() + j.ToString() + " 個按鈕";
                        lb.Size = new System.Drawing.Size(30, 30); 
                        this.Controls.Add(lb); 
                    }
                }         
            }

    2016年7月30日 上午 11:33

解答

  • (1) 最簡單直覺的作法: 弄一個 label 集合或陣列之類的紀錄生成的 label. 當然這個集合要是個 field(欄位)

    (2) 比較進階一點的作法, 讓每個 label 的 Text 屬性繫結到一個資料結構, 只要操作每個 label 對應的資料結構就可以了.


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


    2016年7月30日 下午 04:05
    版主
  • 您可以在另外一個Button的Click事件處理程序中這樣做:

     foreach (Control c in Controls)
    {
      if (c is Label && c.Name=="btn12")
      {
        c.Text = "A";
      }
     }

    再調整一個x_pos, y_pos的距離與Label的Size, 就可以看到名稱為btn12的Label的顯示文字被改掉了

    2016年7月31日 上午 02:00
  •   public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Class1 obj = new Class1(this);
                obj.CreateLabels();
            }
        }

       class Class1
        {
    
            private Form parentForm;
    
            public Class1(Form form)
            {
                parentForm = form;
            }
    
            public void CreateLabels()
            {
                int x_pos = 70;
                int y_pos = 50;
                for (int i = 1; i <= 3; i++)
                {
                    Label bt = new Label();
                    bt.Name = "btn" + i.ToString();
                    bt.Location = new System.Drawing.Point((x_pos * i), (y_pos * i));
                    bt.Text = "我是第 " + i.ToString() + " 個按鈕";
                    bt.Size = new System.Drawing.Size(50, 50);
    
    
                    parentForm.Controls.Add(bt);
                }
            }
        }
    這樣看得懂吧?


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


    2016年8月4日 上午 10:15
    版主

所有回覆

  • (1) 最簡單直覺的作法: 弄一個 label 集合或陣列之類的紀錄生成的 label. 當然這個集合要是個 field(欄位)

    (2) 比較進階一點的作法, 讓每個 label 的 Text 屬性繫結到一個資料結構, 只要操作每個 label 對應的資料結構就可以了.


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


    2016年7月30日 下午 04:05
    版主
  • 您可以在另外一個Button的Click事件處理程序中這樣做:

     foreach (Control c in Controls)
    {
      if (c is Label && c.Name=="btn12")
      {
        c.Text = "A";
      }
     }

    再調整一個x_pos, y_pos的距離與Label的Size, 就可以看到名稱為btn12的Label的顯示文字被改掉了

    2016年7月31日 上午 02:00
  • 成功了,感謝幫忙!!
    2016年7月31日 上午 04:15
  • 請問如果把上述的程式碼改建立在類別下,最下面那行的this.Controls.Add(bt);   Controls會被畫紅線,請問該如何解決?

    Form 的執行個體參考傳進去給 Class3 => 抱歉這個不太懂怎麼用!!

    下面是整段程式碼的部分:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WP1
    {
        class Class3
        {
            public void makeimage()
            {
                int x_pos = 70;
                int y_pos = 50;
                for (int i = 1; i <= 3; i++)
                {
                    Label bt = new Label();   
                    bt.Name = "btn" + i.ToString();  
                    bt.Location = new System.Drawing.Point((x_pos * i), (y_pos * i));  
                    bt.Text = "我是第 " + i.ToString() + " 個按鈕";  
                    bt.Size = new System.Drawing.Size(50, 50); 
                    this.Controls.Add(bt);  
                 }
            }
        }
    }

    • 已編輯 Piofong 2016年8月3日 下午 06:26
    2016年8月3日 下午 02:10
  •  "this" 在你的程式碼內的意義代表 "這個執行個體", 你的 Controls.Add , 是要將 Control 加入到某個容器 (比方是個 Form)

    所以你要把 Form 的執行個體參考傳進去給 Class3


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

    2016年8月3日 下午 04:30
    版主
  •   public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Class1 obj = new Class1(this);
                obj.CreateLabels();
            }
        }

       class Class1
        {
    
            private Form parentForm;
    
            public Class1(Form form)
            {
                parentForm = form;
            }
    
            public void CreateLabels()
            {
                int x_pos = 70;
                int y_pos = 50;
                for (int i = 1; i <= 3; i++)
                {
                    Label bt = new Label();
                    bt.Name = "btn" + i.ToString();
                    bt.Location = new System.Drawing.Point((x_pos * i), (y_pos * i));
                    bt.Text = "我是第 " + i.ToString() + " 個按鈕";
                    bt.Size = new System.Drawing.Size(50, 50);
    
    
                    parentForm.Controls.Add(bt);
                }
            }
        }
    這樣看得懂吧?


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


    2016年8月4日 上午 10:15
    版主
  • 感謝幫忙!!我還要自己去看一下相關的說明!!

    2016年8月4日 下午 02:40