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; } } }