User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C# section within the Software Development category of DaniWeb, a massive community of 370,597 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 2,031 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C# advertiser:
Views: 12287 | Replies: 1
Reply
Join Date: Jun 2005
Posts: 69
Reputation: DotNetUser is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
DotNetUser DotNetUser is offline Offline
Junior Poster in Training

Help Create buttons at runtime

  #1  
Sep 26th, 2005
I want to allow the user to tell me how many rows and columns of buttons to draw. Then draw the buttons. When a button is clicked, it displays the row # and column # of that button in a msgbox.

I would create a button using the following code:
Button myText = new Button();
myText.Location = new Point(25,35);
myText.Text = "First";
this.Controls.Add (myText);

First of all, how would I create a click event if the button name isn't available until runtime? If a button is created in the design view, to get the click event one would double-click on the button.

Would I need a 2d array to store the column/row numbers to retrieve. But how would I know which button is clicked to retrieve the info?

Thanks.
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Dec 2003
Posts: 55
Reputation: r0ckbaer is an unknown quantity at this point 
Rep Power: 5
Solved Threads: 6
r0ckbaer r0ckbaer is offline Offline
Junior Poster in Training

Re: Create buttons at runtime

  #2  
Sep 27th, 2005
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text.RegularExpressions;

namespace WindowsApplication1
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.TextBox textBox1;
		private System.Windows.Forms.TextBox textBox2;
		private System.Windows.Forms.Button button1;
		/// <summary>
		/// Required designer variable.
		/// </summary>
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			this.textBox1 = new System.Windows.Forms.TextBox();
			this.textBox2 = new System.Windows.Forms.TextBox();
			this.button1 = new System.Windows.Forms.Button();
			this.SuspendLayout();
			// 
			// textBox1
			// 
			this.textBox1.Location = new System.Drawing.Point(16, 16);
			this.textBox1.Name = "textBox1";
			this.textBox1.Size = new System.Drawing.Size(48, 20);
			this.textBox1.TabIndex = 0;
			this.textBox1.Text = "textBox1";
			// 
			// textBox2
			// 
			this.textBox2.Location = new System.Drawing.Point(72, 16);
			this.textBox2.Name = "textBox2";
			this.textBox2.Size = new System.Drawing.Size(56, 20);
			this.textBox2.TabIndex = 1;
			this.textBox2.Text = "textBox2";
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(152, 16);
			this.button1.Name = "button1";
			this.button1.TabIndex = 2;
			this.button1.Text = "button1";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(240, 46);
			this.Controls.Add(this.button1);
			this.Controls.Add(this.textBox2);
			this.Controls.Add(this.textBox1);
			this.Name = "Form1";
			this.Text = "Form1";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		private void button1_Click(object sender, System.EventArgs e)
		{
			// This is the generate button routine
			int count = 0;
			System.Collections.ArrayList al = new ArrayList();
			foreach (Control c in this.Controls)
			{
				if (c.GetType() == typeof(Button) && c.Name != "button1")
				{
					al.Add(c);
				}
			}

			for (int i = 0; i < al.Count; i++)
				this.Controls.Remove((Control)al[i]);

			// Resize to start size
			this.Size = new Size(248, 80);

			// First one is columns
			int columns = Convert.ToInt32(textBox1.Text);
			int rows = Convert.ToInt32(textBox2.Text);
			int locX = 16, locY = 56;
			// We assume space between is 20
			for (int i = 0; i < columns * rows; i++)
			{
				Button b = new Button();
				b.Name = "b" + i.ToString();
				b.Size = new Size(10, 10);
				b.Location = new Point(locX, locY);
				if (((i + 1) % columns) == 0)
				{
					locX = 16;
					locY += b.Size.Height + 20;
				}
				else
				{
					locX += b.Size.Width + 20;
				}

				this.Controls.Add(b);
				b.Click +=new EventHandler(b_Click);

				if ((b.Location.X + b.Width) > this.ClientSize.Width)
				{
					this.Width += ((b.Location.X + b.Width) - this.ClientSize.Width) + 10;
				}
				if ((b.Location.Y + b.Height) > this.ClientSize.Height)
				{
					this.Height += ((b.Location.Y + b.Height) - this.ClientSize.Height) + 10;
				}
			}
		}

		private void b_Click(object sender, EventArgs e)
		{
			string s =  ((Control)sender).Name;
			s = new Regex("\\d+").Match(s).Value;
			int num = Convert.ToInt32(s);
			int columns = Convert.ToInt32(textBox1.Text);
			int rows = Convert.ToInt32(textBox2.Text);
			s = string.Format("Column: {0}, Row: {1}", (num % columns) + 1, (num / columns) + 1);
			MessageBox.Show(this, s);
		}
	}
}

this is just a quick hack, but it might be what you're searching for...
to compile you can put that code in a file, call it Form1.cs
then compile it on commandline via: csc /target:winexe Form1.cs
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb C# Marketplace
Thread Tools Display Modes

Similar Threads
Other Threads in the C# Forum

All times are GMT -4. The time now is 6:14 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC