PDA

View Full Version : ارتباط دادن اعداد از نوع Int به Label



hsdnhd
چهارشنبه 23 اردیبهشت 1394, 16:05 عصر
باسلام
من با استفاده از سورس زیر 5 تا نردبان و 5 تا مار تولید میکنم که هرکدوم یک سر و یک ته داره و اینکه از ساخت نردبان افقی نیز جلوگیری میکند وبعدش این مشخصات رو دارم می ریزم توی یک آرایه دو بعدی یعنی هر نردبان و هر مار توی یک ردیف آرایه هستند توی بعد اول سر مار یا نردبان و توی بعد دوم آخرش هست اما خب من روی فرمم برای نشان دادن اعداد از Label ها استفاده کرد و پرسیدم گفتند باید با استفاده از Point ها بتونم اون نردبان و مارهارو روی فرمم نمایش بدم میخواستم بدونم چطوری من باید این اعداد که توی آرایه هستند رو بیارم روی فرم مثلا عدد 86 باید بشه همون lbl86 روی فرم و مثلا توی آرایه عدد 23 باشه و توی بعد بعدیش هم 54 باشه باید یک خط از 23 تا 54 بکشم و اگر بشه رنگ لیبل هارو هم عوض کنم به نظرتون چطوری میتونم اینکارو کنم؟پروژه پایان ترم دانشگاهم هست چندوقتی هست دارم روش کارمیکنم 1 ماه دیگه هم بیشتر وقت ندارم.
ممنون

public partial class Form1 : Form {
int [,] arr=new int[5,2];
enum SelShape
{
Line, RLine, Rect, FREct, ERaser, None
}
SelShape slshape = SelShape.None;
Pen p = new Pen(Color.Black);
Graphics gs = null;
int mx, my;
bool bdown = false;
public Form1()
{
InitializeComponent();
}
int ss = 0;
int se = 0;
int ls = 0;
int le = 0;
public int snake()
{
Random rnd = new Random();
do
{
se = rnd.Next(1, 100);
ss = rnd.Next(1, se);
} while (se % 10 > ss % 10);
return ss & se;
}
public int ladder()
{
Random rnd = new Random();
do
{
ls = rnd.Next(1, 100);
le = rnd.Next(ls, 100);
} while (se % 10 > ss % 10);
return ls & le;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Text = e.X.ToString() + "," + e.Y.ToString();
if (bdown)
{
if (slshape == SelShape.RLine)
{
gs.DrawLine(p, mx, my, e.X, e.Y);
mx = e.X;
my = e.Y;
}
else if (slshape == SelShape.ERaser)
{
p.Color = label1.BackColor;
gs.DrawLine(p, mx, my, e.X, e.Y);
mx = e.X;
my = e.Y;
p.Color = label1.BackColor;
}
}
}


private void Form1_Load(object sender, EventArgs e)
{
Point po1 = new Point();
po1.X = label1.Location.X;
po1.Y = label1.Location.Y;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
bdown = true;
mx = e.X;
my = e.Y;
}
private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 5; i++)
{
ladder();
for (int j = 0; j < 2; j++)
{
if (j == 0)
arr[i, j] = ls;
else if (j == 1)
arr[i, j] = le;
}
}
for (int i = 0; i < 5; i++)
{
snake();
for (int j = 0; j < 2; j++)
{
if (j == 0)
arr[i, j] = ss;
else if (j == 1)
arr[i, j] = se;
}
}
}
}

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 18:31 عصر
سلام سوالتون بهتره بگم توضیحی که دادید خیلی گنگ بود، اول سعی کنید کاری که میکنید توضیح ندید، بلکه چیزیرو که میخواهید بپرسید، از چیزی که من برداشت کردم میخواهید یکسری اعداد رو به یکسری Label بدید و بعد از اون اعداد استفاده کنید درسته؟
دو راه برای اینکار داری:
استفاده از Tag هر لیبل مثلا

label1.Tag = "1";
یا خاصیت Name اونها مثلا:

Label1.Name = "1";
بعد با گرفتن Name و tag هر Label میتونی اونرو تبدیل کنی به int

