نمایش نتایج 1 تا 18 از 18

نام تاپیک: استفاده از تابع random به همراه timer

  1. #1

    استفاده از تابع random به همراه timer

    سلام
    من یک برنامه دارم مینویسم که کار قرعه کشی رو انجام بده یک باتن گذاشتم که با کلیک اعداد داخل textbox با یک تایمر که گذاشتم تا 100 بار عوض میشه مشکل اینه که بار اول که روی باتن کلیک کی کنم اعداد داخل textbox 100 بار عوض میشه ولی دفعات بعد به ترتیب با هر کلیک رو باتن اعداد کمتر عوض میشن مثلا 50 بار 20 بار 10 بار به صورتی که با کلیک 10 با یازدهم دیگه تغییر اعداد توی textbox صورت نمیگیره و فقط یک عدد راندوم توی textbox نشون داده میشه. کدم رو میزارم ببینید مشکل کار کحاست اگه راه حلی به نظرتون رسید ممنون میشم راهنمایی کنید. آزمون و خطا هم زیاد کردم نتیجه نداد اگه امتحان کنید واستون دیدید جواب داد بگید خیلی خیلی ممنون می شم
            int con=0;
    private void NumbersMoving()
    {
    Random ra = new Random();
    int randm = ra.Next(100, 200);
    txtRandomShow.Text = randm.ToString();
    }
    private void btnrandomnumber_Click(object sender, EventArgs e)
    {
    con = 0;
    timerNumAnimation.Start();
    timerNumAnimation.Tick += new EventHandler(timerRandomNumberChange_Tick);

    }
    private void timerRandomNumberChange_Tick(object sender, EventArgs e)
    {
    if (con < 100)
    {
    NumbersMoving();
    con++;
    }
    else
    {
    timerRandomNumberChange.Stop();
    }
    }


  2. #2
    کاربر دائمی آواتار Amir4317
    تاریخ عضویت
    مهر 1390
    محل زندگی
    نصف جهان
    پست
    160

    نقل قول: استفاده از تابع random به همراه timer

    سلام!

    شما در هر بار کلیک رخداد رو بصورت چندباره به تایمرتون اضافه میکنید
    کافیه در فرم لود یا بعد از مقدار دهی اولیه فرم کدی رخداد دهی تایمر رو بگذارید.

    فعلا دسترسی ب ویژ<ال استودیو ندارم خودتون امتحان کنید.

  3. #3

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط Amir4317 مشاهده تاپیک
    سلام!

    شما در هر بار کلیک رخداد رو بصورت چندباره به تایمرتون اضافه میکنید
    کافیه در فرم لود یا بعد از مقدار دهی اولیه فرم کدی رخداد دهی تایمر رو بگذارید.

    فعلا دسترسی ب ویژ<ال استودیو ندارم خودتون امتحان کنید.
    ببخشید متوجه نشدم. الان مشکل اینه که با هر بار کلیک تعداد دفعات تغییر اعداد توی textbox کم میشه و اگه count رو روی 1000 بزارم تا 20-30 بار کلیک هم احساس نمیشه و تازه از اون به بعد متوجه میشی. حالا باید چکار کنم که این مشکل برطرف شه یعنی چه یک بار روی باتن کلیک کنم چه 100 بار اعداد همون 100 بار داخل textbox عوض بشن
    آخرین ویرایش به وسیله mahan0o0 : پنج شنبه 01 مرداد 1394 در 11:01 صبح

  4. #4

    نقل قول: استفاده از تابع random به همراه timer

    -------------

  5. #5

    نقل قول: استفاده از تابع random به همراه timer

    سلام.

    سلام.
    شما میتونید از HashSet استفاده کنید و 100 مقدار متفاوت داشته باشید.
    HashSet داده های تکراری رو قبول نمیکنه امتحان کنید:
    private void button1_Click(object sender, EventArgs e)
    {
    HashSet<int> hashset = new HashSet<int>();
    hashset.Add(1);
    hashset.Add(1);
    hashset.Add(2);
    hashset.Add(2);
    hashset.Add(3);
    string hashsetItems = "";
    foreach (var item in hashset)
    {
    hashsetItems += item.ToString() + ",";
    }
    MessageBox.Show(hashsetItems);
    }



    کد اصلی:

    private void Form1_Load(object sender, EventArgs e)
    {
    timerNumAnimation.Tick += new EventHandler(timerRandomNumberChange);
    }

    private int count = 0;
    private List<int> randomNumbers = new List<int>();

    private void CreateRandomNumber()
    {
    Random rand = new Random();
    HashSet<int> numbers = new HashSet<int>();
    while (numbers.Count < 100)
    {
    numbers.Add(rand.Next(100, 200));
    }
    randomNumbers = numbers.ToList();
    }

    private void btnrandomnumber_Click(object sender, EventArgs e)
    {
    count = 0;
    CreateRandomNumber();
    timerNumAnimation.Start();
    }

    private void timerRandomNumberChange(object sender, EventArgs e)
    {
    if (count < 100)
    txtRandomShow.Text = randomNumbers[count++].ToString();
    else
    count = 0;
    }
    آخرین ویرایش به وسیله ناامید : پنج شنبه 01 مرداد 1394 در 19:34 عصر

  6. #6

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط ناامید مشاهده تاپیک
    سلام.

    سلام.
    شما میتونید از HashSet استفاده کنید و 100 مقدار متفاوت داشته باشید.
    HashSet داده های تکراری رو قبول نمیکنه امتحان کنید:
    private void button1_Click(object sender, EventArgs e)
    {
    HashSet<int> hashset = new HashSet<int>();
    hashset.Add(1);
    hashset.Add(1);
    hashset.Add(2);
    hashset.Add(2);
    hashset.Add(3);
    string hashsetItems = "";
    foreach (var item in hashset)
    {
    hashsetItems += item.ToString() + ",";
    }
    MessageBox.Show(hashsetItems);
    }



    کد اصلی:

    private void Form1_Load(object sender, EventArgs e)
    {
    timerNumAnimation.Tick += new EventHandler(timerRandomNumberChange);
    }

    private int count = 0;
    private List<int> randomNumbers = new List<int>();

    private void CreateRandomNumber()
    {
    Random rand = new Random();
    HashSet<int> numbers = new HashSet<int>();
    while (numbers.Count < 100)
    {
    numbers.Add(rand.Next(100, 200));
    }
    randomNumbers = numbers.ToList();
    }

    private void btnrandomnumber_Click(object sender, EventArgs e)
    {
    count = 0;
    CreateRandomNumber();
    timerNumAnimation.Start();
    }

    private void timerRandomNumberChange(object sender, EventArgs e)
    {
    if (count < 100)
    txtRandomShow.Text = randomNumbers[count++].ToString();
    else
    count = 0;
    }
    دوست عزیز ممنون ولی مشکل من داده های تکراری نیست مشکل من اینه که یه باتن توی فرمم دارم که با هر بار کلیک داده های داخل textbox 100 بار با استفاده از تایمری که گذاشتم عوض میشن تا به مشتری حس انتخاب یک عدد تصادفی رو بده. ولی فقط بار اول 100 بار اعداد عوض میشن و با هر کلیک اعداد کمتر عوض میشن به طوری که بعد از کلیک 10 یا 12 اعداد داخل textbox فقط یکی دوبار عوض میشن یا اصلا عوض نمیشن و فقط عدد تصادفی تولید شده با تابع راندوم رو نشون میده کدم رو هم که توی پست اول گذاشتم حالا اگه می شه راهنمایی کنید بسیار بسیار ممنون.

  7. #7
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: استفاده از تابع random به همراه timer


    private void button1_Click(object sender, EventArgs e)
    {
    System.Threading.Tasks.Task.Factory.StartNew(
    () => {
    Random rnd = new Random();
    for (int i = 0; i < 100; i++)
    {
    textBox1.Invoke((MethodInvoker)delegate
    {
    textBox1.Text = rnd.Next(100, 200).ToString();
    });
    System.Threading.Thread.Sleep(200);
    }
    });
    }

  8. #8

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط mahan0o0 مشاهده تاپیک
    دوست عزیز ممنون ولی مشکل من داده های تکراری نیست مشکل من اینه که یه باتن توی فرمم دارم که با هر بار کلیک داده های داخل textbox 100 بار با استفاده از تایمری که گذاشتم عوض میشن تا به مشتری حس انتخاب یک عدد تصادفی رو بده. ولی فقط بار اول 100 بار اعداد عوض میشن و با هر کلیک اعداد کمتر عوض میشن به طوری که بعد از کلیک 10 یا 12 اعداد داخل textbox فقط یکی دوبار عوض میشن یا اصلا عوض نمیشن و فقط عدد تصادفی تولید شده با تابع راندوم رو نشون میده کدم رو هم که توی پست اول گذاشتم حالا اگه می شه راهنمایی کنید بسیار بسیار ممنون.
    رویداد Tick تایمر رو در رویداد فرم load تعریف کنید.
    private void Form1_Load(object sender, EventArgs e)
    {
    timerNumAnimation.Tick += new EventHandler(timerRandomNumberChange_Tick);
    }


    به نظر میاد که ابتدا 100 عدد تصادفی ایجاد میشه و به تدریج اون 100 عدد تصادفی تبدیل یه تعداد کمی عدد تصادفی میشه اما اینطور نیست چیزی که اتفاق میفته این هستش که سرعت تولید اعداد تصادفی بالا میره و در زمان بسیار کوتاهتری 100 عدد تصادفی تولید میشه به طوری که نمیشه اعداد تصادفی را مشاهده کرد.

    به این صورت است:
    سری اول یک رویداد Tick ایجاد میشه و یک بار عدد تصادفی تولید میشه و نمایش داده میشه. ( اینجا یک رویداد Tick داریم)
    سری دوم یک رویداد Tick دیگر ایجاد میشه و با رویداد قبلی میشود دو رویدا و دو عدد تصادفی تولید و نمایش داده میشه. (اینجا دو رویداد Tick داریم)
    سری سوم یک رویداد Tick دیگر ایجاد میشه و با رویداد های قبلی میشود سه رویداد و سه عدد تصادفی تولید و نمایش داده میشه. (اینجا سه رویداد Tick داریم)
    .
    .
    .
    سری دهم یک رویداد دیگر ایجاد میشه و با رویدادهای قبلی میشود 10 رویداد و 10 عدد تصادفی تولید و نمایش داده میشه.(اینجا ده رویداد Tick داریم)

    در حقیقت اعداد تصادفی تولید میشود اما سرعت تولید و نمایش آنها به اندازه ای سریع است که نمیتوان آنها را مشاهده کرد.


    و این که نیازی ندارید که بر روی تایمر دابل کلیک کنید تا رویداد Tick ایجاد شود به خاطر این که با رویدادی که در load تعریف میکنید میشود دو رویداد.
    آخرین ویرایش به وسیله ناامید : یک شنبه 04 مرداد 1394 در 20:30 عصر

  9. #9
    کاربر دائمی آواتار alireza264
    تاریخ عضویت
    تیر 1390
    محل زندگی
    تهران
    پست
    264

    نقل قول: استفاده از تابع random به همراه timer

    سلام
    مهندس گرامی mahan0o0 کدی که نوشتی نقصی نداره اما برای اینکه جواب بهتری بگیریذ یک تغییر کوچیک بدید فکر کنم به خواستت میرسی
    تعریف متغیر رندم رو خارج ار متدNumbersMoving بنویسین. چون با هر بارفراخوانی متد NumbersMoving متغیر ra مجدد تعریف میشه و دوباره همون اعداد قبلی رو تولید میکنه


    Random ra = new Random();

    private void NumbersMoving()
    {
    int randm = ra.Next(100, 200);
    txtRandomShow.Text = randm.ToString();
    txtRandomShow.Refresh();
    }


    همینطور interval تایمر رو هم به یک دهم یا یک پنجم ثانیه تغییر بدید تا عدد تولید شده نمایش داده بشه و یا میتونی بعد از دستور واگذاری به تکست باکس اونو Refresh کنی

  10. #10

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط ناامید مشاهده تاپیک
    سلام.

    سلام.
    شما میتونید از HashSet استفاده کنید و 100 مقدار متفاوت داشته باشید.
    HashSet داده های تکراری رو قبول نمیکنه امتحان کنید:
    private void button1_Click(object sender, EventArgs e)
    {
    HashSet<int> hashset = new HashSet<int>();
    hashset.Add(1);
    hashset.Add(1);
    hashset.Add(2);
    hashset.Add(2);
    hashset.Add(3);
    string hashsetItems = "";
    foreach (var item in hashset)
    {
    hashsetItems += item.ToString() + ",";
    }
    MessageBox.Show(hashsetItems);
    }



    کد اصلی:

    private void Form1_Load(object sender, EventArgs e)
    {
    timerNumAnimation.Tick += new EventHandler(timerRandomNumberChange);
    }

    private int count = 0;
    private List<int> randomNumbers = new List<int>();

    private void CreateRandomNumber()
    {
    Random rand = new Random();
    HashSet<int> numbers = new HashSet<int>();
    while (numbers.Count < 100)
    {
    numbers.Add(rand.Next(100, 200));
    }
    randomNumbers = numbers.ToList();
    }

    private void btnrandomnumber_Click(object sender, EventArgs e)
    {
    count = 0;
    CreateRandomNumber();
    timerNumAnimation.Start();
    }

    private void timerRandomNumberChange(object sender, EventArgs e)
    {
    if (count < 100)
    txtRandomShow.Text = randomNumbers[count++].ToString();
    else
    count = 0;
    }
    دوست عزید کدتون رو امتحان کردم عالی بود فقط من میخوام بعد از اینکه 100 عدد تصادفی ایجاد شد از عدد 100 به عنوان عدد تصادفی استفاده کنم و این عدد با کلیک بعدی دیگه تو لیست اعداد تصادفی نیاد یعنی 99 عدد تصادفی تولید شه و به همین ترتیب اگه 20 بار کلیک کردم 80 عدد تصادفی تولید شه یعنی اون 20 تا عدد دیگه توی اون 80 تا تکرار نشه واسه حل این مشکل چیکار کنم؟ ممنون میشم کمک کنید کجای کد اصلی که از دوستم رو گذاشتم باید تغییر بدم؟

  11. #11

    نقل قول: استفاده از تابع random به همراه timer

    دوستان لطفا کمک کنید همین یک مشکل رو دارم

  12. #12
    کاربر دائمی آواتار alireza264
    تاریخ عضویت
    تیر 1390
    محل زندگی
    تهران
    پست
    264

    نقل قول: استفاده از تابع random به همراه timer

    سلام
    یه لیست بساز و اعداد 100 تا 200 رو توش بریز( لیست حاوی 100 تا سطز میشه ) بعد یک عدد تصادفی رو بین 0 تا تعداد عناصر لیست رو تولید کن و عدد داخل اون سطر لیست رو بعنوان عدد تولید شده اعلام کن و اون سطر رو حذف کن
    به این ترتیب دیگه عدد تکراری تولید نمیشه و بدلیل حذف سطر اعلام شده هر بار یک سطر هم کم میشه

  13. #13

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط alireza264 مشاهده تاپیک
    سلام
    یه لیست بساز و اعداد 100 تا 200 رو توش بریز( لیست حاوی 100 تا سطز میشه ) بعد یک عدد تصادفی رو بین 0 تا تعداد عناصر لیست رو تولید کن و عدد داخل اون سطر لیست رو بعنوان عدد تولید شده اعلام کن و اون سطر رو حذف کن
    به این ترتیب دیگه عدد تکراری تولید نمیشه و بدلیل حذف سطر اعلام شده هر بار یک سطر هم کم میشه
    ممنونم منظورتون رو متوجه شدم خودم هم این راه حل به هنم رسید مشکل اینه که کدش رو نمیتونم بنویسم اگه بر مبنای همون کد بالا که گذاشتم بگید چطور میشه بسیار ممنون میشم

  14. #14

    نقل قول: استفاده از تابع random به همراه timer

    عذر میخوام فراموش کردم تایمر رو متوقف کنم.
    البته میدونم خودتون این مشکل رو رفع کردید ولی گفتم اشاره کنم.
    if (count < 100)
    txtRandomShow.Text = randomNumbers[count++].ToString();
    else
    {
    count = 0;
    timerNumAnimation.Stop(); // اینجا
    }

  15. #15

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط ناامید مشاهده تاپیک
    عذر میخوام فراموش کردم تایمر رو متوقف کنم.
    البته میدونم خودتون این مشکل رو رفع کردید ولی گفتم اشاره کنم.
    if (count < 100)
    txtRandomShow.Text = randomNumbers[count++].ToString();
    else
    {
    count = 0;
    timerNumAnimation.Stop(); // اینجا
    }
    ممنون دوست عزیز اره خودم متوقفش کرده بودم الان مشکل اصلیم رو توی پست 10 مطرح کردم لطفا اگه امکان داره راهنمایی کنید خیلی خیلی ممنون میشم

  16. #16

    نقل قول: استفاده از تابع random به همراه timer

    چشم.
    ولی من باید برم سرکار تا برگردم اگر دوستان راهنمایی نکردن در خدمتم دوست عزیز وظیفه ای بیش نیست.

  17. #17

    نقل قول: استفاده از تابع random به همراه timer

    نقل قول نوشته شده توسط ناامید مشاهده تاپیک
    چشم.
    ولی من باید برم سرکار تا برگردم اگر دوستان راهنمایی نکردن در خدمتم دوست عزیز وظیفه ای بیش نیست.
    دوست عزیر بسیار ممنون خیلی لطف دارید. فقط من این پروژه رو باید تا چند ساعت دیگه تحویل بدم اگه از دوستان کسی راه حل مشکل منو داره خیلی خیلی ممنون میشم الان تنها مشکل برنامم همینه

  18. #18

    نقل قول: استفاده از تابع random به همراه timer

    private List<int> lstNumbers;
    private void CreateNumbers()
    {
    lstNumbers = new List<int>();
    for (int i = 100; i <= 200; ++i)
    { lstNumbers.Add(i); }
    }
    public Form1()
    {
    InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    CreateNumbers();
    }

    private void btnrandomnumber_Click(object sender, EventArgs e)
    {
    if (lstNumbers.Count == 0)
    {
    MessageBox.Show("اتمام قرعه کشی، تمامی اعضا انتخاب شده اند");
    }
    else
    {
    Random rand = new Random();
    int winner = rand.Next(0, lstNumbers.Count);
    txtRandomShow.Text = lstNumbers[winner].ToString();
    lstNumbers.RemoveAt(winner);
    }
    }
    }

تاپیک های مشابه

  1. مبتدی: استفاده ار تابع random در C#‎ windows form application
    نوشته شده توسط behradravanbod در بخش C#‎‎
    پاسخ: 2
    آخرین پست: دوشنبه 21 مهر 1393, 21:27 عصر
  2. پاسخ: 4
    آخرین پست: دوشنبه 09 دی 1392, 20:04 عصر
  3. فراخوانی randomize قبل استفاده از تابع رندم
    نوشته شده توسط aapalireza در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 1
    آخرین پست: چهارشنبه 28 دی 1390, 16:05 عصر
  4. استفاده تابع (random) در #c
    نوشته شده توسط raza852 در بخش C#‎‎
    پاسخ: 0
    آخرین پست: شنبه 14 آبان 1390, 17:13 عصر
  5. خطای Ambiguity در استفاده از تابع Sleep
    نوشته شده توسط orion188 در بخش برنامه نویسی با Borland C++‎ Builder
    پاسخ: 2
    آخرین پست: پنج شنبه 14 آبان 1383, 14:19 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •