PDA

View Full Version : به نظر شما چطوري اين فرم ها را با تايمر اجرا كنم



csharpprogramer88
پنج شنبه 21 مرداد 1389, 00:38 صبح
ميخوام زماني كه برنامه run شد به مدت 5 دقيه سه فرم را بصورت گردشي اجرا كنم و حالا ميخوام پس از 5 دقيقه اون سه فرم (به جز فرم اصلي ) hide بشه يعني هيچكدام از اون فرم ها نمايش داده نشن و اون روال ديگه اجرا نشه و به مدت 5 دقيقه ميخوام يكي از فرم هاي ديگه (كه هيچ كدام از اون سه تا نيست )به بمدت 5 دقيقه اجرا بشه و پس از طي 5 دقيقه دوباره روال قبلي شروع بشه و تا زماني كه برنامه run است به همين صورت 5 دقيقه 5 دقيقه عوض بشه .
دوستان عزيز نظر شما هم مفيده ولي اگر كد يا پروژه مشابه هم داريد بفرستيد

vandermond
پنج شنبه 21 مرداد 1389, 00:43 صبح
دوست عزيز
اين كارها رو با تايمرت درست كن و هر وقت خاستي Visible ش رو true و هر وقت خاستي false كن. سخت نيست زياد ولي باز هم اگه نتونستي بنويسي(كه حتما ميتوني) بگو كه كد بزارم:چشمک:

csharpprogramer88
پنج شنبه 21 مرداد 1389, 03:53 صبح
دوست عزيز سلام
اگر ممكنه كد بگذاريد
به اين نكته دقت كنيد كه اول اون سه تافرم 5 دقيقه شو ميشه و دقيقا پس از سپري شدن اين 5 دقيقه اون فرمي كه بايد 5 دقيقه شو بشه مياد و شو ميشه حالا امكانش هست كه هر كدام از اون سه فرم شو باشه يا تازه ميخواد شو بشه و ...

vandermond
پنج شنبه 21 مرداد 1389, 08:30 صبح
ميخوام زماني كه برنامه run شد به مدت 5 دقيه سه فرم را بصورت گردشي اجرا كنم و حالا ميخوام پس از 5 دقيقه اون سه فرم (به جز فرم اصلي ) hide بشه يعني هيچكدام از اون فرم ها نمايش داده نشن و اون روال ديگه اجرا نشه و به مدت 5 دقيقه ميخوام يكي از فرم هاي ديگه (كه هيچ كدام از اون سه تا نيست )به بمدت 5 دقيقه اجرا بشه و پس از طي 5 دقيقه دوباره روال قبلي شروع بشه و تا زماني كه برنامه run است به همين صورت 5 دقيقه 5 دقيقه عوض بشه .
دوستان عزيز نظر شما هم مفيده ولي اگر كد يا پروژه مشابه هم داريد بفرستيد
دوست عزيز
اون سه فرمي كه اول دارن گردشي اجرا ميشن بدون فاصله و سريع اين كار انجام ميشه يا مثلا با تاخير 2 ثانيه خوبه. (ميگم يعني 5 دقيقه هر كدوم اجرا ميشن يا كلا اين روال 5 دقيقه طول بكشه؟)

csharpprogramer88
پنج شنبه 21 مرداد 1389, 10:26 صبح
دوست عزيز
اون سه فرمي كه اول دارن گردشي اجرا ميشن بدون فاصله و سريع اين كار انجام ميشه يا مثلا با تاخير 2 ثانيه خوبه. (ميگم يعني 5 دقيقه هر كدوم اجرا ميشن يا كلا اين روال 5 دقيقه طول بكشه؟)


سلام
تشکر که جواب دادی
زمانی که برنامه اجرا میشه یک فرم از اون سه فرم اجرا میشه و بمدت 15 ثانیه show میشه و دوباره فرم دوم 15 ثانیه و فرم سوم 15 ثانیه و بازم از اول حالا این روال فقط باید 5 دقیقه اجرا بشه یعنی از زمانی که برنامه جرا شده فقط 5 دقیقه این روال اجرا میشه حالا پس از 5 دقیقه یک فرم (شامل اون سه فرم نیست و یک فرم جدیده ) بمدت 5 دقیقه اجرا بشه و پس از اینکه 5 دقیقه این فرم اجرا شد حالا دوباره روال اول اجرا بشه و پس از 5 دقیقه روال اولی ...
ابه این صورت تا آخر اجرا بشه
با تشکر

