private Control createTextBoxDropDown(Question q) { int innerPanelLength = 0; FlowLayoutPanel pnlInner = new FlowLayoutPanel(); pnlInner.FlowDirection = FlowDirection.LeftToRight; pnlInner.Width = 120; //pnl.BackColor = System.Drawing.Color.Green; Label lbl = this.createLabel(q.GetQuestionLabel()); pnlInner.Controls.Add(lbl); innerPanelLength += lbl.Width + 6; TextBoxDropDown txt = new TextBoxDropDown(); txt.Enabled = false; txt.Name = q.GetQuestionName(); txt.DropDownControl = this.getDropDownControl(q); txt.ButtonDropDown.Text = "..."; txt.ButtonDropDown.Visible = true; txt.Width = 150; txt.Height = 20; txt.TextAlign = HorizontalAlignment.Left; txt.Tag = q; txt.TextChanged += new EventHandler(txt_TextChanged); txt.ButtonDropDownClick += new System.ComponentModel.CancelEventHandler(txt_ButtonDropDownClick); //調整寬度 pnlInner.Width = innerPanelLength + txt.Width + 6; if (!string.IsNullOrEmpty(q.GetWidth())) { if (q.GetWidth().ToUpper() == "FILL") { pnlInner.Width = this.contentPanel.Width - 12; txt.Width = pnlInner.Width - innerPanelLength - 12; } else { int width = 0; bool isnum = int.TryParse(q.GetWidth(), out width); if (isnum) { txt.Width = width; pnlInner.Width = innerPanelLength + txt.Width + 6; } } } //txt.Text = q.GetQuestionName(); pnlInner.Controls.Add(txt); this.allQControls.Add(txt.Name, txt); //pnlInner.Width = innerPanelLength + txt.Width + 6; pnlInner.Height = txt.Height + 6; //adjust height int periodCount = 4; this.contentPanel.Height = 6 + 20 * ((this.questionGroup.GetQuestions().Count % periodCount == 0) ? (this.questionGroup.GetQuestions().Count / periodCount + 1) : (this.questionGroup.GetListItems().Count / periodCount + 2)); this.pnlQGroup.Height = this.contentPanel.Height + 6; return pnlInner; }
private Control createGrid(Question q) { FlowLayoutPanel pnl = new FlowLayoutPanel(); pnl.FlowDirection = FlowDirection.LeftToRight; pnl.Width = this.contentPanel.Width - 6; pnl.WrapContents = true; DataGridViewX dg = new DataGridViewX(); dg.Enabled = false; dg.Tag = q; dg.ColumnCount = q.GetColumns().Count; dg.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; // Set the column header style. DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle(); columnHeaderStyle.BackColor = Color.Aqua; dg.BackgroundColor = Color.White; columnHeaderStyle.Font = new Font("微軟粗黑體", 9, FontStyle.Regular); dg.ColumnHeadersDefaultCellStyle = columnHeaderStyle; for (int i = 0; i < q.GetColumns().Count; i++) { GridColumn gc = q.GetColumns()[i]; dg.Columns[i].Name = gc.GetName(); if (!string.IsNullOrEmpty(gc.GetWidth())) dg.Columns[i].Width = int.Parse(gc.GetWidth()); } dg.Width = pnl.Width - 10; dg.Height = 120; FillGridDefaultRecord(dg); dg.CellEndEdit += new DataGridViewCellEventHandler(dg_CellEndEdit); pnl.Height = dg.Height + 6; this.allQControls.Add(q.GetQuestionName(), dg); pnl.Controls.Add(dg); this.contentPanel.Height = pnl.Height + 6; this.pnlQGroup.Height = this.contentPanel.Height + 6; return pnl; }
private Control createTextArea(Question q) { int innerPanelLength = 0; FlowLayoutPanel pnlInner = new FlowLayoutPanel(); pnlInner.FlowDirection = FlowDirection.LeftToRight; pnlInner.Width = 120; //pnl.BackColor = System.Drawing.Color.Green; Label lbl = this.createLabel(q.GetQuestionLabel()); pnlInner.Controls.Add(lbl); innerPanelLength += lbl.Width + 6; if (string.IsNullOrEmpty(q.GetQuestionLabel())) lbl.Height = 0; TextBox txt = new TextBox(); txt.Enabled = false; txt.Name = q.GetQuestionName(); txt.Multiline = true; txt.Width = pnlInner.Width - 6; txt.Height = q.GetRows() * 20; txt.TextAlign = HorizontalAlignment.Left; txt.ScrollBars = ScrollBars.Vertical; txt.Tag = q; txt.TextChanged += new EventHandler(txt_TextChanged); //調整寬度 , the default width of textarea is FILL pnlInner.Width = this.contentPanel.Width - 6; txt.Width = pnlInner.Width - 6; if (!string.IsNullOrEmpty(q.GetWidth())) { if (q.GetWidth().ToUpper() != "FILL") { int width = 0; bool isnum = int.TryParse(q.GetWidth(), out width); if (isnum) txt.Width = width; } } //txt.Text = q.GetQuestionName(); pnlInner.Controls.Add(txt); this.allQControls.Add(txt.Name, txt); //pnlInner.Width = this.contentPanel.Width - 6; pnlInner.Height = txt.Height + lbl.Height + 10; //adjust height this.contentPanel.Height = pnlInner.Height + 6; this.pnlQGroup.Height = this.contentPanel.Height + 6; return pnlInner; }
private Control createComboBox(Question q) { FlowLayoutPanel pnlInner = new FlowLayoutPanel(); pnlInner.FlowDirection = FlowDirection.LeftToRight; int innerPanelLength = 0; //如果 Question 有 Label ,則要在前面加上 Label if (q.HasLabel) { Label lbl = this.createLabel(q.GetQuestionLabel()); pnlInner.Controls.Add(lbl); innerPanelLength += lbl.Width + 6; } //create combobox ComboBoxEx cbo = new ComboBoxEx(); cbo.Enabled = false; cbo.Name = q.GetQuestionName(); cbo.DropDownStyle = ComboBoxStyle.DropDown; cbo.Tag = q; cbo.TextChanged += new EventHandler(txt_TextChanged); ; Graphics g = cbo.CreateGraphics(); SizeF maxSize = new SizeF(); Font f = this.pnlQGroup.Font; foreach (QuestionListItem item in this.questionGroup.GetListItems()) { int index = cbo.Items.Add(item.GetLabel()); if (item.Selected) cbo.SelectedText = item.GetLabel(); SizeF theSize = g.MeasureString(item.GetLabel(), f); if (theSize.Width > maxSize.Width) maxSize = theSize; } cbo.Width = (int)maxSize.Width + 25; pnlInner.Controls.Add(cbo); this.allQControls.Add(cbo.Name, cbo); pnlInner.Width = innerPanelLength + cbo.Width + 6; pnlInner.Height = cbo.Height + 6; //adjust height int periodCount = 4; this.contentPanel.Height = 6 + 20 * ((this.questionGroup.GetQuestions().Count % periodCount == 0) ? (this.questionGroup.GetQuestions().Count / periodCount + 1) : (this.questionGroup.GetQuestions().Count / periodCount + 2)); this.pnlQGroup.Height = this.contentPanel.Height + 6; return pnlInner; }