因为要动态产生的Button数量为数据库的数据所决定。所以必需用代码产生Button.
要求放在panel上,每行,每列的个数不一样。
超出panel,大小,自动产生滚动条。

解决方案 »

  1.   

    panel1.AutoScroll = true;Button btn = new Button();btn.Size = new Size(75, 20);panel1.Controls.Add(btn);
      

  2.   

    btn.Location = new Point(5, 5); //这个设置位置...具体,你可以根据行列来计算Button摆放的位置...
      

  3.   

    public void putRoomOn()
            {
                // 清空所有房间          
                panel1.Controls.Clear();            //一行排列多少间房            int rowCount = Convert.ToInt32(ds.Tables["FTCSB0"].Rows[0].ItemArray[5].ToString());
                //计数器            int roomCount = 0;
                //房台宽度
                int roomWid = Convert.ToInt32(ds.Tables["FTCSB0"].Rows[0].ItemArray[1].ToString());
                //房台高度
                int roomHei = Convert.ToInt32(ds.Tables["FTCSB0"].Rows[0].ItemArray[2].ToString());
                //数据库房间总数
                int AllRooms = dvroom.Count;
                //两房态之间的距离
                int roomjl = Convert.ToInt32(ds.Tables["FTCSB0"].Rows[0].ItemArray[4].ToString());
              
                //房间Y轴间距            int Locttion_y = 5;
                int i, j;
                for (i = 0; i < AllRooms / rowCount+1; i++)
                {
                    //房台X轴间距                int Location_X = 5;
                    for (j = 0; j < rowCount; j++)
                    {
                        //判断房间数据是否都读齐了
                        if (roomCount == AllRooms)
                            break;                    //labelRoom样式
                        #region
                        labRoom = new Label();
                        labRoom.Name = "labRoom" + i.ToString() + j.ToString();
                        labRoom.AutoSize = false;
                        labRoom.ForeColor = lblAll.ForeColor;
                        labRoom.BorderStyle = BorderStyle.FixedSingle;
                        labRoom.Cursor = System.Windows.Forms.Cursors.Hand;
                        labRoom.Location = new System.Drawing.Point(Location_X, Locttion_y);
                       
                        //获取房间参数
                        roomID = dvroom[i * rowCount + j][0].ToString().Trim();
                        roomType = dvroom[i * rowCount + j][3].ToString().Trim();
    roomzt = dvroom[i*rowCount+j][4].ToString().Trim();
                        roomtzsm = dvroom[i * rowCount + j][8].ToString().Trim();
                        roomydf = dvroom[i * rowCount + j][7].ToString().Trim();
                        roomfj = dvroom[i * rowCount + j][5].ToString().Trim(); 
                        //文本设置
                        labRoom.Text = roomID + "\n" + roomType;
                        //右键菜单
                        labRoom.ContextMenuStrip = this.contextMenu;
                        //颜色设置
                        #region
                        switch (roomzt)
                        {
                            case "VC":
                                labRoom.BackColor = this.lblkjf.BackColor;
                                this.tlTRoom.SetToolTip(labRoom, "\r\n\r\n   " + roomtzsm + "   \r\n\r\n");
                                break;
                            case "OC":
                                labRoom.BackColor = this.lblzhf.BackColor;
                                dvTS.RowFilter = "房号='" + roomID + "' and 标识='I'";
                                try
                                {
                                    string kerenzh = dvTS[0][0].ToString();
                                    string fh = dvTS[0][2].ToString();
                                    string xm = dvTS[0][1].ToString();
                                    string fj = dvTS[0][3].ToString();
                                    string ddrq = dvTS[0][4].ToString();
                                    string ldrq = dvTS[0][5].ToString();
                                    this.tlTRoom.SetToolTip(labRoom, "  \r\n  帐号:" + kerenzh + " 房号:" + fh + "  \r\n  姓名:" + xm + "房价:" + fj + "(¥)  \r\n  抵店日期:" + ddrq + "  \r\n  离店日期:" + ldrq + "\r\n");
                                }
                                catch (Exception ex)
                                {
                                    MessageBox.Show(ex.Message);
                                }
                                break;
                            case "VD":
                                labRoom.BackColor = this.lblzf.BackColor;
                                break;
                            case "OO":
                                labRoom.BackColor = this.lblwxf.BackColor;
                                dvWXXX.RowFilter = "FH0000='" + roomID + "' and XFT000='OO'";
                                dvWXXX.Sort = "RQ0000 desc";
                                this.tlTRoom.SetToolTip(labRoom, dvWXXX[0][3].ToString());
                                break;
                        }
                        #endregion                    labRoom.Size = new System.Drawing.Size(roomWid, roomHei);
                        labRoom.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_MouseDown);
                        labRoom.DoubleClick += new System.EventHandler(lbl_DoubleClick);
                        this.panel1.Controls.Add(labRoom);                    #endregion                    Location_X += roomWid + roomjl;
                        roomCount++;
                    }
                    Locttion_y += roomHei + roomjl;
                }
            }
            //鼠标单击时间
            private void lbl_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                Label b = (Label)sender;
                lblel = b;
                this.txtnum.Text = b.Text.Substring(0, 4);
            }
      

  4.   

    参考代码:panel1.AutoScroll = true;for(int row=0;row<20;row++)
    {
       for(int col=0;col<10;col++)
       {
          Button btn = new Button();
          btn.Size = new Size(75, 20);
          btn.Location = new Point(col*(btn.Width+5), row*(btn.Height+5));
          panel1.Controls.Add(btn);
       }
    }