PDA

View Full Version : تابع رندوم برای نمایش تصادفی عکس بک گراند پنل ها



bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 11:50 صبح
سلام

من در پروژه 12 پنل دارم که تکه های یک پازل هستند. چطور اونا رو رندوم نمایش بدم ؟؟؟

با استفاده از ()random تابع می خوام هر بار عکس بک گراند پنل ها بصورت تصادفی عوض بشه...

یه راهنمایی بکنین ممنون می شم

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 12:02 عصر
Random random= new Random();
panel1.BackgroundImage=Image.FromFile( string.Format("C:\\Pic\\{0}.Png",random.Next(1, 12)));

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 12:08 عصر
ممنون

حالا من 12 پنل دارم با 12 عکس بک گراند ...

چکارش کنم که عکس های تصادفی که می ده تکراری نباشن ؟؟

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 12:32 عصر
void Main()

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 12; i++)
{

sb.AppendFormat("{0},",GetRandomNumber());
}
MessageBox.Show(sb.ToString());
}

List<int> list = new List<int>();
Random random = new Random();
private int GetRandomNumber()
{
int iRandom = random.Next(1, 13);
if (!list.Contains(iRandom))
{
list.Add(iRandom);
return iRandom;
}
return GetRandomNumber();
}

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 12:43 عصر
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 12; i++)
{

sb.AppendFormat("{0},", GetRandomNumber());
}
MessageBox.Show(sb.ToString());


این قسمت رو توی main از کلاس program پروژه نوشتم و بقیه رو توی فرمی که پازل رو دارم...

اما می گه GetRandomNumber() وجود نداره ...

همه رو هم که توی void main می نویسم بازم ایراد می گیره از آرایه و ...

چطور کدها رو قرار بدم؟

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 12:45 عصر
با با استفاده از linq


IEnumerable<int> numbers= Enumerable.Range(1, 12) ;
int[] randomNumbers = (from n in numbers
orderby Guid.NewGuid()
select n).ToArray();

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 12:47 عصر
اون مثال بود تو Ctor مربوط به form بنویس
من راه دوم بیشتر توصیه میکنم .

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 12:49 عصر
وقتی همه اش رو توی فرم پازل می یارم این کدها رو توی رویداد کلیک button گذاشتم اما خطای stack overflow می ده



//StringBuilder sb = new StringBuilder();
for (int i = 0; i < 13; i++)
{

// sb.AppendFormat("{0},", GetRandomNumber());
panel1.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel2.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel3.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel4.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel5.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel6.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel7.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel8.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel9.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel10.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel11.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));
panel12.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", GetRandomNumber()));

}
MessageBox.Show(sb.ToString());
مشکل از کجاست؟

از این خط از تابع GetRandomNumber() ایراد می گیره



int iRandom = random.Next(1, 12);

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 12:56 عصر
من با linq کار نکردم ... :افسرده:

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 12:57 عصر
روش دیگر :


System.Random random = new System.Random();

int[] randomNumbers = (from r in Enumerable.Range(1, 12)
let iRandom = random.Next()
orderby iRandom
select r).ToArray();



خوب معلومه دیگه for نمیخواد .

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 13:06 عصر
توی کدهای من کجا باید اینو بذارم؟؟؟ :اشتباه:



panel1.BackgroundImage = Image.FromFile(string.Format(".\\puzzle pic\\cd1\\p1\\p1_{0}.jpg", ???????????????????????????????));


در ضمن فضای نام using system.linq باید بذارم ؟؟؟؟ چرا قبول نمی کنه ؟

شرمنده !!! خیلی دارم وقتتونو می گیرم

esmaeily-hosein
چهارشنبه 02 اردیبهشت 1388, 13:09 عصر
اصلاح method :


private int GetRandomNumber()
{
int iRandom = random.Next(1, 13);
if (!list.Contains(iRandom))
{
list.Add(iRandom);
return iRandom;
}
else if (list.Count != 12)
{
return GetRandomNumber();
}
return -1;
}


نمیدونم تو شروع بازی یا Ctor . اصلا هر جا خودت میپسندی!
فقط برای دریافت دوباره حتما لیست خالی کن . در .net 2 نمیتونی به linq دسترسی داشته باشی نسخه framework عوض کن .

bahar_engineer
چهارشنبه 02 اردیبهشت 1388, 13:28 عصر
درست شد خیلی لطف کردین