googleandy 發表於 14-11-30 14:52

請教 C# 控制項陣列問題

VB2010的控制項陣列可以這樣處理,如下圖:




可是, 我把它"轉化" 到C#卻行不通, 如下圖:

private void button1_Click(object sender, EventArgs e)
      {
            for (int i = 1; i <= 3; i++)
            {
                groupBox1.Controls("label" + (i.ToString())).Text = i.ToString();
            }
      }


請問,這個錯誤訊息何解?
thanks.




rich888 發表於 14-11-30 19:13

看來groupBox1.Controls在VB Net 是一個方法,在C#上是個屬性,我的作法
private void button1_Click(object sender, EventArgs e)
      {

             foreach (Control c in this.groupBox1.Controls)
             {
               if (c is Label)
               {   
                      c.Text =   c.Name.Substring(5) ;
               }
             }

googleandy 發表於 14-11-30 19:22

rich888 發表於 14-11-30 19:13 static/image/common/back.gif
看來groupBox1.Controls在VB Net 是一個方法,在C#上是個屬性,我的作法
private void button1_Click(object ...


成功了, 謝謝 rich888大!

對,groupBox1.Controls在VB Net 是一個方法,在C#上是個屬性.
{:4_113:}太強了!


rich888 發表於 14-11-30 19:28

不客氣,有幫到您就好.{:4_209:}

googleandy 發表於 14-11-30 20:27

本帖最後由 googleandy 於 14-11-30 20:35 編輯

rich888 發表於 14-11-30 19:13 static/image/common/back.gif
看來groupBox1.Controls在VB Net 是一個方法,在C#上是個屬性,我的作法
private void button1_Click(object ...


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

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
      public Form1()
      {
            InitializeComponent();
            //1.建立Label物件
            Label[] lblCtl = new Label;
            for (int i = 1; i <= 3; i++)
            {
                lblCtl = new Label();
            }
            for (int i = 1; i <= 3; i++)//!= lblStrkPrc.Length
            {
                //2.加入控制項
                this.groupBox1.Controls.Add(lblCtl);
                lblCtl.Text = "Label" ;
                lblCtl.Top = Convert.ToInt32(20 + (lblCtl.Height * i * 1.3));
                lblCtl.Height = 28;
                lblCtl.Width = 115;
                lblCtl.Left = 13;
                lblCtl.BackColor = Color.Lime;
            }
      }

      private void button1_Click(object sender, EventArgs e)
      {

      }                     
    }
}



請教 rich888大,
程式開始就已動態加入 控制項(藍字)

請問, button1_Click要填入什麼程式才可達到前面所述的效果?
thanks.

googleandy 發表於 14-11-30 20:48


我之所以有上述問題是因為 ---
控制項若是 "動態"建立, 那麼,還在撰寫階段時候,
C#找不到那些控制項(執行才會產生).
請問如何克服這問題? thanks.



paf 發表於 14-11-30 20:54

本帖最後由 paf 於 14-11-30 20:58 編輯

googleandy 發表於 14-11-30 20:48 static/image/common/back.gif
我之所以有上述問題是因為 ---
控制項若是 "動態"建立, 那麼,還在撰寫階段時候,
C#找不到那些控制項(執 ...
將 Label[] lblCtl 宣告在全域變數
看要private Label[] lblCtl 或publicLabel[] lblCtl 皆可

      private Label[] lblCtl;
      public Form1()
      {
            InitializeComponent();          
            lblCtl = new Label;
            .......


這樣子在button_click event中就可以針對lblCtl 做assign

googleandy 發表於 14-11-30 21:03

paf 發表於 14-11-30 20:54 static/image/common/back.gif
將 Label[] lblCtl 宣告在全域變數
看要private Label[] lblCtl 或publicLabel[] lblCtl 皆可



太強了, 成功了.
原來要宣告在全域變數區.

感謝 paf大.{:4_113:}
Coco-In 的C#高手真不少.

rich888 發表於 14-12-1 00:06

不好意思 剛好人不再 ,有人回答的就好.{:4_209:}

randloop 發表於 14-12-2 00:05

Hi

補充一下

VB.NET的索引子用小括號取

若要用C#請改用中括號



頁: [1]
查看完整版本: 請教 C# 控制項陣列問題