سلام
مخوام توی صفحه برنامم یه تایمر بگذارم که وقتی کاربر یه کلید رو کلیک می کنه شروع بکار کنه و وقتی دوباره همون کلید رو می زنه تایمر بایسته
Printable View
سلام
مخوام توی صفحه برنامم یه تایمر بگذارم که وقتی کاربر یه کلید رو کلیک می کنه شروع بکار کنه و وقتی دوباره همون کلید رو می زنه تایمر بایسته
تایمر دو تا متد داره به نام start و stop و همینطور می تونی از enable هم استفاده کنی
همونطور که گفتند تایمر همه چیز داره البته اگه بدونی که اینجوریه ;-)
Timer mytimer = new Timer();
mytimer.Start();
ممنون ،اما من این دستورات رو بلدم
چه طور باید روی صفحه زمان رو نشون بدم؟
می تونی یک لیبل بزاری و یک عدد تعریف کنی در هر بار تیک زدن تایمر به اون یک واحد اضافه کنی
می شه دستورشو واسم بنویسین
من زیاد آشنا نیستم
هر تایمر یه Tick داره که میگه هر چند میلی ثانیه تابع Tick تایمر اجرا بشه اول باید اونو تنظیم کنی
بعد تو رویداد Tick تایمر هر کاری که خواستی میذاری مثلا اگه تیک 1000 میلی ثانیه باشه باید تو رویداد تیک مثلا متغیر second رو که قبلا تعریف کردی +1 کنی و تو label نشون بدی.
حالا تو رویداد کلیک یه دکمه timre.Start رو فراخونی میکنی که باعث میشه تایمرت شروع به کار بکنه و بطور اتوماتیک تو هر زمان که بعنوان تیک داره خودشو فراخونی میکنه و second رو +1 میکنه و تو label نشون میده.
هر موقع هم خواستی تایمرت متوقف بشه از timer.Stop استفاده میکنی
سلام به همه دوستان
من تا بحال با تایمر کار نکردم ولی چیزی که هست اینه که چطور میشه توی همون رویداد Click دو کار رو با هم انجام داد؟ وقتی Buttonکلیک بشه رویداد کلیک اجرا میشه اما چطوری میشه در یک رویداد هم Start و هم Stop رو انجام داد.اگه راهنمایی کنید ممنون میشم.
موفق باشید
می تونی از شرط استفاده کنی . اگر شرط درست بود استارت کنه و اگر نه استاپ کنه .نقل قول:
نوشته شده توسط sianooshonline
با سلام
ممنون از راهنماییتون اما این یک مورد بدیهیه که باید از شرط استفاده کرد.
اما دراین مورد میشه بگین چجوری ازش استفاده میکنین؟
اگه راهنمایی کنید ممنون میشم.
موفق باشید
bool start = true;حالا تو رویداد کلیک :
void myFn(bool startState)
{
if(start == true )
{
start = false;
//codes here
}
else if( start == false)
{
start = true;
//codes here
}
}
MyFn(start);
به همین سادگی!!!:لبخند:
به هر حال مرسی
موفق باشید
ساده نبود مگه؟ :متعجب: :لبخند:
خدایی ساده بود دیگه :لبخند:
سلام جناب Bermooda
ممنون از اینکه راهنمایی کردید . چرا خیلی ساده بود .آخه خودم این رو میتونستم حدس بزنم
اما دنبال راه بهتری بودم.
اما به هرحال از راهنماییتون بسیار ممنونم.
موفق باشید
آیا با هر بار کلیک نباید statrt=!start بشه؟
اینجور که نوشتین همیشه حالت true داره
البته میشد کار رو ساده تر انجام داد ، اما برای درک بهتر فکر کنم اینجوری بهتر باشه.
همونطور که گفتم میشه با کد کمتری این کار رو کرد
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool startinfo;
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
if (label1.Text == DateTime.Now.ToLongTimeString())
{
startinfo = false;
Set(startinfo);
}
else
{
startinfo = true;
Set(startinfo);
}
}
private void Set(bool started)
{
if (started)
{
started = false;
timer1.Start();
}
else if (started == false)
{
timer1.Stop();
}
}
}
}
موفق باشید
روش درست و منطقی همینه .نقل قول:
نوشته شده توسط Mega7000
value=!value
کد بالا هم کار میکنه اما بهترین روش به نظر من اینه :
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
}
}
}
البته من نمیدنوستم که منظور نوشتن کد بهینه هست !! شرمنده :لبخند:
با تشکر از دوستان
اما من می خوام که مثل یه تایمر کار کنه(کرنومتر)، نه اینکه ساعت سیستمو نشون بده
به جای ساعت سیستم می تونی یک متغیر از نوع int تعریف کنی و با هر بار تیک از اون کم یا زیاد کنی و در لیبل نشون بدی .نقل قول:
نوشته شده توسط Mega7000
سوالای سخت سخت می پرسی ها :بامزه:
اگه بلد بودم نمی پرسیدم!!!
هز تابع tick چطور باید استفاده کرد؟
خوب اینم مثل همیناس که دوستان گفتن !!!
نمی دونم واقعا اینجا دوستان می خوان چیزی بهم دیگه یاد بدن یا اینکه سوادشونو به رخ هم بکشن؟
یا درست جواب بدین و کمک کنین یا لطفا انقدر مزه نندازین
یک تایمر روی فرم قرار دهید . خاصیت interval اون رو 1000 تنظیم کنید . روی timer کلیک کنید وارد رویدادی به نام timer_tick خواهید شد . هر کدی درون این رویداد می نویسید هر 1 ثانیه یکبار تکرار می گردد . مثلا یک متغیر public تعریف کنید و درون ْآن مثلا بنویسید اگر مثلا اسمش رو x گرفتید بزنید ++x . در هر 1 ثانیه 1 واحد به اون اضافه میشه.
حالا یک کلید بزارید روی صفحه و درون اون تایمر رو start کنید . مقدار int رو به text یک label نسبت بدین . حالا از لحظه start مرطبا یکی بهش اضافه می شه . هر موقع هم خواستین با یک کلید دیگه stop کنید . یا همون کلید رو بعد از start تبدیل به کلید stop کنید . اینکار رو با یک شرط انجام بدین وقتی start میشه یک متغیر رو true کنید و چک کنید اگه true بود روال stop اجرا بشه . اگه سوال دیگه ای دارید . بپرسید
ممنون ازتون
یه سوال:
آیا تا قبل اینکه دستور timer1.stop() اجرا بشه،تایمر عددها رو تو label نشون میده؟
Mega7000 ,
دوست من همه بچه ها سعی میکنند چیزی بهم یاد بدهند ولی گاهی به دلیل اینکه فکر میکنند طرفشون اون موضوع رو بلد هست با یک اشاره رد میشن.
فکر کنم جواب آخر کامل بود.
تا قبل از ()timer1.stop هرچی داخل اون رویداد نوشته شده باشه (مثل تغییر لیبل) انجام میشه.نقل قول:
آیا تا قبل اینکه دستور timer1.stop() اجرا بشه،تایمر عددها رو تو label نشون میده؟
دوست من چیزی که گفتم رو امتحان کنید . قطعا به نتیجه خواهید رسید
بله تو هر بار تیک تایمر اون کدهایی که نوشتی اجرا میشن مگه اینکه کاذایی باشن که نیاز به زمان زیادی واسه اجرا دارن که اینجا بحث threading پیش میاد
فکر می کنم برنامه من مشکلش همین باشه،یعنی زمان زیادی طول می کشه
حالا اگه بخوام از threading استفاده کنم...
چطور؟
threading دیگه به این سادگیها نیست . یکم زمان بره
اگه بگی دقیقا چی میخوای درست کنی شاید بهتر راهنمایی بشی.
شاید یه فرم میخوای که چندتا کار انجام بده و تو این مدت زمان (انجام کارها) رو حساب کنه!
من چند ساله سابقه تدریس دارم . وضعیت افراد زود دستم میاد مبحث تردها الان برای ایشون یک زوده.
ممنون آقای "عفت بزرگه"
همون طوری که آقای once4ever اشاره کردن:"یه فرم میخوای که چندتا کار انجام بده و تو این مدت زمان (انجام کارها) رو حساب کنه!"،کار من هم اینطوریه
ولی باید یاد بگیرم چون کارمو باید بزودی تحویل بدم.
اگه راهنماییم کنید ممنون می شم
خوب برای شروع بگو چه کارهایی میخوای انجام بشه؟
بعضی کارها تو thread خیلی آسونه و بعضی کارها خیلی پیچیده.
یعنی چی چه کارهایی انجام بشه؟دقیقا چی رو واستون بگم؟
می شه واضح تر بگین
مثلا میخوای کنترلی رو تغییر بدی ( لیبل تکست باکس و ...)
یا میخوای یک دیتا ستی رو پر کنی و...
اول یه فایل متنی می خونه از جایی و در یه لیست باکس نشون داده می شه،بعد یک سری محاسبات ریاضی انجام می شه و در همین حین یک سری اشکال گرافیکی کشیده می شه و دوباره پس از هر محاسباتی ریاضی این اشکال اصلاح شده و باز کشیده می شه...
حالا من یه چیزی مثله کرنومتر می خوام که این مدت زمان انجام این اعمال رو از اول تا پایان حساب کنه و نشون بده
1- با همون تایمر هم میشه
2- از کجا فهمیدین من آقا هستم ؟ تو رو خدا بگید
خوب وقتی کارت شروع میشه تایمرت رو استارت کن و وقتی تموم میشه تایمرت رو استوپ! کن.
یعنی شما آقا نیستید؟! :چشمک:نقل قول:
2- از کجا فهمیدین من آقا هستم ؟ تو رو خدا بگید
آخه از روی عفت بزرگه چطوری آخه ؟
خب این طوری نمی شه،من امتحان کردم چون بار برنامه خیلی زیاده
حالا می شه بجای بحث threading رو توضیح بدین
یعنی چی بار برنامه زیاده؟
thread نمیاد کارهاتو کم کنه. بلکه میتونی همزمان چندتا کار انجام بدی یا اینکه انجام دادن یه کاری (بستگی به نوع کار داره) مانع ادامه پیدا کردن برنامه ات نشه.
یعنی اینکه حجم عملیات ها زیاده و بار زیادی روی دوش سیستم....
تو تالار C# در این مورد مطالب خوبی هست که واسه مقدمه بهتره بخونین در ضمن این لینکها هم میتونن مفید باشن:
http://msdn2.microsoft.com/en-us/library/ms173178.aspx
http://www.codeproject.com/csharp/threader.asp
فکر کنم این مشکل شما با TimerCallBack حل بشه ( اینم از مباحث threading هستش) ایتارو ببین
http://geekswithblogs.net/geekusconl.../29/80009.aspx
Timer t = new Timer();
int delay = 1000;
int counter = 0;
private void Form1_Load( object sender , EventArgs e )
{
t.Interval = delay;
t.Tick += new EventHandler( shower );
//t.Enabled = true;
}
void shower( object sender , EventArgs e )
{
label1.Text = ( ++counter ).ToString();
}
private void button1_Click( object sender , EventArgs e )
{
if ( t.Enabled )
t.Stop();
else
t.Start();
}
با کمال احترام به همه اساتید من فکر کنم این روش از همه بهتر باشه حالا بسته به جایی که میخواد استفاده بشه میشه تغییرش دادnamespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToLongTimeString();
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = !timer1.Enabled;
}
}
}