none
如何依畫面排序依序找出所有的物件 RRS feed

  • 問題

  • 小弟想請教,我建立了一個視窗裡面由左至右共排列了100個Label,

    如果我現在想找出所有的Label(利用 foreach (Control ctrl in this.Controls)之類的方式) ,然後依畫面由左至右由上至下找出所有的Label,我該怎麼做才行?

    2011年11月18日 上午 07:44

解答

  • 建議Label的Name有一定的命名,然後依您要的去排列,再用Controls.Find去找到那些Label

    //label count
    int controlCount = 12;
    const string labelName = "label{0}";
    for (int i = 1; i <= controlCount; i++)
    {
    	Control[] labelList = this.Controls.Find(string.Format(labelName, i.ToString()), false);
    	if (labelList.Length > 0)
    	{
    		//有找到Label
    		listBox1.Items.Add(labelList[0].Name);
    	}
    }
    


     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    • 已編輯 亂馬客 2011年11月18日 上午 08:29
    • 已標示為解答 天狼星人 2011年11月18日 上午 08:40
    2011年11月18日 上午 08:26

所有回覆

  • 您好

    是否能說明這樣做的意義是什麼? 也許你在建立 Label 時就能透過一些屬性例如 Tag 屬性去紀錄順序


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年11月18日 上午 08:23
    版主
  • 建議Label的Name有一定的命名,然後依您要的去排列,再用Controls.Find去找到那些Label

    //label count
    int controlCount = 12;
    const string labelName = "label{0}";
    for (int i = 1; i <= controlCount; i++)
    {
    	Control[] labelList = this.Controls.Find(string.Format(labelName, i.ToString()), false);
    	if (labelList.Length > 0)
    	{
    		//有找到Label
    		listBox1.Items.Add(labelList[0].Name);
    	}
    }
    


     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    • 已編輯 亂馬客 2011年11月18日 上午 08:29
    • 已標示為解答 天狼星人 2011年11月18日 上午 08:40
    2011年11月18日 上午 08:26
  • 小弟主要是為了要依序貼上資料,所以如果我有三組共三排 Label 必須要能由畫面的排序貼上,如果找到的Label在畫面的位是不連續,那我貼的時候會沒辦法和同組的對應到。
    2011年11月18日 上午 08:42
  • 謝謝亂馬客,感謝。
    2011年11月18日 上午 08:43
  • 建立一個類別或結構儲存位置

    ex:

    class label_index

        {

            public Point point;

            public Label label;

            public label_index(Label t)

            {

                point = t.Location;

                label = t;

            }

        }

    從左找到右就看point.X的值就好,越小越左邊

     

    2011年11月18日 上午 08:49