PDA

View Full Version : سوال: چگونگي استفاده از رويداد هاي يه Array Control



EbiPenMan
سه شنبه 12 آذر 1387, 16:59 عصر
سلام به همگي

من جواب يه سوالم رو گرفتم ولي حالا به يه مشكل ديگه بر خوردم.

من الان مي تونم فقط با دوتا حلقه هر چنتا كه كنترل بخوام بسازم و به خصوصيات آنها دست پيدا كنم.

ولي حالا نمي دونم چه طور مثلا رويداد كليك رو براي آنها بنويسم.
چون كنترل ها در زمان اجراي برنامه ساخته مي شن نمي تونم به رويدادهاي آنها دست پيدا كنم.



private System.Windows.Forms.Button[,] ButtonArray = null;
private void Form1_Load(object sender, EventArgs e)
{
ButtonArray = new System.Windows.Forms.Button[3, 3];

int x, y;
for (y = 0; y < 3; y++)
for (x = 0; x < 3; x++)
{
ButtonArray[x, y] = new System.Windows.Forms.Button();
ButtonArray[x, y].Location = new System.Drawing.Point(20 + x * 16, 70 + y * 16);
ButtonArray[x, y].Name = "";
ButtonArray[x, y].Size = new System.Drawing.Size(16, 16);

this.Controls.Add(ButtonArray[x, y]);


راحي نداره كه اين كد رو در فايل Form1.Designer.cs بنويسم تا بتونم با كليك روي هر دكمه رويداد اون رو خودش بسازه.

من يه رويداد كليك مي خوام كه براي همه دكمه ها يكي باشه و بشه در اون ايندس دكمه كليك شده رو فهميد. يعني در پارامتر هاي رويداد كليكش ايندكس دكمه رو هم بهم بده.

h.jaza
سه شنبه 12 آذر 1387, 19:52 عصر
نیازی به این کارا نیست.

رویداد کلیکش رو بنویس دیگه.

مطالعه کن یا سرچ کن.

majid325
چهارشنبه 13 آذر 1387, 02:12 صبح
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);

void btn_Click(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}

اين اولين راهش بود.
ميتوني از delegate و Lambda هم براي بهينه تر شدن كدت استفاده كني.

EbiPenMan
یک شنبه 17 آذر 1387, 09:30 صبح
Button btn = new Button();
btn.Click += new EventHandler(btn_Click);

void btn_Click(object sender, EventArgs e)
{
Label1.Text = DateTime.Now.ToString();
}

اين اولين راهش بود.
ميتوني از delegate و Lambda هم براي بهينه تر شدن كدت استفاده كني.

اگه به كد توجه كنيد مي بينيد كه من يه دكمه به صورت آرايه اي ساختم در يك حلقه .

اين كد شما اصلا كار نمي كنه چون اصلا معلوم نيست كه چه دكمه اي با چه ايندكسي كليك شده است.

راهي مي خوام كه بتونم بفهمم كه مثلا اگه من 60 تا دكمه به اين صورت ساختم كاربر روي كدومش كليك كرده ايندكس x و y رگش رو بهم بده.

sinpin
یک شنبه 17 آذر 1387, 13:02 عصر
من يه رويداد كليك مي خوام كه براي همه دكمه ها يكي باشه و بشه در اون ايندس دكمه كليك شده رو فهميد. يعني در پارامتر هاي رويداد كليكش ايندكس دكمه رو هم بهم بده.


private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 6; i++)
{
Button bn = new Button();
bn.Name = bn.Text = "Button" + i.ToString();
bn.Location = new Point(0, i * 30);
bn.Size = new Size(100, 30);
bn.MouseDown += new MouseEventHandler(bn_MouseDown);
this.Controls.Add(bn);
}
}

void bn_MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show(string.Format("{0}, {1}:{2}", (sender as Button).Name, e.X, e.Y));
}

EbiPenMan
دوشنبه 18 آذر 1387, 14:31 عصر
دوست عزيز ممنون از شما ولي شما خودتون اين كد رو امتحان كرديد؟ جواب داده؟

براي من كه جواب نداد.

من سورسش رو مي زارم. من مي خوام روي هر دكمه كه كليك كرد بهم بگه كدوم دكمه هست.

http://i38.tinypic.com/ej8txh.jpg

EbiPenMan
دوشنبه 18 آذر 1387, 14:56 عصر
اينم يه كد كاملتر فقط مي فهمه كه كليك شده ولي نمي شه فهميد كدوم دكمه هست.

h.jaza
دوشنبه 18 آذر 1387, 21:45 عصر
دوست عزيز ممنون از شما ولي شما خودتون اين كد رو امتحان كرديد؟ جواب داده؟

براي من كه جواب نداد.

کدی که سینا جان گذاشتن، کاملا درسته و هیچ مشکلی هم نداره.

نمونه برنامش هم در فایل ضمیمه گذاشتم و هیچ مشکلی نداره و مکان رو هم نشون میده.

final fantasy
سه شنبه 19 آذر 1387, 08:04 صبح
دوستان حالا این کدی که گذاشتین با یه تغییر کوچیک هم میشه جای چیزای دیگه گذاشت مثل textbox ؟

h.jaza
سه شنبه 19 آذر 1387, 11:26 صبح
دوستان حالا این کدی که گذاشتین با یه تغییر کوچیک هم میشه جای چیزای دیگه گذاشت مثل textbox ؟

آره، مشکلی نداره.

ashkan2005
چهارشنبه 31 فروردین 1390, 18:26 عصر
سلام خدمت همه دوستان و اساتید
آیا میشه واسه lineshape هم استفاده کرد.
من این جوری نوشتم بدون آرایه کار می کنه یا ارایه کار نمی کنه.

ShapeContainer[] canvas = new ShapeContainer[10];
LineShape[] line1 = new LineShape[10];
canvas[0].Parent = this;
// Set the ShapeContainer as the parent of the LineShape.
line1[0].Parent = canvas[0];
line1[0].Name = "hakan";
line1[0].X1 = x1 + 40;
line1[0].X2 = x1 - 570;
line1[0].Y1 = y1 - 1;
line1[0].Y2 = y1 - 1;