Hi Teddy, I had been out of the loop for several years when I started programming with Bill Dennis's Blind Geeks. The VS interface was like very easy to use. It helped me a lot especially when it came to intellesense and form layout. How would you like to go back to "Edlin" and a paper manual? Sorry if you don't like exactly what it does, but I will not agree that it is useless. . Regards, James jimpanes@xxxxxxxxx jimpanes@xxxxxxxxxxxx "Everything is easy when you know how." ----- Original Message ----- From: "Octavian Rasnita" <orasnita@xxxxxxxxx> To: <programmingblind@xxxxxxxxxxxxx> Sent: Friday, October 10, 2008 4:55 PM Subject: Re: Example of nested layout panels and dynamic form creation with .NET Aha, so I am not wrong when I say that actually, VS.net is pretty useless for the blind? Again, if we don't consider Intelisense, of course. Octavian ----- Original Message ----- From: "Jamal Mazrui" <empower@xxxxxxxxx> To: <programmingblind@xxxxxxxxxxxxx> Sent: Friday, October 10, 2008 11:26 PM Subject: Example of nested layout panels and dynamic form creation with .NET > /* > Example of nested layout panels and dynamic form creation > Public domain by Jamal Mazrui > October 10, 2008 > > Here is an example of using nested layout panels of the .NET Framework. > Note that no pixel coordinates are used for positioning and sizing > controls. The form, TableLayoutPanel, FlowLayoutPanels, and Buttons are > all laid out automatically according to defaults and need. > > I wrote and compiled this C# code with EdSharp and the command-line > compiler. Although Visual Studio certainly has its benefits, I think > significantly more time, effort, and code would probably be involved to do > the same thing with the form designer, code generator, and multiple files > of a Visual Studio project. > > Below is the source code of LayoutPanels.cs, which is also included with > the compiled version, LayoutPanels.exe in the archive available at > http://EmpowermentZone.com/LayoutPanels.zip > > When the executable is run, it calls a function called MultiInput that I > have found useful in various contexts. It presents a dialog with a number > of edit boxes determined at runtime. Parameters to the function provide > the dialog title as a string, and the labels and default values of each > field in arrays. The function returns an array with values as edited by > the user, or an empty array if the dialog is canceled. The program shows > those return values in a message box. > */ > > using System; > using System.Collections.Generic; > using System.Windows.Forms; > > class Program { > static void Main() { > string sTitle = "Example of Layout Panels"; > string[] aLabels = {"Label1", "Label2", "Label3"}; > string[] aValues = {"Value1", "Value2", "Value3"}; > > string[] aResults = MultiInput(sTitle, aLabels, aValues); > if (aResults.Length == 0) return; > > MessageBox.Show(String.Join("\n", aResults), "Results"); > Console.Write(String.Join("\n", aResults)); > } // Main method > > public static string[] MultiInput(string sTitle, string[] aLabels, > string[] aValues) { > > /* > Define a dialog form containing a vertical FlowLayoutPanel, which in turn, > contains a TableLayoutPanel and a horizontal FlowLayoutPanel below it > After initializing each control, suspend automatic layout until all its > properties, and those of its child controls, have been set > The OK button captures the values entered or modified, which the function > returns in an array > */ > > // Define the dialog form > Form frm = new Form(); > frm.SuspendLayout(); > frm.AutoSize = true; > frm.AutoSizeMode = AutoSizeMode.GrowAndShrink; > frm.AutoScroll = true; > > // Define the main , vertical FlowLayoutPanel > FlowLayoutPanel flpMain = new FlowLayoutPanel(); > flpMain.SuspendLayout(); > flpMain.AutoSize = true; > flpMain.AutoSizeMode = AutoSizeMode.GrowAndShrink; > flpMain.FlowDirection = FlowDirection.TopDown; > > /* > Define a TableLayoutPanel with two colums, the left containing field > labels and the right containing field values > The number of rows is the number of items in the array of field labels > passed to the function. > There will be one row for each field. > determined by the size*/ > > TableLayoutPanel tlpFields = new TableLayoutPanel(); > tlpFields.SuspendLayout(); > tlpFields.Anchor = AnchorStyles.None; > tlpFields.AutoSize = true; > tlpFields.AutoSizeMode = AutoSizeMode.GrowAndShrink; > tlpFields.ColumnCount = 2; > > // Add a column style for each column > for (int i = 0; i < tlpFields.ColumnCount; i++) { > tlpFields.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); > } > > // Add a row and row style for each field > tlpFields.RowCount = aLabels.Length; > for (int i = 0; i < tlpFields.RowCount; i++) { > Label lbl = new Label(); > lbl.AutoSize = true; > lbl.Text = aLabels[i] + ":"; > TextBox txt = new TextBox(); > txt.Text = aValues[i]; > tlpFields.Controls.AddRange(new Control[] {lbl, txt}); > tlpFields.RowStyles.Add(new RowStyle(SizeType.AutoSize)); > } > tlpFields.ResumeLayout(); > > // Below the TableLayoutPanel of fields, add a horizontal FlowLayoutPanel > containing buttons > FlowLayoutPanel flpButtons = new FlowLayoutPanel(); > flpButtons.SuspendLayout(); > flpButtons.Anchor = AnchorStyles.None; > flpButtons.AutoSize = true; > flpButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink; > flpButtons.FlowDirection = FlowDirection.LeftToRight; > > // Define the OK button > Button btnOK = new Button(); > btnOK.Text = "OK"; > > // Define its event handler > List<string> listResults = new List<string>(); > btnOK.Click += delegate(object o, EventArgs e) { > foreach (Control ctl in tlpFields.Controls) { > if (ctl.GetType() == typeof(TextBox)) listResults.Add(ctl.Text); > } > frm.Close(); > }; > > // Define the Cancel button > Button btnCancel = new Button(); > btnCancel.Text = "Cancel"; > btnCancel.Click += delegate(object o, EventArgs e) {frm.Close();}; > > flpButtons.Controls.AddRange(new Control[] {btnOK, btnCancel}); > flpButtons.ResumeLayout(); > > flpMain.Controls.AddRange(new Control[] {tlpFields, flpButtons}); > flpMain.ResumeLayout(); > > // Set remaining properties of the form > frm.AcceptButton = btnOK; > frm.CancelButton = btnCancel; > frm.StartPosition = FormStartPosition.CenterParent; > frm.Text = sTitle; > frm.Controls.Add(flpMain); > frm.ResumeLayout(); > frm.ShowDialog(); > frm.Dispose(); > > return listResults.ToArray(); > } // MultiInput method > > } // Program class > > __________ > View the list's information and change your settings at > //www.freelists.org/list/programmingblind > __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind __________ View the list's information and change your settings at //www.freelists.org/list/programmingblind