每行生成4个动态按钮和浮动标签

时间:2017-09-18 16:04:49

标签: c# winforms loops

我有一张桌子services。使用 SQL 我正在检索此循环中的所有数据:

           using (SqlConnection con = new SqlConnection(@"ConnectionString"))
            {
                try
                {

                    using (var cmd = new SqlConnection(@"ConnectionString"))
                    {

                        var select3 = "SELECT name,number FROM services";

                        // Open connection
                        cmd.Open();
                        // Create command
                        SqlCommand cmd3 = new SqlCommand(select3, cmd);
                        // Create data reader
                        SqlDataReader rdr3 = cmd3.ExecuteReader();
                        // Loop through result set


                        while (rdr3.Read())
                        {

                          Button b = new Button();
                            b.Location = new Point(150 * (i % 4) + 12, 30 * i + 10);
                            b.Height = 179;
                            b.Width = 119;
                            b.Text = (rdr3["number"].ToString().Trim());
                            b.Name = string.Format("b_{0}", i + 1);
                            //b.Click += b_Click;
                            //b.Dock = DockStyle.Fill;
                            Controls.Add(b);

                            Label lbl = new Label();
                            lbl.Location = new Point(150 * (i % 4) + 12, 30 * i + 10);
                            lbl.Text = (rdr3["name"].ToString().Trim());
                            lbl.Tag = i;
                            Controls.Add(lbl);
//end dynamic generation
                        }
                        // Close data reader
                        rdr3.Close();

                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error during insert! " + ex);
                }
            }

*此代码的唯一问题是所有按钮和标签都在第一行中被推送如下:

c sharp buttons and labels generation problem

所以我希望这个循环显示 ONLY 4个按钮和4个标签每行,并且没有行数限制。结果应该是这样的:

Generate 4 buttons and 4 labels per each line

提示: 请不要理会 FlowLayoutPanel和TableLayoutPanel ,因为它们不合适,因为它们往往不允许Label浮动(x, x)按钮上方的位置。

1 个答案:

答案 0 :(得分:1)

您正在明确设置按钮的位置属性并标记

b.Location = new Point(12, 30 * i + 10);

但是,您只需针对i改变一个方向的位置。您可能需要改变两个方向。像

这样的东西
b.Location = new Point( 100 * (i/4) + 12, 30 * (i%4) + 10);

通过将i/4的倍数增加第一个值,每4个按钮向下移动一次,并通过将第二个值更改为使用i%4的倍数,该值将重置每个新行。

您可能需要使用乘以i/4的值来获得符合您需求的内容。