我有問題,當我想添加控件到動態創建的標籤頁時。我的軟件是餐館的POS系統。我的想法是首先創建餐廳地區和地區有不同數量的桌子。例如:餐廳的地區有15個辦公桌,咖啡吧地區有22個辦公桌。在這種情況下,類似產品和產品的地區都有辦公桌。所以要做到這一點,我使用tabcontrol
組件!所有tabpages
是區域名稱和tabpage內容必須是桌面顯示爲buttons
...C#winforms添加控件到動態創建的標籤頁
所有地區和辦公桌都存儲在MySql
數據庫中。
因此,如果tab_1(區域#1)被選爲內容循環頁面上的所有桌子buttons
。
我的代碼所有的時間只返回一個辦公桌,但我有10桌的區域1 ..
規範上市地區:
private void RegionList()
{
try
{
using (var conn = new MySqlConnection(Properties.Settings.Default["connectionstring"].ToString()))
{
conn.Open();
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM regions";
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
TabPage tabPage = new TabPage();
string name = reader["name"].ToString();
int id = Convert.ToInt32(reader["id"]);
tabPage.Name = "tab_" + id;
tabPage.Text = name;
foreach (var desk in DeskList(id))
{
tabPage.Controls.Add(desk);
}
tabControl1.TabPages.Add(tabPage);
}
reader.Close();
}
conn.Close();
};
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
這裏是對具體區域上市書桌碼:
private List<Button> DeskList(int regionID)
{
List<Button> desks = new List<Button>();
try
{
using (var conn = new MySqlConnection(Properties.Settings.Default["connectionstring"].ToString()))
{
conn.Open();
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT * FROM desks WHERE region_id = @id";
cmd.Parameters.AddWithValue("id", regionID);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Button btn = new Button();
string name = reader["name"].ToString();
btn.Text = name;
btn.Name = "desk_" + reader["id"];
btn.Size = new Size(100, 60);
desk.Add(btn);
}
reader.Close();
};
conn.Close();
};
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return desks;
}
所以當我循環這個我得到只在所有地區只有1桌但正確的結果。所有地區都有10個辦公桌。我做錯了什麼? Maybie我的appoarch是錯的
這可能是所有按鈕對象是在用戶界面創建,但他們很可能都堆放在彼此的頂部,因爲沒有位置上的任何設置(除非'來電DeskList'做這一切) –
DeskList(id)是否返回10個元素的列表? – hellogoodnight
是的位置問題。當我添加位置工作良好時,按鈕僅被疊放 – Ivan