2017-02-10 63 views
0

我還有什麼: Big PictureBox(讓我們稱之爲Pic_Map)在窗體上。類Ore.cs,A List<Ore> ores;和一個數據庫,它將數據提取並放入ores列表中。在循環中添加控件(Picturebox)

功能:所以,這個功能是我有一個TextBox/Combobox和一個按鈕。當我按下按鈕時,它將通過ores列表循環,並且基於等於數據的TexBox/ComboBox(在本例中爲Ore_Name),在Pic_Map的頂部動態添加PictureBoxes。

問題:這一切工作正常,但問題是,當我加入PictureBoxes動態,似乎只添加ores名單上的最後一個值(上Pic_Map紅色圓圈)。所以,它最終只顯示1個PictureBox,而不是讓我們說3,因爲我有3個與TextBox/ComboBox匹配的值名稱。

問題:如何讓它工作,就像我寫/選擇「Flame Stone」一樣,它在名稱中包含「Flame Stone」的所有數據上添加它(而不是僅添加最後一個來自列表中的值)。

代碼:

private void PopulateComboBoxByName() 
    { 
     PictureBox ore_Area = new PictureBox(); 

     db.GetOre(); //Getting data and putting it into "ores" list 

     foreach (Ore ore in db.ores) 
     { 
      if (CBOX_Filter.SelectedItem.ToString() == ore.Ore_Name) 
      { 
       int area_Width = Convert.ToInt32(ore.Area_Width); 
       int area_Height = Convert.ToInt32(ore.Area_Height); 

       int ore_Width = Convert.ToInt32(ore.Ore_Width); 
       int ore_Height = Convert.ToInt32(ore.Ore_Height) - area_Height/2; 
       ore_Area.Name = "ore_Area"; 

       ore_Area.ImageLocation = @"Data\Images\Circle.png"; 
       ore_Area.SizeMode = PictureBoxSizeMode.StretchImage; 

       ore_Area.Size = new Size(Convert.ToInt32(area_Width), Convert.ToInt32(area_Height)); 
       ore_Area.Location = new Point(Convert.ToInt32(ore_Width), Convert.ToInt32(ore_Height)); 
       ore_Area.BackColor = Color.Transparent; 

       this.Controls.Add(ore_Area); 
      } 
     } 

     ore_Area.Parent = PIC_Map; 
    } 

圖片:

數據: Data

地圖: Dynamic Picturebox (red circle)

+0

這個位置是否總是一樣? – LarsTech

+0

是的,基本上「Image_Width」和「Image_Height」是放置圖片框的表單的座標。所以位置等可以是相同的,無所謂。 – SunnlightBro

+1

你只創建一個PictureBox, – LarsTech

回答

0

感謝LarsTech,它已得到修復。

使圖框在循環內移動,this.controls.add更改爲PIC_Map.controls.add並刪除Ore_Area.Parent = PIC_Map;