برای این کار که تعریف آن از شی مورد نظر ساخته می شود کد زیر یک Button در حالت Run Time می سازه :
Button btnButton = new Button();
btnButton.Text = string.Format("{0} , {1} ", "New Button", i.ToString());
btnButton.Size = new Size(100, 30);
this.Controls.Add(btnButton);
اشکالات این کد چیست ؟
رفتاری برای کنترل Button تعریف نشده که آن را با اوبجکت Tag در مرحله ای بعدی انجام می دهیم و اینکه کار گرافیکی شما برای این برنامه مناسب نیست و اینکه الان بعد RUN برنامه Button در Location 0,0 قرار داره که میشه واسه آن تعریف کرد به این شکل :
btnButton.Location=new Point( x, y);
خوب حالا بهترین راه برای این کار چیست ؟
استفاده از کنترل flowLayoutPanel است که کد شما برای قرار گیری در این کنترل به این شکل می شود :
Button btnButton = new Button();
btnButton.Text = string.Format("{0} , {1} ", "New Button", i.ToString());
btnButton.Size = new Size(100, 30);
flPanel.Controls.Add(btnButton);
خوب حالا رفتار کنترل های که در حالت Run Time ساخته می شوند به این گونه می توان دسترسی پیدا کرد :
Button btnButton = new Button();
btnButton.Text = string.Format("{0} , {1} ", "New Button", i.ToString());
btnButton.Size = new Size(100, 30);
btnButton.Tag = i;
btnButton.Click += btnButton_Click;
flPanel.Controls.Add(btnButton);
خوب حالا چگونه با استفاده از رفتار CliCK یک Button به عنوان مثال یک MessageBox. نشون بدهیم خیلی ساده بعد از تعریف یک Event در Visual Studio یک متد ساخته میشه با نام btnButton_Click ، که بدنه ان به این شکل است :
private void btnButton_Click(object sender, EventArgs e)
{
MessageBox.Show("Text Button");
}
خوب حالا شما با کد نویسی در این هنگام RinTime که Button را می سازید کدهای شما به آن اختصاص داده میشه و تمام ولی اگر تعداد آنها بیش از یکی بود چی میشه ؟ مشکل خاصی نداره اینم با استفاده از اوبجکت Tag أن را حل می کنیم برای حل این باید بدانیم چطور به کنترلی که کلیک کردیم در کدنویسی به دستش بیاریم به همین دلیل چون Object پاس کاری بشه بینه Function ها برای همین برای دسترسی آن باید از Object Sender استفاده کنیم به فرض مثال شما 4 Button در RunTime ساختید این کد 4 Button را از هم تفکیک می کند :
private void btnButton_Click(object sender, EventArgs e)
{
Button btntmp = (Button) sender;
string btnvlaueTAG = btntmp.Tag.ToString().Trim();
switch (btnvlaueTAG)
{
case "1": MessageBox.Show("1"); break;
case "2": MessageBox.Show("2"); break;
case "3": MessageBox.Show("3"); break;
case "4": MessageBox.Show("4"); break;
}
و در آخر اینکه Object Tag مقدار هر button را از هم جدا می کند که بستگی به خودتون داره می تونید واسه هر کدام متد ویا واسه همشون یک کلاس بسازید