473,405 Members | 2,185 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,405 software developers and data experts.

Create C# controls names at runtime

Hi all,

I'm trying to create a system where it reads a number of records from
a database and then creates a row in the GUI that contains a single
field from the database and a button that has a reference to the
record. This way, once the task has been accomplished, the button can
be pressed next to the field and a time-stamp is placed into the
database.

Can anyone point me in the direction of either a tutorial or
documentation that may help me achive this?

Thanks,

Matt

May 2 '07 #1
7 11316
I'm not sure I understand your question, but perhaps this will help:

I suggest you create the button and text statically, in the GUI builder.
Then study the code it generated in form.designer.cs. Copy that code (with
obvious modifications) to your application to dynamically create the
controls as triggered by your application logic.
"Matt" <ma***********************@fujifilmsericol.comwrot e in message
news:11**********************@h2g2000hsg.googlegro ups.com...
Hi all,

I'm trying to create a system where it reads a number of records from
a database and then creates a row in the GUI that contains a single
field from the database and a button that has a reference to the
record. This way, once the task has been accomplished, the button can
be pressed next to the field and a time-stamp is placed into the
database.

Can anyone point me in the direction of either a tutorial or
documentation that may help me achive this?

Thanks,

Matt

May 2 '07 #2
On 2 May, 13:33, "Fred Mellender" <nospamPlease_fr...@frontiernet.net>
wrote:
I'm not sure I understand your question, but perhaps this will help:

I suggest you create the button and text statically, in the GUI builder.
Then study the code it generated in form.designer.cs. Copy that code (with
obvious modifications) to your application to dynamically create the
controls as triggered by your application logic.

"Matt" <matthew.macdonald-wall...@fujifilmsericol.comwrote in message

news:11**********************@h2g2000hsg.googlegro ups.com...
Hi all,
I'm trying to create a system where it reads a number of records from
a database and then creates a row in the GUI that contains a single
field from the database and a button that has a reference to the
record. This way, once the task has been accomplished, the button can
be pressed next to the field and a time-stamp is placed into the
database.
Can anyone point me in the direction of either a tutorial or
documentation that may help me achive this?
Thanks,
Matt
Fred,

Thanks for the reply, I'll try and explain a bit better!

Basically, what I want to end up with is a grid as follows:

ROW1 description of task [button1]
ROW2 description of task [button2]
ROW3 description of task [button3]
....

Ideally, what I'd like to do is name the button after the task id from
the database. I've just discovered that I can rename buttons on the
fly, so I think that the following may work:

Button btn = new Button();
btn.name = dr[0]; // set the button name to the first column in the
data row

the question is, how do I then create the function to fire the data
into the database?

Matt.

May 2 '07 #3
On 2 May, 13:41, Matt <matthew.macdonald-wall...@fujifilmsericol.com>
wrote:
On 2 May, 13:33, "Fred Mellender" <nospamPlease_fr...@frontiernet.net>
wrote:
I'm not sure I understand your question, but perhaps this will help:
I suggest you create the button and text statically, in the GUI builder.
Then study the code it generated in form.designer.cs. Copy that code (with
obvious modifications) to your application to dynamically create the
controls as triggered by your application logic.
"Matt" <matthew.macdonald-wall...@fujifilmsericol.comwrote in message
news:11**********************@h2g2000hsg.googlegro ups.com...
Hi all,
I'm trying to create a system where it reads a number of records from
a database and then creates a row in the GUI that contains a single
field from the database and a button that has a reference to the
record. This way, once the task has been accomplished, the button can
be pressed next to the field and a time-stamp is placed into the
database.
Can anyone point me in the direction of either a tutorial or
documentation that may help me achive this?
Thanks,
Matt

Fred,

Thanks for the reply, I'll try and explain a bit better!

Basically, what I want to end up with is a grid as follows:

ROW1 description of task [button1]
ROW2 description of task [button2]
ROW3 description of task [button3]
...

Ideally, what I'd like to do is name the button after the task id from
the database. I've just discovered that I can rename buttons on the
fly, so I think that the following may work:

Button btn = new Button();
btn.name = dr[0]; // set the button name to the first column in the
data row

the question is, how do I then create the function to fire the data
into the database?

Matt.
OK, I now have the data being red into a datarow which then creates
the row for a tableLayoutPanel to allow me to adjust the rows etc.

The code I currently have for the tableLayoutRow is as follows:

