Example #1
0
        public static void SetFormHeight(FlowLayoutPanel pnlFlow, FlowLayoutPanel pnlFlowTop)
        {
            int pnlFlowControlsHeight    = 0;
            int pnlFlowTopControlsHeight = 0;

            foreach (Control item in pnlFlowTop.Controls)
            {
                pnlFlowTopControlsHeight += item.Height + pnlFlowTop.Padding.Vertical;
            }

            pnlFlowTop.Height = pnlFlowTopControlsHeight;

            foreach (Control item in pnlFlow.Controls)
            {
                pnlFlowControlsHeight += item.Height + pnlFlow.Padding.Vertical;
            }
            int totalHeight = pnlFlowControlsHeight + pnlFlowTopControlsHeight;
            int maxHeight   = 500;

            Form frm = pnlFlow.FindForm();

            int columns = totalHeight / maxHeight + 1;

            if (columns < 2)
            {
                frm.Height = totalHeight + pnlFlowTop.Controls.Count + pnlFlow.Controls.Count + 100;
            }
            else
            {
                frm.Height = maxHeight + 100;
                frm.Width  = (frm.Width - pnlFlow.Padding.Horizontal) * columns;
            }
        }
        private void AddTextField(FlowLayoutPanel flp, TableField field, bool bSearch = false)
        {
            var lable   = flp.Controls.Find("lb_" + field.Name, true).FirstOrDefault();
            var textBox = flp.Controls.Find(field.Name, true).FirstOrDefault();

            if (textBox == null)
            {
                TableLayoutPanel tlp = GetTableLayout();
                Label            lb  = new Label()
                {
                    Text        = field.Name,
                    Name        = "lb_" + field.Name,
                    AutoSize    = true,
                    MaximumSize = new Size(120, 0),
                    Anchor      = AnchorStyles.Right,
                    Margin      = new Padding(0, 3, 0, 3)
                };
                Control valueBox;
                if (field.Type == "smalldatetime" || field.Type == "date")
                {
                    valueBox = new DateTimePicker()
                    {
                        Name         = field.Name,
                        Anchor       = AnchorStyles.Left,
                        Margin       = new Padding(0, 3, 0, 3),
                        Format       = DateTimePickerFormat.Custom,
                        CustomFormat = "yyyy-MM-dd",
                        Width        = 84
                    };
                }
                else
                {
                    valueBox = new TextBox()
                    {
                        Name   = field.Name,
                        Anchor = AnchorStyles.Left,
                        Margin = new Padding(0, 3, 0, 3),
                    };
                    #region  拉列表查询
                    TextBox tb = valueBox as TextBox;
                    tb.GotFocus += (sender, e) =>
                    {
                        ListBox lbx = flp.FindForm().Controls.Find("searchItemList", true).FirstOrDefault() as ListBox;
                        if (lbx == null)
                        {
                            lbx = new ListBox();
                            lbx.SuspendLayout();
                            lbx.Visible            = false;
                            lbx.BackColor          = Color.AliceBlue;
                            lbx.Name               = "searchItemList";
                            lbx.Parent             = flp.FindForm();
                            lbx.SelectionMode      = SelectionMode.One;
                            lbx.DataSourceChanged += (obj, ee) =>
                            {
                                lbx.BringToFront();
                            };
                            lbx.DisplayMemberChanged += (obj, ee) =>
                            {
                                lbx.Height = (lbx.Items.Count + 1) * lbx.Font.Height;
                            };
                            lbx.ResumeLayout();
                            lbx.PerformLayout();
                        }
                        lbx.MouseClick += (obj, ee) =>
                        {
                            TextBox box = (lbx.Tag as TextBox);
                            box.Text = lbx.Text;
                            lbx.Dispose();
                            lbx = null;
                            DoSearch();
                        };
                        lbx.SuspendLayout();

                        DataTable gridTable = (DataTable)dataGridView1.DataSource;
                        var       dtTemp    = gridTable.DefaultView.ToTable();
                        dtTemp.DefaultView.RowFilter = valueBox.Name + " like '%" + valueBox.Text + "%'";
                        lbx.DataSource = dtTemp.DefaultView.ToTable(false, new string[] { valueBox.Name });
                        //lv .ValueMember = "ID";
                        lbx.DisplayMember = valueBox.Name;
                        lbx.Tag           = tb;
                        var postion = flp.FindForm().PointToClient(tb.Parent.PointToScreen(tb.Location));
                        lbx.Location = new Point(postion.X, postion.Y + tb.Height);
                        lbx.TopIndex = 0;
                        lbx.ResumeLayout();
                        lbx.PerformLayout();
                        if (!lbx.Visible)
                        {
                            lbx.Show();
                        }
                    };
                    tb.LostFocus += (sender, e) =>
                    {
                        ListBox lv = flp.FindForm().Controls.Find("searchItemList", true).FirstOrDefault() as ListBox;
                        if (lv != null && !lv.Focused)
                        {
                            lv.Dispose();
                            lv = null;
                        }
                    };
                    #endregion

                    #region 非法字符校验
                    valueBox.Validating += (sender, e) =>
                    {
                        if (field.Type == "int" || field.Type == "float")
                        {
                            const string pattern = @"^[0-9]*$";
                            string       content = valueBox.Text;

                            if (!(Regex.IsMatch(content, pattern)))
                            {
                                SystemSounds.Beep.Play();
                                MessageBox.Show("只能输入数字!");
                                e.Cancel = true;
                            }
                        }
                        //else
                        //{
                        //    const string IllegalChars = "\"',.,。”‘;;\\、!!@#¥%……&*()(?)/|<>-_+=";
                        //    string content = valueBox.Text;
                        //    if (IllegalChars.Any(c => content.Contains(c)))
                        //    {
                        //        SystemSounds.Beep.Play();
                        //        MessageBox.Show("您输入的内容含有非法字符,如:\r\n" + IllegalChars);
                        //        e.Cancel = true;
                        //    }
                        //}
                    };
                    #endregion

                    #region 关键字查询
                    if (bSearch)
                    {
                        valueBox.TextChanged += (sender, e) =>
                        {
                            TextBox   box       = sender as TextBox;
                            DataTable gridTable = (DataTable)dataGridView1.DataSource;
                            var       dtTemp    = gridTable.DefaultView.ToTable();
                            dtTemp.DefaultView.RowFilter = box.Name + " like '%" + box.Text + "%'";

                            var lbx = flp.FindForm().Controls.Find("searchItemList", true).FirstOrDefault();
                            if (lbx != null)
                            {
                                ListBox listBox = lbx as ListBox;
                                listBox.DataSource    = dtTemp.DefaultView.ToTable(false, new string[] { box.Name });
                                listBox.DisplayMember = box.Name;
                            }
                            DoSearch();
                        };
                    }
                    #endregion

                    valueBox.KeyPress += (sender, e) =>
                    {
                        if (System.Convert.ToInt32(e.KeyChar) == 13)
                        {
                            System.Windows.Forms.SendKeys.Send("{tab}");
                            e.Handled = true;
                        }
                    };
                }

                tlp.Controls.Add(lb, 0, 0);
                tlp.Controls.Add(valueBox, 1, 0);
                flp.Controls.Add(tlp);
            }
            else if (!bSearch)
            {
                textBox.Text = field.Value;
                if (field.NoNull)
                {
                    lable.ForeColor = Color.Red;
                }
                else
                {
                    lable.ForeColor = Color.Black;
                }
            }
        }