private void CreateControls() { using (Graphics gr = this.CreateGraphics()) { // Measure texts int labelwidth = 0; foreach (Param p in FReport.Params) { if (p.UserVisible) { int nwidth = (int)Math.Round(gr.MeasureString(p.Description, this.Font).Width); if (nwidth > labelwidth) { labelwidth = nwidth; } if (labelwidth > MaxLabelWidth) { labelwidth = MaxLabelWidth; } } } bool focused = false; const int TOP_GAP = 3; const int MIDDLE_GAP = 3; const int BOTTOM_GAP = 10; const int BUTTON_WIDTH = 30; const int LEFT_GAP = 3; const int GAP_LABEL = 10; const int BUTTON_GAP = 2; const int RIGHT_GAP = BUTTON_WIDTH + 30 + BUTTON_GAP; int posy = TOP_GAP; int lastheight = 0; foreach (Param p in FReport.Params) { if (p.UserVisible) { ControlInfo cinfo = new ControlInfo(); cinfo.param = p; cinfo.label = new Label(); cinfo.label.AutoSize = false; cinfo.label.Text = p.Description; cinfo.label.Width = labelwidth + LEFT_GAP; cinfo.label.Left = 0; cinfo.label.Top = posy; cinfo.label.Parent = this; switch (p.ParamType) { case ParamType.Bool: cinfo.control = new CheckBox(); ((CheckBox)cinfo.control).Checked = (bool)p.LastValue; break; case ParamType.String: case ParamType.Subst: case ParamType.SubstExpre: case ParamType.ExpreA: case ParamType.ExpreB: cinfo.control = new TextBox(); ((TextBox)cinfo.control).Text = (string)p.LastValue; break; case ParamType.Date: cinfo.control = new DateTimePicker(); ((DateTimePicker)cinfo.control).Value = (DateTime)p.LastValue; ((DateTimePicker)cinfo.control).Format = DateTimePickerFormat.Short; break; case ParamType.Time: cinfo.control = new DateTimePicker(); ((DateTimePicker)cinfo.control).Value = (DateTime)p.LastValue; ((DateTimePicker)cinfo.control).Format = DateTimePickerFormat.Custom; ((DateTimePicker)cinfo.control).ShowUpDown = true; ((DateTimePicker)cinfo.control).CustomFormat = "hh:mm:ss"; break; case ParamType.DateTime: cinfo.control = new DateTimePicker(); ((DateTimePicker)cinfo.control).Value = (DateTime)p.LastValue; ((DateTimePicker)cinfo.control).Format = DateTimePickerFormat.Short; cinfo.control2 = new DateTimePicker(); ((DateTimePicker)cinfo.control2).Value = (DateTime)p.LastValue; ((DateTimePicker)cinfo.control2).Format = DateTimePickerFormat.Custom; ((DateTimePicker)cinfo.control2).ShowUpDown = true; ((DateTimePicker)cinfo.control2).CustomFormat = "hh:mm:ss"; break; case ParamType.Integer: cinfo.control = new NumericUpDown(); ((NumericUpDown)cinfo.control).Minimum = System.Int32.MinValue; ((NumericUpDown)cinfo.control).Maximum = System.Int32.MaxValue; ((NumericUpDown)cinfo.control).Value = (int)p.LastValue; break; case ParamType.Currency: cinfo.control = new NumericUpDown(); ((NumericUpDown)cinfo.control).Minimum = System.Decimal.MinValue; ((NumericUpDown)cinfo.control).Maximum = System.Decimal.MaxValue; ((NumericUpDown)cinfo.control).Value = (decimal)p.LastValue; break; case ParamType.Double: cinfo.control = new TextBox(); ((TextBox)cinfo.control).Text = ((double)p.LastValue).ToString(); break; case ParamType.List: case ParamType.SubsExpreList: cinfo.control = new ComboBox(); ((ComboBox)cinfo.control).DropDownStyle = ComboBoxStyle.DropDownList; foreach (string sitem in p.Items) { ((ComboBox)cinfo.control).Items.Add(sitem); } ((ComboBox)cinfo.control).SelectedIndex = p.Values.IndexOf((string)p.Value); if (((ComboBox)cinfo.control).SelectedIndex == -1) { if (p.Value.IsInteger()) { int idxcombo = p.LastValue; if (p.Value <= ((ComboBox)cinfo.control).Items.Count) { ((ComboBox)cinfo.control).SelectedIndex = idxcombo; } } } break; case ParamType.Multiple: p.UpdateLookupValues(); CheckedListBox checkcontrol = new CheckedListBox(); cinfo.control = checkcontrol; // Add menu to select/deselect all ContextMenu nmenu = new ContextMenu(); MenuItem firstmenu = nmenu.MenuItems.Add(p.Alias); firstmenu.Visible = false; MenuItem mselectall = nmenu.MenuItems.Add(Translator.TranslateStr(1445)); MenuItem mclear = nmenu.MenuItems.Add(Translator.TranslateStr(1446)); this.CheckListBoxes.Add(p.Alias, cinfo.control); // mselectall.Tag = cinfo.control; // mclear.Tag = cinfo.control; mselectall.Click += new EventHandler(contextmenuclickselectall); mclear.Click += new EventHandler(contextmenuclickclear); cinfo.control.ContextMenu = nmenu; foreach (string sitem in p.Items) { ((CheckedListBox)cinfo.control).Items.Add(sitem); } foreach (string sitem in p.Selected) { // int index = System.Convert.ToInt32(sitem); // if (index<((CheckedListBox)cinfo.control).Items.Count) // { // ((CheckedListBox)cinfo.control).SetItemChecked(index,true); // } // Selection by value instead of by index int index = p.Values.IndexOf(sitem); if (index >= 0) { checkcontrol.SetItemChecked(index, true); } } // Adjust Height up to 10 items if (checkcontrol.Items.Count < 10) { checkcontrol.Height = checkcontrol.ItemHeight * (checkcontrol.Items.Count + 1); } else { checkcontrol.Height = checkcontrol.ItemHeight * (11); } break; } cinfo.control.Left = labelwidth + LEFT_GAP + GAP_LABEL; cinfo.control.Enabled = !p.IsReadOnly; if (cinfo.control2 != null) { cinfo.control2.Enabled = !p.IsReadOnly; cinfo.control.Width = ControlWidth / 2; cinfo.control2.Top = posy; cinfo.control2.Parent = this; cinfo.control2.Width = (ControlWidth / 2) - LEFT_GAP; cinfo.control2.Left = labelwidth + LEFT_GAP + GAP_LABEL + (ControlWidth / 2) + LEFT_GAP; } else { cinfo.control.Width = ControlWidth; } cinfo.control.Parent = this; cinfo.control.Top = posy; cinfo.label.Height = cinfo.control.Height; cinfo.label.TextAlign = ContentAlignment.MiddleRight; cinfo.control.Tag = cinfo; cinfo.button = new Button(); cinfo.button.Tag = cinfo; cinfo.button.Click += eventclick; cinfo.button.Text = "..."; cinfo.button.Width = BUTTON_WIDTH; cinfo.button.Height = cinfo.control.Height; cinfo.button.Left = cinfo.control.Left + cinfo.control.Width + BUTTON_GAP; if (cinfo.control2 != null) { cinfo.button.Left = cinfo.button.Left + cinfo.control2.Width + MIDDLE_GAP; } cinfo.button.Top = posy; cinfo.button.Visible = (p.SearchDataset.Length > 0); cinfo.button.Parent = this; if (cinfo.control.Enabled) { if (!focused) { cinfo.control.Focus(); } } cinfo.PosY = posy; lastheight = cinfo.control.Height; posy = posy + cinfo.control.Height + MIDDLE_GAP; ControlList.Add(cinfo); } } this.Width = labelwidth + LEFT_GAP + GAP_LABEL + ControlWidth + LEFT_GAP + RIGHT_GAP; this.Height = posy + lastheight + MIDDLE_GAP + BOTTOM_GAP; } }