•
•
•
•
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
![]() |
•
•
Join Date: Jun 2005
Posts: 69
Reputation:
Rep Power: 4
Solved Threads: 0
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.
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.
•
•
Join Date: Dec 2003
Posts: 55
Reputation:
Rep Power: 5
Solved Threads: 6
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
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
•
•
•
•
•
•
•
•
DaniWeb C# Marketplace
Similar Threads
- Create control at runtime (ASP.NET)
- create aspx page in runtime (C#)
- How to create a database during the runtime in VB6?! (Visual Basic 4 / 5 / 6)
- Buttons created dynamically VS. events (Python)
- rubber banding and tracking linked image boxes linked by rubber bands (VB.NET)
- Java GUI--Dynamically Adding Buttons to a Menu (Java)
- how to create new table in MS Access2003 using VB6 (Community Introductions)
Other Threads in the C# Forum
- Previous Thread: Help with timer..
- Next Thread: Text printing is giving me trouble


Linear Mode