با سلام
آیا راه دیگه ای به جز تایمر هست که بشه با اون یک کنترل رو در فرم بصورت متحرک در آورد.یعنی آروم آروم از یک جا به جای دیگه بره؟
ممنون
Printable View
با سلام
آیا راه دیگه ای به جز تایمر هست که بشه با اون یک کنترل رو در فرم بصورت متحرک در آورد.یعنی آروم آروم از یک جا به جای دیگه بره؟
ممنون
سلام
میتوانید از یک حلقه استفاده کنید و در هر بار اجرا ادامه برنامه را برای مدت کوتاهی متوقف کنید که بهتر است از چند thread استفاده کنید تا کار برنامه مختل نشود. به این کد دقت کنید:
void MoveButton1()
{
for (int i = 0; i < System.Windows.Forms.Screen.PrimaryScreen.Bounds.W idth; i++)
{
button1.Left = i;
System.Threading.Thread.Sleep(10);
}
}
به نظر شما بهترین راه واسه اینکار چیه؟تایمر طوری که می خوام عمل نمی کنه.وقتی inteval رو پایین ترین مقدار می دم باز هم سرعتش پایین تر از اون چیزیه که من می خوام.وقتی هم در اون interval از مکان باتون را چند تا چند تا عوض می کنم به صورت تکه تکه تغییر مکان میده و دیگه حالت روان حرکت کردن نداره.
بهترین شیوه رو M.safa نوشتند، اما اگر کار دیگری در حین این انتقال باید انجام بشه که با این روند تداخل داره، از BackgroundWorker کمک بگیرید.
ضمیمه 90629
سلام.
من کد زیر رو تو backgroundworker نوشتم و خطا داد.میشه راهنمایی کنید که مشکل از کجاست
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (backgroundWorker1.CancellationPending == false)
{
backgroundWorker1.ReportProgress(0);
System.Threading.Thread.Sleep(speed);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (lbc.Text == "0")
{
if (panel1.Location.X > 4)
{
Point p = new Point();
p.X = panel1.Location.X - 5;
p.Y = panel1.Location.Y;
panel1.Location = p;
p.X = txtname.Location.X - 5;
p.Y = txtname.Location.Y;
txtname.Location = p;
p.X = lbname.Location.X - 5;
p.Y = lbname.Location.Y;
lbname.Location = p;
}
else
timer1.Enabled = false;
}
if (lbc.Text == "1")
{
if (panel2.Location.X > 4)
{
Point p = new Point();
p.X = panel2.Location.X - 2;
p.Y = panel2.Location.Y;
panel2.Location = p;
p.X = lbsq1.Location.X - 2;
p.Y = lbsq1.Location.Y;
lbsq1.Location = p;
p.X = txtsq1.Location.X - 2;
p.Y = txtsq1.Location.Y;
txtsq1.Location = p;
}
else
timer1.Enabled = false;
}
}
و خطای زیر رو داد
This BackgroundWorker states that it doesn't report progress. Modify WorkerReportsProgress to state that it does report progress.
واقعا ازتون ممنون