我申请这个博客的主要原因是我想把我做的项目中碰到的问题记录下来,以便自己以后去查阅或者和我一样的刚接触编程的朋友来借鉴一下,希望能帮助你们

今天我记录的是:关于winform动态创建button等控件以及规定行列。也就是说在winform项目中动态创建button按钮或者是

pictureBox等等很多控件,并且可以规定一行有多少个控件 以及每个控件之间距离。

举个例子:比如说我们要根据数据库中商品所对应的图片数量的记录来创建pictureBox,当然每一种商品对应的图片数量都是不相同的,并且在pictureBox下面都写上一个button按钮用于删除。

首先我们需要判断图片的数量,当然我们一定会知道这个字段的id之类的值然后根据这个来获取表示数量的值

就好比images表中有ID 、picname、pic_id等等字段而ID是自增的我们知道的是pic_id字段的值,这个pic_id对应很多picname就比如说这个

38就是pic_id而../vimg/2008425……这些就是picname当然这些picname都是不相同的后面的没显示出来,这时候我们就先判断pic_id数量

select count(*) from images where pic_id ='38'

SqlConnection con = new SqlConnection(constring);

                SqlCommand cmd = new SqlCommand(sql,con);

                con.Open();

                int count = (int)cmd.ExecuteScalar();

                con.Close();

这个count就是pic_id的数量

也可以用别的方法

string sql = "select * from images where ID=‘38’;

                    qlConnection con = new SqlConnection(constring);

                    SqlDataAdapter da = new SqlDataAdapter(sql, conn);

                    con.Open();

                    DataSet ds = new DataSet();

                    da.Fill(ds, "images");

                    DataTable dt = ds.Tables["images"];

这时候的数量就会是dt.Rows.Count

通过这两种方法获得pic_id的数量之后

就要用for循环一条一条的显示

for (int i = 0; i < Count; i++)

 {

}

或者

for (int i = 0; i < dtt.Rows.Count; i++)

{

}

 然后就要进行创建控件了

创建控件你可以用****.Designer.cs(Windows 窗体设计器生成的代码)里面创建的控件直接复制出来

pictureBox的代码创建控件

下面这是修改之后的

PictureBox pic = new PictureBox();     //首先实例化pictureBox

                        pic.Cursor = System.Windows.Forms.Cursors.Arrow;

                        pic.Dock = System.Windows.Forms.DockStyle.None;

                        pic.Enabled = true;

                        pic.InitialImage = null;

                        pic.Location = new System.Drawing.Point(x + 10, y);   //这个是控制在界面上的坐标 x,y是我设置的变量后面会详细讲到

                        pic.Name = dtt.Rows[i]["ID"].ToString();                    //这个每个pictureBox的name  动态的

                        pic.Size = new System.Drawing.Size(100, 93);         //这个是控件的大小!你可以自己先拖一个控件试一下

                        pic.TabIndex = i;

                        pic.TabStop = false;

                        pic.WaitOnLoad = true;

                        pic.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;

                        this.Controls.Add(pic);                           //这个是最主要的!功能是把pictureBox画到界面上!没有这个就显示不出来

     在创建控件你还要规定一行有几个

    int tmp = 1;   //定义tmp这个要在for循环外面定义 

    int n = i % 5;    //这里定义了一个n  这个n就是i除以5所得的余数

                        if (n == 0 && i != 0)    

                        {

                            tmp++;

                        }                   //这个条件语句的意思是:如果控件的数量正好是5的倍数的话那么tmp+1  这个是用于控制y轴的

                        int x = n * 150, y = 130 * tmp;     //这里定义的x和y便于控制控件在界面上的位置

 

具体实例:

 Button btn = new Button();

                        btn.Location = new System.Drawing.Point(x + 10, y + 93);

                        btn.Name = dtt.Rows[i]["ID"].ToString();

                        btn.Size = new System.Drawing.Size(75, 23);

                        btn.TabIndex = 18;

                        btn.Text = "删除";

                        btn.UseVisualStyleBackColor = true;

                        btn.Click += new EventHandler(btn_Click);//button的单击事件

                        this.Controls.Add(btn);

现在是用的一个button来代替的pictureBox  用法是一样的

下面来说一下button单击事件

你可以在this.Controls.Add()这个上面写btn.Click+=然后按两次Tab键 这个有提示  这就会在下面显示button的单击事件

 void btn_Click(object sender, EventArgs e)

这个,这时候你需要把值传过来

这时候就要用

  Button btn = sender as Button;

   string nameid = btn.Name;这个把button的name值传过来

这里定义的stirng类型的nameid就是button的name

然后在这里你就可以进行下面的操作了!

这篇文章应该还有不规范的地方!如果有朋友发现了希望能告诉我,如果有好的方法的话也希望能浪费你几分钟的时间告诉我一声,在这先谢谢了

我刚接触C#还有很多不懂的地方!希望朋友们多多帮助!我会不胜感激

posted on 2012-12-11 21:10  田亦裔  阅读(3644)  评论(0编辑  收藏  举报