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<Button> myButtons = 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" <matthew.macdonald-(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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.
>
|