vandermond
پنج شنبه 21 مرداد 1389, 13:45 عصر
دوست عزيز
اين برنامه خودت هستش كه روش يه خورده كار كردم. البته روشهاي بهتري هم ميتوني استفاده كني. مثلا به جاي اينكه براي هر فرم يك تايمر بزاري ميتوني يك تايمر كلي بزاري تو فرم اصلي و با ايجاد خاصيت به اون مقدار مورد نظر رو بدي يا بگيري و.....

vandermond
پنج شنبه 21 مرداد 1389, 17:10 عصر
خوب بيد.....؟؟؟
اگه مشكلي بود بگو. راستي يادم رفته بود بگم. من براي اينكه تست كردن برنامه آسون باشه Interval ها رو كوچيك گذاشته بودم. خودت درستشون كن.:چشمک:

csharpprogramer88
جمعه 22 مرداد 1389, 10:12 صبح
سلام به برنامه نويسان محترم
كدي را كه دوستمون جناب vandermond فرستادند يك مشكل داره لطفا بررسي كنيد

كدي را كه فرستادند در حالت معمولي جواب ميده ولي يه مشكلي كه وجود داره اينه كه من در يكي از از فرم ها (مثلا فرم 3) با يك كوئري يك سري تصاوير را از بانك ميخونم و در يك ليست ميريزم و حالا با يك شرط هر دفعه كه اين فرم فرخواني ميشه تصوير بعدي نمايش داده ميشه ولي شما كه فرم را close ميكني اطلاعات مربوط به اون ليست از بين ميره و ايندكسي كه تعريف كردم و شماره تصوير را نگهداري ميكنم براي اينكه هي تصوير بعدي نشان داده بشه با لود شدن دوباره فرم صفر ميشه و ليست تصاوير دوباره از تصوير اول شروع ميشه كه اين يك مشكل اساسي منه

vandermond
جمعه 22 مرداد 1389, 11:34 صبح
دوست عزيز
به صورت پ خ هم بهتون گفتم كه روش هر فرم يك تايمر خوب نيست و ميشه بهترش كرد. ولي براي اين هم ميتونيد شماره Index آخرين تصويري كه نمايش داده شده رو توي يك متغير پابليك بريزي و بعد ازش استفاده كني.

بقيه اساتيد هم نظر بدن.

debugger
جمعه 22 مرداد 1389, 12:59 عصر
نمی دونم داری چی می نویسی ؟ ولی اینو میدونم که این روش اصلا اصولی نیست .

سوال اولی که در ذهن من ایجاد شده . شما میخوای یکسری تصاویر که در دیتا بیس هست را هر 5 دقیقه نمایش بدی ایا برای این کار 3 تا فرم لازم هست ؟؟؟؟؟؟؟؟؟

mahdi87_gh
جمعه 22 مرداد 1389, 20:29 عصر
براي اين هم ميتونيد شماره Index آخرين تصويري كه نمايش داده شده رو توي يك متغير پابليك بريزي و بعد ازش استفاده كني.

این روش جواب خواهد داد

شما میخوای یکسری تصاویر که در دیتا بیس هست را هر 5 دقیقه نمایش بدی ایا برای این کار 3 تا فرم لازم هست ؟؟؟؟؟؟؟؟؟
بنابر گفته جناب دیباگر و همچنین نظر خودم، شما مشخص کنید که هدف اصلیتان از این کار چیه؟؟ اونوقت باهم بدنبال یک روش اصولی برای رسیدن به هدف باشیم

csharpprogramer88
جمعه 22 مرداد 1389, 21:19 عصر
این روش جواب خواهد داد

بنابر گفته جناب دیباگر و همچنین نظر خودم، شما مشخص کنید که هدف اصلیتان از این کار چیه؟؟ اونوقت باهم بدنبال یک روش اصولی برای رسیدن به هدف باشیم

سلام
دوست عزيز من سه فرم در پروژه دارم يك فرم تصويري را نشان ميده و فرم دوم تاريخ سيستم را به شمسي نشان ميده و فرم سوم ساعت سيستم را نشان ميده
حالا ميخوام هر كدام از اين سه فرم 15 ثانيه نمايش داده بشه و اين روال پس از اجراي برنامه بمدت 5 دقيقه ادامه پيدا ميكنه حالا پس از 5 دقيقه يك فرم ديگه اي اجرا ميشه كه به تنهايي 5 دقيقه نمايش داده ميشه و يك كليپ ويدئويي را نشان ميده پس از 5 دقيقه ويدئو دوباره روال اولي شروع ميشه و ... .
من بيشتر كار را انجام دادم ولي چون با تايمر و شو و هايد فرم زياد وارد نبودم مشكلاتي پيش آمد البته اين چيزي كه الان دارم چيزي نيست كه نظر منو جلب كنه دوستان اگر لطف كنن چنين چيزي را طراحي كنند و بفرستند كمك بزرگي را به من ميكنند البته همانطور كه گفتم بيشتر كار را انجام دادم ولي ميخوام كارم بهتر در بياد كه از دوستان عزيز درخواست كمك دارم .