foreach (DataRow dr in dra)
{

// create the label
Label taskDesc = new Label();
taskDesc.Width = 500;
// create the button
Button btn = new Button();
btn.Text = "Complete Task";
btn.Name = "btn"+dr[0].ToString();
MessageBox.Show("Btn name = " + btn.Name);
taskDesc.Text = dr[1].ToString();
tlop.Controls.Add(taskDesc,0,i);
//tlop.Controls.Add(btn+dr[0].ToString(),1,i);
i++;
}

Where tlop is the tableLayoutPanel The issue I am having is when it
comes to adding the button to the panel (the commented out line) I get
an error that I cannot convert an object to a control. The variable
is showing up as btn1, btn2 etc but I can't read it into the tlop!

Help!

Matt

May 2 '07 #4
The Add function does not want the name of the button, but the button
itself, as in:

Controls.Add(btn);

To add the function that handles the click event, first code the function in
the form's class. Suppose its name is "myClick". Then after you create the
button, add the code:

btn.Click += new System.EventHandler(myClick);

again, if you study the code generated by VS, you will see code for your
statically defined controls that you can use as a template.
OK, I now have the data being red into a datarow which then creates
the row for a tableLayoutPanel to allow me to adjust the rows etc.

The code I currently have for the tableLayoutRow is as follows:

foreach (DataRow dr in dra)
{

// create the label
Label taskDesc = new Label();
taskDesc.Width = 500;
// create the button
Button btn = new Button();
btn.Text = "Complete Task";
btn.Name = "btn"+dr[0].ToString();
MessageBox.Show("Btn name = " + btn.Name);
taskDesc.Text = dr[1].ToString();
tlop.Controls.Add(taskDesc,0,i);
//tlop.Controls.Add(btn+dr[0].ToString(),1,i);
i++;
}

Where tlop is the tableLayoutPanel The issue I am having is when it
comes to adding the button to the panel (the commented out line) I get
an error that I cannot convert an object to a control. The variable
is showing up as btn1, btn2 etc but I can't read it into the tlop!

Help!

Matt

May 2 '07 #5
On 2 May, 15:50, "Fred Mellender" <nospamPlease_fr...@frontiernet.net>
wrote:
The Add function does not want the name of the button, but the button
itself, as in:

Controls.Add(btn);

To add the function that handles the click event, first code the function in
the form's class. Suppose its name is "myClick". Then after you create the
button, add the code:

btn.Click += new System.EventHandler(myClick);

again, if you study the code generated by VS, you will see code for your
statically defined controls that you can use as a template.
OK, I now have the data being red into a datarow which then creates
the row for a tableLayoutPanel to allow me to adjust the rows etc.
The code I currently have for the tableLayoutRow is as follows:
foreach (DataRow dr in dra)
{
// create the label
Label taskDesc = new Label();
taskDesc.Width = 500;
// create the button
Button btn = new Button();
btn.Text = "Complete Task";
btn.Name = "btn"+dr[0].ToString();
MessageBox.Show("Btn name = " + btn.Name);
taskDesc.Text = dr[1].ToString();
tlop.Controls.Add(taskDesc,0,i);
//tlop.Controls.Add(btn+dr[0].ToString(),1,i);
i++;
}
Where tlop is the tableLayoutPanel The issue I am having is when it
comes to adding the button to the panel (the commented out line) I get
an error that I cannot convert an object to a control. The variable
is showing up as btn1, btn2 etc but I can't read it into the tlop!
Help!
Matt
Fred, that's great but how do I create the control in the first place
if the parameter for controls.add() changes with every row?

I understand the concepts of creating a button, I just don't know how
to create a button then name it dynamically.

May 2 '07 #6
Hi,
"Matt" <ma***********************@fujifilmsericol.comwrot e in message
news:11**********************@h2g2000hsg.googlegro ups.com...
Hi all,

I'm trying to create a system where it reads a number of records from
a database and then creates a row in the GUI that contains a single
field from the database and a button that has a reference to the
record. This way, once the task has been accomplished, the button can
be pressed next to the field and a time-stamp is placed into the
database.
Would it work for you having a button outside the listview ?
IMHO this is much easy to implement, faster to execute and do not use a lot
of buttons int he interface.

You could use the Tag property of the listviewitem to keep track of the
record in question:

foreach( DataRow row in GetRows.......)
{
ListViewItem lvi = new ...
lvi.Tag = row;
....
}