hsdnhd
چهارشنبه 23 اردیبهشت 1394, 20:33 عصر
ممنون
چیزی که من میخوام فکرکنم مربوط میشه به چیزی که انجام دادم.من میخوام اعدادی که توی آرایه ای از نوع int هست رو به label هام متصل کنم تا بتونم باهاشون اعمال خاصی رو انجام بدم.
ممکنه درمورد راه حلی که دارید یکم بیشتر توضیح بدید؟یک نمونه ای مثال بزنید من چطور باید اون مقادیر آرایه رو به این Label ها ارتباط بدم؟مثلا عدد 84 توی آرایه ذخیره شده چطور من این عدد رو به label شماره 84 خودم متصل کنم؟ ممنون میشم یک نمونه بهم بدید.
ممنون

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:18 عصر
ممنون
چیزی که من میخوام فکرکنم مربوط میشه به چیزی که انجام دادم.من میخوام اعدادی که توی آرایه ای از نوع int هست رو به label هام متصل کنم تا بتونم باهاشون اعمال خاصی رو انجام بدم.
ممکنه درمورد راه حلی که دارید یکم بیشتر توضیح بدید؟یک نمونه ای مثال بزنید من چطور باید اون مقادیر آرایه رو به این Label ها ارتباط بدم؟مثلا عدد 84 توی آرایه ذخیره شده چطور من این عدد رو به label شماره 84 خودم متصل کنم؟ ممنون میشم یک نمونه بهم بدید.
ممنون

شما می تونید از یک ارایه استفاده کنید! به هر حال به کد زیر نگاه کن شاید بتونه کمکت کنه. کار سختی نیست:


Label[] lbl = new Label[100];
for (int i = 0; i < 100; i++)
{
lbl[i] = new Label();
lbl[i].Tag = i;
}
MessageBox.Show(lbl[84].Tag.ToString()); }

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:21 عصر
برای ارایه هم یک مثال زدم نگاه کن:


int[] arrayint = new int[100];
for (int i = 0; i < 100; i++)
{
arrayint[i] = i;
}
Label[] lbl = new Label[100];
for (int i = 0; i < 100; i++)
{
lbl[i] = new Label();
lbl[i].Tag = arrayint[i];
}
MessageBox.Show(lbl[arrayint[84]].Tag.ToString());

hsdnhd
چهارشنبه 23 اردیبهشت 1394, 21:50 عصر
این خط داره ارایه از نوع Label می سازه؟

Label[] lbl = new Label[100];
میشه همچین چیزی؟

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 21:53 عصر
این خط داره ارایه از نوع Label می سازه؟

Label[] lbl = newLabel[100];
میشه همچین چیزی؟
من که تست کردم مشگلی نداشت، شما هم label هایی که میسازی به صورت ارایه بساز مشگل کار کجاست؟

hsdnhd
چهارشنبه 23 اردیبهشت 1394, 21:57 عصر
و درضمن شما دراین مثال ها به لیبل هاتون تگ داده اید من میخوام بدونم چطوری میشه ازا این تگ ها استفاده کرد به عنوان مثال توی عکس زیر قسمتی از فرم که لیبل ها دراون قرار دارند رو گذاشتم اون خطی که گذاشتم نشان دهنده نردبان هست و از عدد 22 شروع شده و به 84 رفته این دو تا عدد بصورت تصادفی ایجاد می شوند و توی یک آرایه دو بعدی ریخته میشن من میخوام الان ازاون ارایه بخونم و اون خط سبزرنگ که الان با نرم افزار Paint کشیدم رو بصورت خودکار روی فرمم بکشم اینو چطوری میتونم انجام بدم؟اون اعداد روی صفحه لیبل هستند بخاطرهمین نمیدونم چطوری اعدادی که دارم توی آرایه رو به این لیبل نسبت بدم که بفهمه باید خط رو از کدوم خونه تا کدوم خونه بکشه ممنون میشم این رو هم بهم توضیح بدید.

131204

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 22:01 عصر
و درضمن شما دراین مثال ها به لیبل هاتون تگ داده اید من میخوام بدونم چطوری میشه ازا این تگ ها استفاده کرد به عنوان مثال توی عکس زیر قسمتی از فرم که لیبل ها دراون قرار دارند رو گذاشتم اون خطی که گذاشتم نشان دهنده نردبان هست و از عدد 22 شروع شده و به 84 رفته این دو تا عدد بصورت تصادفی ایجاد می شوند و توی یک آرایه دو بعدی ریخته میشن من میخوام الان ازاون ارایه بخونم و اون خط سبزرنگ که الان با نرم افزار Paint کشیدم رو بصورت خودکار روی فرمم بکشم اینو چطوری میتونم انجام بدم؟اون اعداد روی صفحه لیبل هستند بخاطرهمین نمیدونم چطوری اعدادی که دارم توی آرایه رو به این لیبل نسبت بدم که بفهمه باید خط رو از کدوم خونه تا کدوم خونه بکشه ممنون میشم این رو هم بهم توضیح بدید.

