PDA

View Full Version : سوال: ساخت loading



es.es.es
جمعه 10 آذر 1391, 17:34 عصر
سلام دوستان یه سوالی دارم میخوام بدونم میشه یه progressbar داشت که وقتی یه فرم جدید باز میکنیم تا زمانی که فرم جدید میخواد باز بشه پر بشه مثل یه لودینگ

masoodz
جمعه 10 آذر 1391, 17:43 عصر
سلام دوست من
یه progressbar بذار و یه تایمر . بعدش زمانی رو که می خوای برای لود بذاری با توجه به تاخیر برنامت برای تایمر تعریف کن و بعد کار تایمر فرمت رو show کن
موفق باشی
سلام دوستان یه سوالی دارم میخوام بدونم میشه یه progressbar داشت که وقتی یه فرم جدید باز میکنیم تا زمانی که فرم جدید میخواد باز بشه پر بشه مثل یه لودینگ

Y_Safaiee
جمعه 10 آذر 1391, 17:45 عصر
سلام دوست من

آره یه BackgroundWorker بزار,تو رویداد DoWork کد هاتو بنویس,تو رویداد Complet ش هم بگو فرم لود شده رو نشونش بده.توسط e.percent هم درصد روند کارو برگشت بده.

مثلا این کد مبتدی ترین کد ممکنه :


private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}


private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int a = 0; a <= 500; a++)
{
label1.Text += a.ToString() + ",";
int v = (a * 100) / 500;
progressBar1.Value = v;
}
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Write Complete");
}


موفق باشی
بایت بایت

es.es.es
جمعه 10 آذر 1391, 23:04 عصر
سلام دوست من

آره یه BackgroundWorker بزار,تو رویداد DoWork کد هاتو بنویس,تو رویداد Complet ش هم بگو فرم لود شده رو نشونش بده.توسط e.percent هم درصد روند کارو برگشت بده.

مثلا این کد مبتدی ترین کد ممکنه :


private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
}


private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int a = 0; a <= 500; a++)
{
label1.Text += a.ToString() + ",";
int v = (a * 100) / 500;
progressBar1.Value = v;
}
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Write Complete");
}


موفق باشی
بایت بایت

دوست عزیزم این کد کار نمیکنه وقتی میخواد تکست lable رو تغییر بده یه اررور عجیب میده
فقط میخوام بدونم چطوری زمانی که طول میکشه تا کار انجام بشه رو حساب میکنه
بعد این control.checkfor... چیه

Y_Safaiee
جمعه 10 آذر 1391, 23:30 عصر
با سلام خدمت شما

شما :


Control.CheckForIllegalCrossThreadCalls = false;


رو در فرم لودت بنویس مشکلی پیش نمیاد,این کد باعث میشه اگه اروری تو دسترسی نامجاز در ترد ایجاد شد به اون دقت نکنه,اگه کد فوق رو ننویسی به اینکه a رو توی لیبل بنویسه گیر میده.

نحوه ی حسابشم که راحته طبقه فرموله بالاست.(int v = (a * 100) / 500;) اگه a برسه به 5 * 100 میشه که میشه 500 / 500 میشه که میشه 1 ,پس پروگرس 1 درصد میشه.

شیوه کلی محاسبه هم اینه :

(میزان خوانده شده * 100 ) تقسیم بر کل حجم

موفق باشی
بایت بایت

es.es.es
شنبه 11 آذر 1391, 00:23 صبح
آره شیوه محاسبه درصد رو که فهمیدم این که چطور میفهمه تا زمان کار بعدی باید پر بشه رو نفهمیدم