/// <summary>Returns the required height.</summary> private int ArrangeControls(Graphics g){ //calculate width of input section int inputW=300;//the widest allowed for the input section on the right. if(IsQuestionnaire){ inputW=450; } if(panelSlide.Width<600){ inputW=panelSlide.Width/2; } int promptW=panelSlide.Width-inputW; panelSlide.Controls.Clear(); int yPos=5; int itemH=0;//item height labels=new Label[multInputItems.Count]; inputs=new Control[multInputItems.Count]; for(int i=0;i<multInputItems.Count;i++){ //Calculate height itemH=(int)g.MeasureString(((MultInputItem)multInputItems[i]).PromptingText,Font,promptW).Height; if(itemH<20) itemH=20; //promptingText labels[i]=new Label(); labels[i].Location=new Point(2,yPos); //labels[i].Name="Label"+i.ToString(); labels[i].Size=new Size(promptW-5,itemH); labels[i].Text=multInputItems[i].PromptingText; labels[i].TextAlign=ContentAlignment.MiddleRight; //labels[i].BorderStyle=BorderStyle.FixedSingle;//just used in debugging layout panelSlide.Controls.Add(labels[i]); if(multInputItems[i].ValueType==FieldValueType.Boolean){ //add a checkbox inputs[i]=new CheckBox(); inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); inputs[i].Size=new Size(inputW-5,20); if(multInputItems[i].CurrentValues.Count==0) ((CheckBox)inputs[i]).Checked=false; else ((CheckBox)inputs[i]).Checked=true; ((CheckBox)inputs[i]).FlatStyle=FlatStyle.System; panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.Date){ //add a validDate box inputs[i]=new ValidDate(); inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); if(inputW<100){//not enough room for a fullsize box inputs[i].Size=new Size(inputW-20,20); } else{ inputs[i].Size=new Size(75,20); } ; if(multInputItems[i].CurrentValues.Count>0){ DateTime myDate=(DateTime)multInputItems[i].CurrentValues[0]; inputs[i].Text=myDate.ToShortDateString(); } panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.Def){ //add a psuedo combobox filled with visible defs for one category inputs[i]=new ComboBoxMulti(); for(int j=0;j<DefC.Short[(int)multInputItems[i].DefCategory].Length;j++){ ((ComboBoxMulti)inputs[i]).Items.Add(DefC.Short[(int)multInputItems[i].DefCategory][j].ItemName); if(multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues .Contains(DefC.Short[(int)multInputItems[i].DefCategory][j].DefNum)) { ((ComboBoxMulti)inputs[i]).SetSelected(j,true); } } inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); inputs[i].Size=new Size(inputW-5,20); panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.Enum){ //add a psuedo combobox filled with values for one enumeration inputs[i]=new ComboBoxMulti(); Type eType=Type.GetType("OpenDental."+multInputItems[i].EnumerationType.ToString()); for(int j=0;j<Enum.GetNames(eType).Length;j++){ ((ComboBoxMulti)inputs[i]).Items.Add(Enum.GetNames(eType)[j]); if(multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues.Contains((int)(Enum.Parse(eType,Enum.GetNames(eType)[j]))) ) { ((ComboBoxMulti)inputs[i]).SetSelected(j,true); } } inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); inputs[i].Size=new Size(inputW-5,20); panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.ForeignKey){ //add a psuedo combobox filled with values from one table inputs[i]=new ComboBoxMulti(); //these two arrays are matched item for item string[] foreignRows=GetFRows(multInputItems[i].FKType); long[] foreignKeys=GetFKeys(multInputItems[i].FKType); for(int j=0;j<foreignRows.Length;j++){ ((ComboBoxMulti)inputs[i]).Items.Add(foreignRows[j]); if(multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues.Contains(foreignKeys[j]) ) { ((ComboBoxMulti)inputs[i]).SetSelected(j,true); } } inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); inputs[i].Size=new Size(inputW-5,20); panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.Integer){ //add a validNumber box inputs[i]=new ValidNumber(); inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); if(inputW<100){//not enough room for a fullsize box inputs[i].Size=new Size(inputW-20,20); } else{ inputs[i].Size=new Size(75,20); } if(multInputItems[i].CurrentValues.Count>0){ inputs[i].Text=((int)multInputItems[i].CurrentValues[0]).ToString(); } panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.Number){ //add a validDouble box inputs[i]=new ValidDouble(); inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); if(inputW<100){//not enough room for a fullsize box inputs[i].Size=new Size(inputW-20,20); } else{ inputs[i].Size=new Size(75,20); } if(multInputItems[i].CurrentValues.Count>0){ inputs[i].Text=((double)multInputItems[i].CurrentValues[0]).ToString("n"); } panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.String){ //add a textbox inputs[i]=new TextBox(); inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); //inputs[i].Name= inputs[i].Size=new Size(inputW-5,20); if(multInputItems[i].CurrentValues.Count>0){ inputs[i].Text=multInputItems[i].CurrentValues[0].ToString(); } panelSlide.Controls.Add(inputs[i]); } else if(multInputItems[i].ValueType==FieldValueType.YesNoUnknown) { //add two checkboxes: Yes(1) and No(2). inputs[i]=new ContrYN(); if(multInputItems[i].CurrentValues.Count>0){ ((ContrYN)inputs[i]).CurrentValue=(YN)multInputItems[i].CurrentValues[0]; } inputs[i].Location=new Point(promptW,yPos+(itemH-20)/2); inputs[i].Size=new Size(inputW-5,20); panelSlide.Controls.Add(inputs[i]); } yPos+=itemH+5; if(yPos>panelMain.Height && !vScrollBar2.Visible) return yPos;//There's not enough room, so stop and make the scrollbar visible. } panelSlide.Height=yPos; vScrollBar2.Maximum=panelSlide.Height; vScrollBar2.Minimum=0; vScrollBar2.LargeChange=panelMain.Height; vScrollBar2.SmallChange=5; return -1; }
/// <summary>Returns the required height.</summary> private int ArrangeControls(Graphics g) { //calculate width of input section int inputW = 300; //the widest allowed for the input section on the right. if (IsQuestionnaire) { inputW = 450; } if (panelSlide.Width < 600) { inputW = panelSlide.Width / 2; } int promptW = panelSlide.Width - inputW; panelSlide.Controls.Clear(); int yPos = 5; int itemH = 0; //item height labels = new Label[multInputItems.Count]; inputs = new Control[multInputItems.Count]; for (int i = 0; i < multInputItems.Count; i++) { //Calculate height itemH = (int)g.MeasureString(((MultInputItem)multInputItems[i]).PromptingText, Font, promptW).Height; if (itemH < 20) { itemH = 20; } //promptingText labels[i] = new Label(); labels[i].Location = new Point(2, yPos); //labels[i].Name="Label"+i.ToString(); labels[i].Size = new Size(promptW - 5, itemH); labels[i].Text = multInputItems[i].PromptingText; labels[i].TextAlign = ContentAlignment.MiddleRight; //labels[i].BorderStyle=BorderStyle.FixedSingle;//just used in debugging layout panelSlide.Controls.Add(labels[i]); if (multInputItems[i].ValueType == FieldValueType.Boolean) { //add a checkbox inputs[i] = new CheckBox(); inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); inputs[i].Size = new Size(inputW - 5, 20); if (multInputItems[i].CurrentValues.Count == 0) { ((CheckBox)inputs[i]).Checked = false; } else { ((CheckBox)inputs[i]).Checked = true; } ((CheckBox)inputs[i]).FlatStyle = FlatStyle.System; panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.Date) { //add a validDate box inputs[i] = new ValidDate(); inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); if (inputW < 100) //not enough room for a fullsize box { inputs[i].Size = new Size(inputW - 20, 20); } else { inputs[i].Size = new Size(75, 20); } ; if (multInputItems[i].CurrentValues.Count > 0) { DateTime myDate = (DateTime)multInputItems[i].CurrentValues[0]; inputs[i].Text = myDate.ToShortDateString(); } panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.Def) { //add a psuedo combobox filled with visible defs for one category inputs[i] = new ComboBoxMulti(); List <Def> listDefs = Defs.GetDefsForCategory(multInputItems[i].DefCategory, true); for (int j = 0; j < listDefs.Count; j++) { ((ComboBoxMulti)inputs[i]).Items.Add(listDefs[j].ItemName); if (multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues .Contains(listDefs[j].DefNum)) { ((ComboBoxMulti)inputs[i]).SetSelected(j, true); } } inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); inputs[i].Size = new Size(inputW - 5, 20); panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.Enum) { //add a psuedo combobox filled with values for one enumeration inputs[i] = new ComboBoxMulti(); Type eType = Type.GetType("OpenDental." + multInputItems[i].EnumerationType.ToString()); for (int j = 0; j < Enum.GetNames(eType).Length; j++) { ((ComboBoxMulti)inputs[i]).Items.Add(Enum.GetNames(eType)[j]); if (multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues.Contains((int)(Enum.Parse(eType, Enum.GetNames(eType)[j])))) { ((ComboBoxMulti)inputs[i]).SetSelected(j, true); } } inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); inputs[i].Size = new Size(inputW - 5, 20); panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.ForeignKey) { //add a psuedo combobox filled with values from one table inputs[i] = new ComboBoxMulti(); //these two arrays are matched item for item string[] foreignRows = GetFRows(multInputItems[i].FKType); long[] foreignKeys = GetFKeys(multInputItems[i].FKType); for (int j = 0; j < foreignRows.Length; j++) { ((ComboBoxMulti)inputs[i]).Items.Add(foreignRows[j]); if (multInputItems[i].CurrentValues.Count > 0 && multInputItems[i].CurrentValues.Contains(foreignKeys[j])) { ((ComboBoxMulti)inputs[i]).SetSelected(j, true); } } inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); inputs[i].Size = new Size(inputW - 5, 20); panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.Integer) { //add a validNumber box inputs[i] = new ValidNumber(); inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); if (inputW < 100) //not enough room for a fullsize box { inputs[i].Size = new Size(inputW - 20, 20); } else { inputs[i].Size = new Size(75, 20); } if (multInputItems[i].CurrentValues.Count > 0) { inputs[i].Text = ((int)multInputItems[i].CurrentValues[0]).ToString(); } panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.Number) { //add a validDouble box inputs[i] = new ValidDouble(); inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); if (inputW < 100) //not enough room for a fullsize box { inputs[i].Size = new Size(inputW - 20, 20); } else { inputs[i].Size = new Size(75, 20); } if (multInputItems[i].CurrentValues.Count > 0) { inputs[i].Text = ((double)multInputItems[i].CurrentValues[0]).ToString("n"); } panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.String) { //add a textbox inputs[i] = new TextBox(); inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); //inputs[i].Name= inputs[i].Size = new Size(inputW - 5, 20); if (multInputItems[i].CurrentValues.Count > 0) { inputs[i].Text = multInputItems[i].CurrentValues[0].ToString(); } panelSlide.Controls.Add(inputs[i]); } else if (multInputItems[i].ValueType == FieldValueType.YesNoUnknown) { //add two checkboxes: Yes(1) and No(2). inputs[i] = new ContrYN(); if (multInputItems[i].CurrentValues.Count > 0) { ((ContrYN)inputs[i]).CurrentValue = (YN)multInputItems[i].CurrentValues[0]; } inputs[i].Location = new Point(promptW, yPos + (itemH - 20) / 2); inputs[i].Size = new Size(inputW - 5, 20); panelSlide.Controls.Add(inputs[i]); } yPos += itemH + 5; if (yPos > panelMain.Height && !vScrollBar2.Visible) { return(yPos); //There's not enough room, so stop and make the scrollbar visible. } } panelSlide.Height = yPos; vScrollBar2.Maximum = panelSlide.Height; vScrollBar2.Minimum = 0; vScrollBar2.LargeChange = panelMain.Height; vScrollBar2.SmallChange = 5; return(-1); }