131204

اگر نمی خواهید Label ها رو به صورت آرایه تعریف کنید و به صورت داینامیک روی فرمتون بزارید روی هر Label که کلیک کنید در حالت Design سمت راست قسمت properties مربوط به VisualStudio ، همونجایی که خاصیت text بهشون دادید یک خاصیت دیگه علاوه بر Text توی خاصیت ها وجود داره به نام Tag شما میتونید خاصیت Tag هر Label رو با شماره یا خاصیت Text اون برابر کنید.
حالا بعد از گرفت اعداد تصادفی کافی توی یک حلقه Foreach و Label هایی که رو فرمتون هست رو بگیرید و چک کنید ببینید کدومشون Tag برابر با اعدادی دارند که شما تولید کردید به صورت تصادفی

hsdnhd
چهارشنبه 23 اردیبهشت 1394, 22:41 عصر
ببخشید اما ممکنه یک نمونه هم درمورد همین راه حلی که گفتید بگذارید؟واقعا ممنون میشم.
این دو خط رو نمیتونم به شکل کد دربیارم ممنون میشم یک نمونه کدی بهم بدید ممنون


حالا بعد از گرفت اعداد تصادفی کافی توی یک حلقه Foreach و Label هایی که رو فرمتون هست رو بگیرید و چک کنید ببینید کدومشون Tag برابر با اعدادی دارند که شما تولید کردید به صورت تصادفی

pouria_bayat
چهارشنبه 23 اردیبهشت 1394, 23:59 عصر
public void getAllLabl()
{
foreach (Control child in this.Controls)
{
CheckLabel(child);

}
}
public void CheckLabel(Control control)
{
if (control is Label)
{
Label lbl = (Label)control;
if (lbl.Tag == "عددی که میخواهید")
{
// عملیاتی که می خواهید انجام بدید رو اینجا بزارید
}

}
}

Mahmoud.Afrad
پنج شنبه 24 اردیبهشت 1394, 00:23 صبح
میتونی از کد زیر استفاده کنی

Label firstLbl = this.Controls["lbl" + 84] as Label;

hsdnhd
پنج شنبه 24 اردیبهشت 1394, 07:57 صبح
public void getAllLabl()
{
foreach (Control child in this.Controls)
{
CheckLabel(child);

}
}
public void CheckLabel(Control control)
{
if (control is Label)
{
Label lbl = (Label)control;
if (lbl.Tag == "عددی که میخواهید")
{
// عملیاتی که می خواهید انجام بدید رو اینجا بزارید
}

}
}

و اینکه این شرط قبلش حلقه نمیخواد؟چون باید کل لیبل هارو بگرده ویپدا کنه بعدش عملیات رو انجام بده.
ممنون

hsdnhd
پنج شنبه 24 اردیبهشت 1394, 07:57 صبح
میتونی از کد زیر استفاده کنی

Label firstLbl = this.Controls["lbl" + 84] as Label;

میشه یه توضیحی هم درمورد کدتون بهم بدید که داره چیکار میکنه؟ممنون میشم.

بیتا حکمت
پنج شنبه 24 اردیبهشت 1394, 13:53 عصر
میشه یه توضیحی هم درمورد کدتون بهم بدید که داره چیکار میکنه؟ممنون میشم.

سلام . نگاه کنید شما زمانی که Lable رو هم به ترتیب پشت سر هم به فرم اضافه می کنید اسامی Label ها به این صورت می افته Label1 ، Label2 و Label3 و ...
دوستمون فرض رو بر این گذاشتن که اسامی Labl های شما به این صورت هست Lbl1 ، Lbl2 و ...

این کد یعنی اینکه :





Label firstLbl = this.Controls["lbl" + 84] as Label;
textBox1.Text = firstLbl.Text;



"lbl" رو با کلمه 84 ترکیب کن ، یعنی اشاره می کنه به Lbl84 و مقدار Text ، لیبل 84 رو در تکست باکس بریز .
حالا شما در نظر بگیرید اون قسمت عددی (84 ) رو که می تونه یک اندیس از حلقه For باشه .
در اون صورت با یک حلقه و چند خط ساده می تونید مقدار Text ، ،Tag و ... از لیبل ها رو به ترتیب بخونید .
مثلا" به این صورت :




for (int i = 1; i <= 84; i++)
{
Label firstLbl = this.Controls["lbl" + i] as Label;
listBox1.Items.Add(firstLbl.Text);

}