void TimeStamp_Onclick( ... )
{
DataRow row = (DataRow) listView1.Items[
listView1.SelectedIndices[0]].Tag;
}
May 2 '07 #7
Each button need not have a separate *variable* name used to create it.
I.E. you are creating one *new* button with the
Button btn = new Button();
each time you go through the loop. Just do all the work for that button
(using the "btn" variable) inside the loop. Once you add it via the
Controls.Add statement, one new button is attached to the form. When you
are done with the loop, you have created many new buttons, all via the
variable "btn" (which is different, conceptually, than the button's Name).

However, you may wish to clean up the buttons the next time through your
function (or, you can just let the gc collect them and it will call
Dispose()). In the former case, you should/could save the buttons as you
create them, in an array (declared (as a variable) in the Form class you are
creating):

List<ButtonmyButtons = null;

Then, just before you *enter* the loop:

if (myButtons != null)
{
foreach (Button myButton in myButtons)
myButton.Dispose();
}
myButtons = new List<Button>(10);

then inside the loop, in addition to your existing statements, place:
myButtons.Add(btn);

If you want to do something else with the buttons, outside the loop
(although I don't know why you would), you can get at them via the
"myButtons" variable.

"Matt" <ma***********************@fujifilmsericol.comwrot e in message
news:11**********************@h2g2000hsg.googlegro ups.com...
On 2 May, 15:50, "Fred Mellender" <nospamPlease_fr...@frontiernet.net>
wrote:
>The Add function does not want the name of the button, but the button
itself, as in:

Controls.Add(btn);

To add the function that handles the click event, first code the function
in
the form's class. Suppose its name is "myClick". Then after you create
the
button, add the code:

btn.Click += new System.EventHandler(myClick);

again, if you study the code generated by VS, you will see code for your
statically defined controls that you can use as a template.
OK, I now have the data being red into a datarow which then creates
the row for a tableLayoutPanel to allow me to adjust the rows etc.
The code I currently have for the tableLayoutRow is as follows:
foreach (DataRow dr in dra)
{
// create the label
Label taskDesc = new Label();
taskDesc.Width = 500;
// create the button
Button btn = new Button();
btn.Text = "Complete Task";
btn.Name = "btn"+dr[0].ToString();
MessageBox.Show("Btn name = " + btn.Name);
taskDesc.Text = dr[1].ToString();
tlop.Controls.Add(taskDesc,0,i);
//tlop.Controls.Add(btn+dr[0].ToString(),1,i);
i++;
}
Where tlop is the tableLayoutPanel The issue I am having is when it
comes to adding the button to the panel (the commented out line) I get
an error that I cannot convert an object to a control. The variable
is showing up as btn1, btn2 etc but I can't read it into the tlop!
Help!
Matt

Fred, that's great but how do I create the control in the first place
if the parameter for controls.add() changes with every row?

I understand the concepts of creating a button, I just don't know how
to create a button then name it dynamically.

May 2 '07 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Patrick Marti | last post by:
I wish to create some LinkButtons in DotNet. Because I will do it in dependence of the entries in a database, I can not add them with the mouse to the form as usually. I can create them in the...
7
by: dog | last post by:
I've seen plenty of articles on this topic but none of them have been able to solve my problem. I am working with an Access 97 database on an NT4.0 machine, which has many Access reports. I...
2
by: Mark Siffer | last post by:
I am trying to add a compare validator at runtime. I would add it before but my input controls are built at runtime via an editable datagrid. Therefore, the names of the controls are not known...
1
by: Luc | last post by:
Hi, I have a TabControl and, at runtime, I need to add some tabpages. The problem is that each tabpage is similar to the others and contains several controls. If I do...
14
by: 97T | last post by:
Well this is still bugging me. I know there are other ways around this, but for a number of reasons I would like to be able to do this one simple thing. I have a form with a number of controls...
1
by: Terrance | last post by:
I have a problem I was hoping someone can help me with. My first problem is moving a link label that is created at runtime to the of an arraylist on the next line in the listbox. Currently, the...
0
by: anandv81 | last post by:
Hi, I encountered a strange problem while working on an application, the problem goes like this. I am generating a few textboxes at runtime at the server side and added to a placeholder, a...
0
by: =?Utf-8?B?U2hhcm9u?= | last post by:
Hello Gurus, I need to create a Microsoft Visual Studio 2005 report at runtime. I wrote a C# window application, that holds a DataSet and several DataGridView controls. Each of the...
2
by: sagarbakliwal | last post by:
hi, I am new to this forum but i have received a lot of help reading through this forum. I am creating a VB.NET application for Patient Record Management. In this there are various combo boxes and...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.