PDA

View Full Version : سوال: چگونه از progressbar در حلقه ی for استفاده کنیم



4EBRAHIM4
چهارشنبه 29 شهریور 1391, 11:35 صبح
سلام دوستان من یه برنامه نوشتم که قرار با زدنbutton یه دستور for اجرا بشه وهمزمان با افزایش مقدار progressbar مقدارش در یه textbox نمای داده بشه اما فقط progressbar بیشتر میشه و در نهایت وقتی for تموم شد textbox تغیر میکنه چرااااااااااااااااا؟



( private void button1_Click(object sender, EventArgs e
}
(++for (int i = 0; progressBar1.Value < progressBar1.Maximum; i
}
;()progressBar1.PerformStep
;()textBox1.Text = progressBar1.Value.ToString
{
{

harani
چهارشنبه 29 شهریور 1391, 12:02 عصر
راستش من درست سوالتونو نفمیدم ولی ;()textBox1.Text = progressBar1.Value.ToString رو خارج از حلقه بنویس .ببین درست میشه .

abcd_a
چهارشنبه 29 شهریور 1391, 12:08 عصر
باز هم مشکلوشون کماکان پابرجاست ایشون میخود مثل یک شمارنده مقدار textBox تغییر بکنه

AmirGhasemi
چهارشنبه 29 شهریور 1391, 12:43 عصر
عزيزم بايد event Textbox Changed را شما override كني بدين صورت كه داخل حلقه متد overrideآن را صدا كند
دقيقا كدي براي اين كار تا بحال ننوشته ام اما راهش اين طوري است!

abcd_a
چهارشنبه 29 شهریور 1391, 13:42 عصر
به نظر من با یک تایمر هم متونی به راحتی این کار انجام بدی به صورت زیر

private void timer1_Tick(object sender, EventArgs e)
{
progressBar1.PerformStep();
textBox1.Text = progressBar1.Value.ToString();

}

private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true;
}

danialafshari
چهارشنبه 29 شهریور 1391, 14:44 عصر
بهترین کار استفاده از تایمر و بعد از پایان کار آن را False می کنی

cpppro
چهارشنبه 29 شهریور 1391, 17:48 عصر
سلام
از این مثال استفاده کنین.با استفاده از ترد میتونین صفحه رو بروز رسانی کنین ( بدون قفل شدن )

http://www.8pic.ir/images/r6z3hhv555ehjpdti0c.zip

ali_habibi1384
چهارشنبه 29 شهریور 1391, 18:27 عصر
چون بايد از ترد استفاده كني. وقتي به پروسه سنگين بر خورد ميكنه UserInterFace لاك ميشه تا پروسه تموم بشه.
اگر ميخواي خودتو درگير ترد نكني ميتونو حلق رو توي تايمر پياده سازي كني اگر كدهات اجازه بده.

abcd_a
چهارشنبه 29 شهریور 1391, 18:49 عصر
اگر به پست دقت کرده باشید و کدی که گذاشتند ایشون می خواد مقدار پیشرفت Progressbar تو textBox نمایش داده با استفاده از تایمیر نیازی به حلقه نیست

ali_habibi1384
چهارشنبه 29 شهریور 1391, 19:28 عصر
اگر به پست دقت کرده باشید و کدی که گذاشتند ایشون می خواد مقدار پیشرفت Progressbar تو textBox نمایش داده با استفاده از تایمیر نیازی به حلقه نیست
دقيقا. واسه همين گفتم حلقه رو به تايمر تبديل كنند

h_r_sh
چهارشنبه 29 شهریور 1391, 22:21 عصر
بهتره از BackgroundWorker استفاده کنید. البته کد زیر هم کار می کنه:

private void RunWorker(int someValue)
{
this.progressBar1.Maximum = someValue;
for (int i = 0; i < someValue; i++)
{
Application.DoEvents();
this.txtID.Text = i.ToString();
this.progressBar1.Value++;
}

}