نمایش نتایج 1 تا 18 از 18

نام تاپیک: روش فعال ماندن timer بعد از رفتن به فورم دیگر

  1. #1
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    روش فعال ماندن timer بعد از رفتن به فورم دیگر

    با سلام و درود مشکل از اینجا شروع میشه فرض کنید یه تایمر داریم برای محاسبه کردن ( حالا هر چیزی باشه ) وقتی که به صفحه دیگه ای از برنامه می رم بر می گردم تایمر غیر فعال شده خلاصه انگاری تازه می خوام از اول شروع کنم
    لطفا اگه راهی هست که بعد از رفتن به from های دیگه تایمر غیر فعال نشه ممنون میشم توضیح بدید که چجوری هست خیلی گشتم به نتیجه نرسیدم

    تشکر

  2. #2

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    چجور برمیگردی؟ کد بزار.
    اختمالا یک نمونه جدید از فرم دارای تایمر میسازی.

  3. #3

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    با سلام و درود مشکل از اینجا شروع میشه فرض کنید یه تایمر داریم برای محاسبه کردن ( حالا هر چیزی باشه ) وقتی که به صفحه دیگه ای از برنامه می رم بر می گردم تایمر غیر فعال شده خلاصه انگاری تازه می خوام از اول شروع کنم
    لطفا اگه راهی هست که بعد از رفتن به from های دیگه تایمر غیر فعال نشه ممنون میشم توضیح بدید که چجوری هست خیلی گشتم به نتیجه نرسیدم

    تشکر
    وقتی فرم جدید رو بصورت Modal باز می کنید (با ShowDialog)، روال پاسخگویی به رخداد های اون فرم قبلی متوقف میشه و تیک Timer هم که میخواد به همین طریق به پنجره فرم قبلی اطلاع داده بشه به همین ترتیب از کار می افته.
    راه حل زیاد دارید. مثلا اون تایمر رو در یک نخ جدید اجرا کنید که مستقل از نخ فرم هاتون باشه، که اصلا برایش مطرح نباشه که چه فرمی فعال ئه.
    یا اینکه فرم بعدی رو بصورت Modal باز نکنید، یعنی Show کنید، نه ShowDialog تا رخداد های فرم قبلی همچنان به روال عادی دریافت بشن.
    اگه برای ساختن نخ در انجمن Task و BackgroundWorker و Thread رو جستجو کنید مثال زیاد پیدا می کنید.

  4. #4

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    چجور برمیگردی؟ کد بزار.
    اختمالا یک نمونه جدید از فرم دارای تایمر میسازی.
    ظاهرا میان فرم شون رو ShowDialog میکنن و در ادامه میخوان Timer ای رو Enabled کنن تا کاری رو براشون در این فاصله انجام بده. می بینند که بعد بسته شدن فرم تازه سطر بعدی کد اجرا میشه و تازه میخواد Timer شروع به کار کنه.

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    ممنون از همگی اما بزارید بیشتر توضیح بدم
    می خوام تایمر که فعال در بک گرند برنامه همچنان فعال بمونه مثال در صفحه اول یک تایمر دارم کار خاصی نمی کنه فقط داره فرضا ( شمارنده هست ) وقتی به صفحه دوم میرم و بازم به صفحه اول برمی گردم ( رفتن به صفحات به صورت تب هست البته تب رو به صورت کاستوم و اختصاصی خودم ساختم ) یعنی از تب کنترل خوب ویژوال استفاده نکردم
    وقتی به تب دوم می رم و بعد بر می گردم تایمر صفحه اول غیر فعال شده

    می خوام تایمر همچنان به کارش ادامه بده تا زمانی که خودم رو دکمه توفق کلیک کنم

    فرمودید یه نخ بسازید دنبالشو می گیرم به شدت اگر شما هم چند لینک دارید که بتونه کمکی در این زمینه به من بکنه ممنون میشم راهنمایی کنید

    یک نکته نمی خوام از ShowDialog استفاده کنم چون به صورت تب مانند ساختم قرار هر تب در جایی که براش تعریف کردم باز بشه نه اینکه هر کدوم به صورت جداگانه باز شن

      
    Setting frm = new Setting();
    Control[] Control = frm.Controls.Find("textBox1", false);
    if (Control.Length != 0)
    {
    TextBox textBox = (TextBox)Control[0];
    price = Convert.ToDouble(textBox.Text) / 3600;
    timer += 1;
    sec += 1;
    if (sec > 59)
    {
    min += 1;
    sec = 0;
    if (min > 59)
    {
    hour += 1;
    min = 0;
    }
    }
    label4.Text = hour + ":" + min + ":" + sec;

    label3.Text = Convert.ToString(Convert.ToInt32(price * (timer / 1)));
    }

    else
    {
    timer1.Enabled = false;
    MessageBox.Show("نمی توانید فیلد قیمت را خالی بگذارید لطفا مجددا سعی نکنید ", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }

    کد های فوق شروع و محاسبه تایمر رو نشون میده

    ( فیلد قیمت تو یه صفحه دیگه هست که به این صفحه دسترسی دادم کاربر قیمت رو در صفحه دوم وارد می کنه در این صفحه هم ست میشه )


    الان دقیقا می خوام این کد ها به صورت همیشگی فعال باشه تا زمانی که کاربر رو دکمه stop کلیک کنه
    آخرین ویرایش به وسیله esmael_g : جمعه 18 بهمن 1398 در 10:11 صبح دلیل: کد

  6. #6

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    ممنون از همگی اما بزارید بیشتر توضیح بدم
    می خوام تایمر که فعال در بک گرند برنامه همچنان فعال بمونه مثال در صفحه اول یک تایمر دارم کار خاصی نمی کنه فقط داره فرضا ( شمارنده هست ) وقتی به صفحه دوم میرم و بازم به صفحه اول برمی گردم ( رفتن به صفحات به صورت تب هست البته تب رو به صورت کاستوم و اختصاصی خودم ساختم ) یعنی از تب کنترل خوب ویژوال استفاده نکردم
    وقتی به تب دوم می رم و بعد بر می گردم تایمر صفحه اول غیر فعال شده

    می خوام تایمر همچنان به کارش ادامه بده تا زمانی که خودم رو دکمه توفق کلیک کنم

    فرمودید یه نخ بسازید دنبالشو می گیرم به شدت اگر شما هم چند لینک دارید که بتونه کمکی در این زمینه به من بکنه ممنون میشم راهنمایی کنید

    یک نکته نمی خوام از ShowDialog استفاده کنم چون به صورت تب مانند ساختم قرار هر تب در جایی که براش تعریف کردم باز بشه نه اینکه هر کدوم به صورت جداگانه باز شن

      
    Setting frm = new Setting();
    Control[] Control = frm.Controls.Find("textBox1", false);
    if (Control.Length != 0)
    {
    TextBox textBox = (TextBox)Control[0];
    price = Convert.ToDouble(textBox.Text) / 3600;
    timer += 1;
    sec += 1;
    if (sec > 59)
    {
    min += 1;
    sec = 0;
    if (min > 59)
    {
    hour += 1;
    min = 0;
    }
    }
    label4.Text = hour + ":" + min + ":" + sec;

    label3.Text = Convert.ToString(Convert.ToInt32(price * (timer / 1)));
    }

    else
    {
    timer1.Enabled = false;
    MessageBox.Show("نمی توانید فیلد قیمت را خالی بگذارید لطفا مجددا سعی نکنید ", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }

    کد های فوق شروع و محاسبه تایمر رو نشون میده

    ( فیلد قیمت تو یه صفحه دیگه هست که به این صفحه دسترسی دادم کاربر قیمت رو در صفحه دوم وارد می کنه در این صفحه هم ست میشه )


    الان دقیقا می خوام این کد ها به صورت همیشگی فعال باشه تا زمانی که کاربر رو دکمه stop کلیک کنه
    با توضیحاتی که دادید همون کاری رو انجام میدید که مدیر بخش فرمودند، هر بار وارد یک Tab ای میشید برای اون Tab با new فرم جدیدی میسازید.
    برای بازدید اول که از اون Tab دارید می کنید ساختن شیء ایرادی نداره، ولی وقتی قبلا اون رو باز کرده بودید و بازگشت به یک Tab دارید، باید از همون شیء قبلی استفاده میکردید، نه اینکه مجددا قرم بسازید.
    شما وقتی از Tab ای به اون Tab قبلی بر میگردید، همون شی فرم قبلی رو نشون نمیدید، یک شیء جدید ازش میسازید، ظاهرش شبیه اش هست ولی همون قبلی نیست، جدید ئه.
    یک لیستی یا آرایه ای یا دیکشنری ای داشته باشید که وقتی بین Tab ها جابجا میشید هر فرمی که ایجادش می کنید رو داخلش ثبت کنید.
    برای این ثبتش کنید که وقتی میخواهید به فلان Tab برید چک نکرده یک فرم جدید نسازید، اول ببینید قبلا از اون فرم شیء ساخته اید یا نه. اگر در آرایه یا لیست یا دیکشنری مقدارش بود، اون رو نمایش بدید، فرم جدید نسازید.

    کد Program.cs رو در پنجره Solution Explorer باز کنید و اونجا در ابتدای کلاس Program فیلد Forms رو تعریف کنید تا از همه فرم ها بهش دسترسی داشته باشید. دیکشنری بودنش کمک می کنه که در پیدا کردن یک فرم خاص بین مجموعه لازم نشه یکی یکی اعضاء رو بررسی کنید و از روی اسم فرم سریع پیداش کنید :

    static class Program
    {

    public static Dictionary<string, Form> Forms = new Dictionary<string, Form>();



    حالا شما بجای اینکه چک نکرده از Setting شیء بسازید اول چک می کنید که قبلا این شیء رو ساختید یا نه :

    Setting frm;
    if (Program.Forms.ContainsKey("Setting"))
    {
    frm = (Setting)Program.Forms["Setting"];
    }
    else
    {
    frm = new Setting();
    Program.Forms.Add("Setting", frm);
    }
    Control[] Control = frm.Controls.Find("textBox1", false);
    .
    .
    .


    و روال بستن فرم هایی مثل Setting رو هم به مخفی شدن تغییر بدید تا مخفی بشه. اینطوری می توانیم یک شیء فرم رو بارها و بارها ببندیم و مجددا نشون بدیم :

    private void Setting_FormClosing(object sender, FormClosingEventArgs e)
    {
    if (e.CloseReason == CloseReason.UserClosing)
    {
    e.Cancel = true;
    Hide();
    }
    }

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

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


    وقتی از تب کامپیوتر فرضا به تب گیم نت میرم شمارنده تایمر داخل کامپیوتر غیر فعال میشه ( داخل انجمن , گوگل , یوتوب , انجمن های خارجی ) همه رو گشتم اما هیچ کدوم اینی که من می خواستم رو داخلشون نداشتن دیگه واقعا بد جوری ناراحت کنندس
    http://uupload.ir/view/067_gigigaming.rar/

  8. #8

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    موارد رو انجام دادم اما ظاهرا باید برنامه رو بزارم تا کامل متوجه روش کارش بشید
    دو روزه شب روزم شده یکی تا الان همچین مدل برنامه ای نداشتم خودتون یه نگاه بندازید فک کنم کامل متوجه بشید منظورم رو


    وقتی از تب کامپیوتر فرضا به تب گیم نت میرم شمارنده تایمر داخل کامپیوتر غیر فعال میشه ( داخل انجمن , گوگل , یوتوب , انجمن های خارجی ) همه رو گشتم اما هیچ کدوم اینی که من می خواستم رو داخلشون نداشتن دیگه واقعا بد جوری ناراحت کنندس
    http://uupload.ir/view/067_gigigaming.rar/
    ببینید چی نوشتید :

    private void button2_Click(object sender, EventArgs e)
    {
    childformS(new PcGame.PcMain());
    }

    این کد کاری نداره که قبلا PcMain ای ساخته بودید یا نه. هر بار سراغش برید یک نسخه جدیدش رو میسازه.

    این کدها رو تغییر دادم :

    private void button2_Click(object sender, EventArgs e)
    {
    PcGame.PcMain frm;
    if (Program.Forms.ContainsKey("PcGame.PcMain"))
    {
    frm = (PcGame.PcMain)Program.Forms["PcGame.PcMain"];
    }
    else
    {
    frm = new PcGame.PcMain();
    Program.Forms.Add("PcGame.PcMain", frm);
    }
    childformS(frm);
    }

    private void Setting_Click(object sender, EventArgs e)
    {
    Setting frm;
    if (Program.Forms.ContainsKey("Setting"))
    {
    frm = (Setting)Program.Forms["Setting"];
    }
    else
    {
    frm = new Setting();
    Program.Forms.Add("Setting", frm);
    }
    childformS(frm);
    }



    private void childformS(Form childForm)
    {
    if (activeForm != null)
    activeForm.Hide();
    activeForm = childForm;
    if (openChildFrom.Controls.Contains(childForm) == false)
    {
    childForm.TopLevel = false;
    childForm.FormBorderStyle = FormBorderStyle.None;
    childForm.Dock = DockStyle.Fill;
    openChildFrom.Controls.Add(childForm);
    }
    openChildFrom.Tag = childForm;
    childForm.BringToFront();
    childForm.Show();

    }

  9. #9
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    دادش گلم واقعا ممنون بخدا افسردگی گرفته بودم می دونید درست می فرمایید هر بار دستور که برای باز کردن صفحه بچه بود از اول باز می کردم اخه حقیقتا من برنامه های که صفحاتش نیاز به باز شدن مجدد داشته باشه رو تا الان نساختم و اکثرا وقتی یه صفحه رو باز می کردم کارم شروع میشد صفحه و وقتی به صفحه دیگه ای می رفتم دیگه نیازی بهش نداشتم تا اینکه به این مورد برخوردم بخدا نجاتم دادید هر جور هم بهش فکر می کردم مغزم بدتر می ترکید از بس نمی دونستم باید چیکارش کنم خیلی آقایید بوالا بدبختانه تو نت هم چیزی نبود که بتونم روش حساب باز کنم

  10. #10
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    با سلام مجدد بعد از اینکه مشکل تایمر حل شد حالا یه مشکل جدید دارم که هر کاری کردم حل نمی شه

    ببینید مقدار رو من از صفحه دوم ( در برنامه موجوده ) همون setting دارم به تایمر می دم یعنی کاربر در صفحه دوم داره قیمت رو میده در صفحه اصلی تایمر محاسبه رو انجام میده تا اینجا درست همچی هم حله اما مشکل اینجاست
    وقتی start می کنم تایمر رو که کار می کنی stop هم نگهش می داره اما برای ریست چیکار کنم این بین مشکل ساز هست اومدم تو دکمه ریست
     timer1.Enabled = false;
    Setting frm;
    if (Program.Forms.ContainsKey("Setting"))
    {
    frm = (Setting)Program.Forms["Setting"];
    }
    else
    {
    frm = new Setting();
    Program.Forms.Add("Setting", frm);
    }
    Control[] Control = frm.Controls.Find("textBox1", false);

    if (Control.Length != 0)

    {
    TextBox textBox = (TextBox)Control[0];
    textBox.Text = "";
    }


    این شکلی عمل کردم بار اول ریست می کنه و خالی میشه اما برای بار دوم وقتی تایمر رو ریست می کنم فرضا اگه ثانیه دوم باشه ( البته رو هر ثانیه باشه همینه )‌
    تایمر رو ریست کنی استارت که بزنی بازم از همون ثانیه شروع می کنه یعنی راهی باشه که بدون تغییر در setting و تغییر در مقدار داده شده به برنامه تایمر رو ریست کرد که مجددا از اول شروع به کار کنه

    و یه مورد دیگه برای ثبت مقدار عددی در textbox داخل setting از این کد استفاده کردم

         private void button1_Click_2(object sender, EventArgs e)
    {
    GiGiGaming.Properties.Settings.Default.A = textBox1.Text;
    GiGiGaming.Properties.Settings.Default.Save();
    }


    در رویداد کلیک ثت و درون خود تیکس باکس هم یه متغییر که بیاد مقدار رو بگیره به این شکل

        private void textsystem2_TextChanged(object sender, EventArgs e)
    {
    int number2 = Convert.ToInt32( textBox1.Text);
    }



    ممنون میشم از دوستان اگه می تونن راهنماییم کنن بخدا گیرم بدجور این موارد رو هم هیچ جا ندیدم تا ازش منبعی دریافت کنم بازم ببخشید
    آخرین ویرایش به وسیله esmael_g : جمعه 18 بهمن 1398 در 20:20 عصر

  11. #11

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    با سلام مجدد بعد از اینکه مشکل تایمر حل شد حالا یه مشکل جدید دارم که هر کاری کردم حل نمی شه

    ممنون میشم از دوستان اگه می تونن راهنماییم کنن بخدا گیرم بدجور این موارد رو هم هیچ جا ندیدم تا ازش منبعی دریافت کنم بازم ببخشید
    چند تا نکته هست، نکته اول، تایمر از نظر زمانی اصلا کنترل دقیقی نیست، هم بخاطر سیستم زمان بندی اش و هم بخاطر صف انتظار پیام های پنجره. شما Interval اش رو تنظیم می کنید ولی دقیقا در اون فواصل زمانی مشخص شده تیک نمیزنه.
    پس زمان رو بر حسب زمان شروع یعنی زمان Start اندازه بگیرید نه تعداد تیک ها.
    نکته دوم اینه که برای جستجوی یک کنترل روی فرم Setting نیازی به Controls.Find ندارید. Modifiers کنترل مورد نظرتون رو public کنید تا راحت با نامش بهش دسترسی داشته باشید.
    نکته سوم اینه که متوجه نشدم اون GiGiGaming.Properties.Settings.Default.A با مشکل تون چه ارتباطی داره. احتمالا میخواهید اولین بار که فرم باز میشه مقدار رو از GiGiGaming.Properties.Settings.Default.A بخونید در textBox1.Text قرارش بدید. یعنی در رخداد Form.Load اش.
    نکته چهارم اینه که شما میخواستید textBox.TextLength رو بررسی کنید تا متن داخل اش خالی نباشه، اما بجاش Control.Length != 0 رو بررسی کردید که همیشه 1 ئه.

    شما اجزاء یک ساعت رو تعریف کرده بودید :

    public partial class PcMain : Form
    {
    double price;
    int sec;
    int min;
    int hour;
    int timer;


    حذفشون می کنیم و با زمان جایگزینش می کنیم، public static تا از بیرون کلاس اون فرم راحت تغییرش بدیم :

    public partial class PcMain : Form
    {
    private double price;
    public static DateTime StartTime = DateTime.MinValue;


    و شیوه نمایش اش هم این بود :

    timer += 1;
    sec += 1;
    if (sec > 59)
    {
    min += 1;
    sec = 0;
    if (min > 59)
    {
    hour += 1;
    min = 0;
    }
    }
    label4.Text = hour + ":" + min + ":" + sec;

    label3.Text = Convert.ToString(Convert.ToInt32(price * (timer / 1)));


    که تغییرش می دهیم :

    if (StartTime == DateTime.MinValue)
    {
    StartTime = DateTime.Now;
    }
    var elapsed = DateTime.Now.Subtract(StartTime);
    label4.Text = elapsed.Hours + ":" + elapsed.Minutes + ":" + elapsed.Seconds;

    label3.Text = Convert.ToString(Convert.ToInt32(price * elapsed.TotalSeconds));


    حالا هر زمان خواستید تایمر رو ریست کنید، کافیه StartTime رو قرار بدید روی زمان فعلی :

    private void button3_Click(object sender, EventArgs e)
    {
    StartTime = DateTime.Now;
    var elapsed = DateTime.Now.Subtract(StartTime);
    label4.Text = elapsed.Hours + ":" + elapsed.Minutes + ":" + elapsed.Seconds;
    }


    از بیرون اون فرم PcMain هم به این StartTime دسترسی دارید :

    PcGame.PcMain.StartTime = DateTime.Now;


    و اون مساله دسترسی به کنترل های روی فرم، فرم Setting رو در حالت طراحی باز کنید، روی textBox1 کلیک کنید و در پنجره Properties اون مشخصه Modifiers اش رو قرار بدید روی Public
    حالا بجای این کد :

    Control[] Control = frm.Controls.Find("textBox1", false);
    if (Control.Length != 0)
    {
    TextBox textBox = (TextBox)Control[0];
    price = Convert.ToDouble(textBox.Text) / 3600;


    از اسمش استفاده کنید :

    if (frm.textBox1.TextLength != 0)
    {
    price = Convert.ToDouble(frm.textBox1.Text) / 3600;

  12. #12
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    موارد فوق درست شد ولی الان مشکل اینه قیمت که تایمر اول که همین مورد که حلشده محاسبه می کنه خیلی بیشتره برای مثال تایمر سیستم دوم در ثانیه 17 عدد 135 و سیستم دوم ( همونی که خودم نوشتم عدد 118 رو محاسبه می کنه ) و اگه ماشین حساب دست بگیریم می بینیم دومی درست محاسبه کرده در حالی که اولی خیلی جلو افتاده یه چیز عجیب الان متوجه شدم وقتی رو ریست مدام کلیک می کنم رو ثانیه اول یه بار عدد 7 رو میاره یه بار 2 رو میاره یه بار 5 رو انگار نه انگار بهش عدد اولیه دادم


    ویرایش ::: داداش حل شد مشکل از من بود از کدم از بس درش چرخیده بودم یه عدد اضافه بهش دادم حل ممنونم بازم شرمنده سرتو درد آوردم

    فقط اون مشکل رندوم انتخاب کردن عدد در ثانیه اول رو هنوز داره ببین وقتی اولین اجرا رو می زنم درسته خوب کاملا درست اما وقتی ریست رو می زنم دیگه از تنظیم خارج میشه
    آخرین ویرایش به وسیله esmael_g : جمعه 18 بهمن 1398 در 21:13 عصر دلیل: مشکل حل شد

  13. #13

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    فقط اون مشکل رندوم انتخاب کردن عدد در ثانیه اول رو هنوز داره ببین وقتی اولین اجرا رو می زنم درسته خوب کاملا درست اما وقتی ریست رو می زنم دیگه از تنظیم خارج میشه
    پیشنهاد می کنم که مقدار Interval رو کم کنید، شما روی 1000 قرارش داده بودید چون با تیک ها می خواستید ثانیه ها رو بشمرید، الان که برای نمایش زمان فعلی استفاده میشه بهتره مقداری مثل 100 الی 200 باشه تا سریع نسبت به تغییرات زمانی واکنش نشون بده.

  14. #14
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    پیشنهاد می کنم که مقدار Interval رو کم کنید، شما روی 1000 قرارش داده بودید چون با تیک ها می خواستید ثانیه ها رو بشمرید، الان که برای نمایش زمان فعلی استفاده میشه بهتره مقداری مثل 100 الی 200 باشه تا سریع نسبت به تغییرات زمانی واکنش نشون بده.
    سلام و روز خوش این مورد رو دیروز انجام دادم و دقیق تر شد تایمر و شمارنده اما امروز با یه مشکل جدید برخورد کردم تایمر هم استارت میشه هم ریست اما وقتی رو دکمه توقف می زنم متوقف میشه فرضا رو ثانیه ده ولی وقتی ( فرض کنیم ده ثانیه صبر می کنم ) دوباره استارت رو می زنم به ثانیه 20 پرش می کنه یعنی عملا تایمر هنوزم به کار خودش ادامه داده نه اینکه بیاد توقف پیدا کنه

    عملا می خوام کاربر رو توقف کلیک کرد رو همون ثانیه تایمر متوقف بشه بعد از اون حالا بعد از هر چند ثانیه لازم شد دوباره استارت رو بزنه و از همون نقطه ای که متوقف شده دوباره به کارش ادامه بده

    ظاهرا مواردی مثل
    time.enable=false;
    timer.stop();
    این موارد کارساز نیست

    خواهشا کمکی بکنید چون تایمر با زمان کار می کنه وقتی تایمر رو متوقف می کنم زمان توقف نداره datetime قابلیت ایست نداره کامل غیر فعال میشه اما توقف نداره تا جایی که دانشش رو داشتم هر مدلی که می دونستم رو تست کردم اما جواب گو نبود لطفا اگه می دونید کمک کنید
    آخرین ویرایش به وسیله esmael_g : شنبه 19 بهمن 1398 در 12:01 عصر

  15. #15
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    با سلام و درود مشکل از اینجا شروع میشه فرض کنید یه تایمر داریم برای محاسبه کردن ( حالا هر چیزی باشه ) وقتی که به صفحه دیگه ای از برنامه می رم بر می گردم تایمر غیر فعال شده خلاصه انگاری تازه می خوام از اول شروع کنم
    لطفا اگه راهی هست که بعد از رفتن به from های دیگه تایمر غیر فعال نشه ممنون میشم توضیح بدید که چجوری هست خیلی گشتم به نتیجه نرسیدم

    تشکر
    سلام
    برای محاسبه مبلغ از تایمر استفاده نمیکنن.روش پیاده سازی شما اشتباه هست هر چند با کمک دوستان تا جایی پیش رفتید.روش های بهتری هم هست اگر شما توضیح بدید که میخواید چه چیزی رو پیاده سازی کنید دوستان راه های بهتری رو به شما پیشنهاد میدهند.
    First,solve the problem then write the code

  16. #16
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط ژیار رحیمی مشاهده تاپیک
    سلام
    برای محاسبه مبلغ از تایمر استفاده نمیکنن.روش پیاده سازی شما اشتباه هست هر چند با کمک دوستان تا جایی پیش رفتید.روش های بهتری هم هست اگر شما توضیح بدید که میخواید چه چیزی رو پیاده سازی کنید دوستان راه های بهتری رو به شما پیشنهاد میدهند.
    سلام
    ببینید سادس نرم افزار کافی نتی هست که قرار برحسب تایمی که مشتری می شینه قیمت رو محاسبه می کنه
    قیمت رو مدیریت خودش به نرم افزار میده ( البته در یک صفحه دیگه )
    ببینید قیمت وقتی مدیریت به نرم افزار داد باید ثابت بشه بمونه

    در این میان استارت که زده شده باید عملیان محاسبه انجام بشه که میشه
    عملیات ریست هم پیش میره اما وقتی دکمه توقف رو میزنم دو حالت بیشتر نمی تونم به برنامه بدم
    حالت اول توقف می کنه به ظاهر اما در واقعیت داره ادامه میده به کارش و وقتی استارت رو بزنیم هر چند ثانیه که توقف رو زده بودیم بهش اضاقه میشه انگار نه انگار توقف زده بودیم
    حالت دوم هم که توقف می کنه اما کلا صفرش می کنه نه اینکه کلا متوقف بشه امیدوارم توضیحاتم کافی باشه اگر جاییش رو متوجه نشدید لطفا بگید

    لطفا اگه ممکنه کمک کنید هر گوشه رو که می گیرم یه گوشش باز میشه

  17. #17

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط esmael_g مشاهده تاپیک
    سلام و روز خوش این مورد رو دیروز انجام دادم و دقیق تر شد تایمر و شمارنده اما امروز با یه مشکل جدید برخورد کردم تایمر هم استارت میشه هم ریست اما وقتی رو دکمه توقف می زنم متوقف میشه فرضا رو ثانیه ده ولی وقتی ( فرض کنیم ده ثانیه صبر می کنم ) دوباره استارت رو می زنم به ثانیه 20 پرش می کنه یعنی عملا تایمر هنوزم به کار خودش ادامه داده نه اینکه بیاد توقف پیدا کنه

    عملا می خوام کاربر رو توقف کلیک کرد رو همون ثانیه تایمر متوقف بشه بعد از اون حالا بعد از هر چند ثانیه لازم شد دوباره استارت رو بزنه و از همون نقطه ای که متوقف شده دوباره به کارش ادامه بده

    ظاهرا مواردی مثل
    time.enable=false;
    timer.stop();
    این موارد کارساز نیست

    خواهشا کمکی بکنید چون تایمر با زمان کار می کنه وقتی تایمر رو متوقف می کنم زمان توقف نداره datetime قابلیت ایست نداره کامل غیر فعال میشه اما توقف نداره تا جایی که دانشش رو داشتم هر مدلی که می دونستم رو تست کردم اما جواب گو نبود لطفا اگه می دونید کمک کنید
    یک پیشنهاد ساده دارم. شما یک متغیر ElapsedTime برای نگهداری زمان ذخیره شده در نظر بگیرید :

    public partial class PcMain : Form
    {
    private double price;
    public static DateTime StartTime = DateTime.MinValue;
    public static TimeSpan ElapsedTime;


    و وقتی تایمر رو متوقف کردید زمان سپری شده رو داخلش ثبت کنید :

    private void button2_Click(object sender, EventArgs e)
    {
    timer1.Enabled = false;
    ElapsedTime = DateTime.Now.Subtract(StartTime);
    }


    و وقتی تایمر رو مجددا راه می اندازید اون زمان رو در زمان شروع اعمال کنید :

    private void button1_Click(object sender, EventArgs e)
    {
    StartTime = DateTime.Now.Subtract(ElapsedTime);
    timer1.Enabled = true;
    }

  18. #18
    کاربر دائمی
    تاریخ عضویت
    آبان 1393
    محل زندگی
    کردستان
    پست
    131

    نقل قول: روش فعال ماندن timer بعد از رفتن به فورم دیگر

    نقل قول نوشته شده توسط the king مشاهده تاپیک
    یک پیشنهاد ساده دارم. شما یک متغیر ElapsedTime برای نگهداری زمان ذخیره شده در نظر بگیرید :

    public partial class PcMain : Form
    {
    private double price;
    public static DateTime StartTime = DateTime.MinValue;
    public static TimeSpan ElapsedTime;


    و وقتی تایمر رو متوقف کردید زمان سپری شده رو داخلش ثبت کنید :

    private void button2_Click(object sender, EventArgs e)
    {
    timer1.Enabled = false;
    ElapsedTime = DateTime.Now.Subtract(StartTime);
    }


    و وقتی تایمر رو مجددا راه می اندازید اون زمان رو در زمان شروع اعمال کنید :

    private void button1_Click(object sender, EventArgs e)
    {
    StartTime = DateTime.Now.Subtract(ElapsedTime);
    timer1.Enabled = true;
    }
    از بقیه اساتید هم ممنونم اما جناب بزارید من از راه دورم شده دستتون رو ببوسم ایشالله هرچی بخوایی خدا بهتون بده خداییش وجودتون برام مثل یه پشتیبانی قوی بود اینم با کمک شما حل شد ایشالله که دیگه مشکلی برام پیش نیاد تو این بین
    بازم ازتون ممنونم تشکر

تاپیک های مشابه

  1. Timer در یک کلاس
    نوشته شده توسط mohammadsamadi1377 در بخش C#‎‎
    پاسخ: 6
    آخرین پست: دوشنبه 08 مهر 1392, 19:02 عصر
  2. سوال: نحوه تنظیمات on timer یک فرم با ماژول
    نوشته شده توسط royasaz_bam در بخش Access
    پاسخ: 1
    آخرین پست: پنج شنبه 29 دی 1390, 22:10 عصر
  3. مبتدی: چگونه یک timer داشته باشم
    نوشته شده توسط asgarihamed86 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: چهارشنبه 19 اسفند 1388, 10:26 صبح
  4. روش کار با timer
    نوشته شده توسط aslitarin در بخش C#‎‎
    پاسخ: 5
    آخرین پست: دوشنبه 21 دی 1388, 13:17 عصر
  5. سوال: ساخت یک timer
    نوشته شده توسط ebi_bu در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: پنج شنبه 07 آذر 1387, 09:43 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •