PDA

View Full Version : Access to dynamic_build objects



Shadmehr84
جمعه 27 مهر 1386, 01:43 صبح
سلام به تمام اهالی سیاره #C :قلب:
من نسخه ی بتای ماشین حساب رو همین روزا می ذارم تو تالار تا بروبکس ما رو از نظرات حکیمانشون بهره مند کنند :لبخندساده:

تو مرحله ی دوم رو بازی Minesweeper خود ویندوز تمرکز کردم.
من روی کار رو با button و پشتش رو با label کار کردم، و برای اینکه بتونم به مراحل مختلف سوئیچ کنم، buttonها و labelها رو به صورت Dynamic کار کردم.
مثلاّ:


privateint x = -25, y = 0;
privatevoid Start()
{
System.Windows.Forms.Button B;
for (int i = 0; i < 100; i++)
{
B = new System.Windows.Forms.Button();
B.Name = "B" + i.ToString();
B.Size = new System.Drawing.Size(25, 25);
B.UseVisualStyleBackColor = true;
B.TabStop = false;
B.Location = new System.Drawing.Point(x += 25, y);
B.Click += new System.EventHandler(button_Click);
B.MouseDown += new System.Windows.Forms.MouseEventHandler(button_Lock );
Controls.Add(B);
if (x == 225) { x = -25; y += 25; }
}
}


به این ترتیب، اسم buttonها به ترتیب B0,B1,B2,...,B99 و اسم Labelها به ترتیب L0,L1,L2,...,L99 خواهند شد و buttonها و Labelهای هم شماره، روی هم می افتن.
برای چندتا از Labelها هم توسط یه متد که عدد تصادفی غیر تکراری تولید می کنه، عکس قرار دادم.

حالا می خوام روی هر buttonی که کلیک می کنم، اگه Label هم شماره ی زیرش، عکس داشت، یه کار خاصی رو انجام بده (مثلاّ تو یه MessageBox پیغامی رو نشون بدم ).

لطفاّ یه طوری بگید که سر در بیارم! :افسرده:

hassan razavi
جمعه 27 مهر 1386, 10:01 صبح
از خاصیت Tag مربوط به Lable ها استفاده کن. هرکدام مین بود عدد 1- ، خالی بود عدد 0 ، و در غیر اینصورت تعداد میتهای مجاور رو بریز داخلش

Shadmehr84
جمعه 27 مهر 1386, 19:01 عصر
من نتونستم با Tag کار کنم :ناراحت:
مشکل من دسترسی به labelی هست که زیر button کلیک شده قرار داره.

لطفاّ واضح تر و با مثال راهنماییم کنید.

hassan razavi
جمعه 27 مهر 1386, 19:57 عصر
1- Tag فقط عدد میگیره
2- Lable هاتون رو هم مثل Bottumn نامگذاری کنید طوری که شماره ای که به ته اسم Bottumn می چسبونید با Lable یکی باشه. وفتی روی Bottumn کلیک کرد از روی شماره ته اسمش می تونی به Lable هم دسترسی پیداکنی.
برای اشاره به اون Lable هم از FindComponent یا Form.Controls استفاده کنید