mahdi87_gh
جمعه 22 مرداد 1389, 21:29 عصر
دوست عزیز بنظر من راه حل آسونتر و بی دردسر تر برای اینکار اینه که شما یک فرم بیشتر نداشته باشید!!
در عوض برای انجام هر یک از چهار کار گفته شده (ساعت و ...) از یک panel استفاده کنید. همه پنلها را در یک موقعیت یکسان مستقر کنید و تنها با یک تایمر(!!!) و چند تا شرط پنل دلخواهتون رو نمایش داده و سایر پنل ها رو مخفی کنید
اگر در انجام این کار دچار مشکل شدید، بگید تا در نوشتن کدش کمک کنم

vandermond
جمعه 22 مرداد 1389, 22:35 عصر
دوست عزیز بنظر من راه حل آسونتر و بی دردسر تر برای اینکار اینه که شما یک فرم بیشتر نداشته باشید!!
در عوض برای انجام هر یک از چهار کار گفته شده (ساعت و ...) از یک panel استفاده کنید. همه پنلها را در یک موقعیت یکسان مستقر کنید و تنها با یک تایمر(!!!) و چند تا شرط پنل دلخواهتون رو نمایش داده و سایر پنل ها رو مخفی کنید
اگر در انجام این کار دچار مشکل شدید، بگید تا در نوشتن کدش کمک کنم
اين روش خيلي بهتره چون ديگه مشكل دسترسي و ..... هم نخواهيد داشت. در ضمن من از اول فرض رو بر چند فرمي گذاشته بودم كه اون برنامه رو دادم. و الا اين روش بهتره.

mahdi87_gh
شنبه 23 مرداد 1389, 05:05 صبح
دوست عزیز این هم نمونه برنامه. کافیه فقط عدد ها رو تغییر بدید

mahdi87_gh
یک شنبه 24 مرداد 1389, 20:39 عصر
با سلام
دوست عزیز از کد int sum_of_secounds = 5 + 5 + 5 + 15; استفاده کردم چون شما چهار کار مختلف میخواستید انجام بدید که من برای 3 تا 5 ثانیه و برای آخری 15 ثانیه در نظر گرفتم


اين شرط را بيشتر توضيح بديد و بگيد چرا دوباره sec = 0وجود ++ قبل از متغیر sec یاعث افزایش مقدار متغیر قبل از بررسی شرط می شود. و چون برنامه شما بطور مستمر در حال اجراست و یک روند تکراری را انجام میدهد و همچنین بخاطر اینکه ما تنها از یک تایمر استفاده کرده ایم، باید پس از انجام یک دوره این روال را از نو شروع کنیم، پس sec=0 (بجای اینکه بیایم تایمر رو عیرفعال و دوباره فعال کنیم)
( اگر بخواهیم زمان گذشته از شروع بکار تایمر را در نظر بگیریم، این مقدار همواره رو به افزایش است و نمیتوانیم از آن در شرط هایمان استفاده کنیم.)

panel1.Visible = sec < 5;
panel2.Visible = sec >= 5 && sec < 10;
panel3.Visible = sec >= 10 && sec < 15;
panel4.Visible = sec >= 15 && sec < 30; همانطور که می دانید نتیحه یک عبارت شرطی مقداری از نوع بولین خواهد بود. پس برای صرفه جویی در حجم کدها و همچنین تسریع اجرای کد از این روش کد نویسی استفاده کرده ام. همانطور که میدانید دستورات شرطی(if) نسبت به دستورات دیگر زمان بیشتری برای اجرا لازم دارند
موفق باشی

mahdi87_gh
پنج شنبه 28 مرداد 1389, 22:00 عصر
از روی همون برنامه قبلی که بهتون داده بودم برید و این تغییرات رو اعمال کنید

int sum_of_secounds = 10*60;
کد تایمر رو بصورت زیر عوض کنید

if (++sec > sum_of_secounds)
sec = 0;
if (sec < 300)
{
panel1.Visible = ((sec / 15) % 3 == 0);
panel2.Visible = ((sec / 15) % 3 == 1);
panel3.Visible = ((sec / 15) % 3 == 2);
panel4.Visible = false;
}
else
{
panel1.Visible = false;
panel2.Visible = false;
panel3.Visible = false;
panel4.Visible = true;
}