مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

persianboy_333

عضویت از 1398/10/30

تغییر مقدار متغیر سراسری

  • دوشنبه 30 دی 1398
  • 01:23
تشکر میکنم

سلام. در ابتدا عرض کنم مبتدی هستم .

یک public static class تعریف کردم که داخلش یک متغیر به نام f از نو باز هم public decimal تعریف شده.

تابع دوم به صورت public decimal هم نوشتم

تابع سوم  از نوع public void دارم که باید از تابع اول و کلاس بالایی استفاده کنه .

حالا مشکلم اینه که با هر بار فراخوانی تابع سوم مقدار متغیری که داخل کلاس هست صفر میشه. متغیر f1....... یعنی مقدار پیش فرض اولیش در صورتی که من نمیخوام هر بار مقدار پیش فرضش درش قرار بگیره.


 

ممنون میشم راهنماییم کنید. اگر لازمه تا کد رو قرار بدم.

public partial class Form1 : Form
    {
         public static class FinalPrice
        {
            public static decimal f1=0,f2=0,f3=0,f4=0,f5=0;
            public static string stime1,stime2,stime3,stime4,stime5;
            public static Boolean a1=true, a2;
        }
        public decimal concate(string a , string b) {
            string x,y;
            decimal z;
            decimal result;
            x = a.Substring(0, 2);
            y = a.Substring(3, 2);
            z =Convert.ToDecimal( a.Substring(6, 2));
            result =((( (Convert.ToInt32(x) * 60) + Convert.ToInt32(y)+((z)/60))* Convert.ToInt32(b))/60) ;
            
            return Math.Ceiling(result);


        }


        public void Next(string a, Timer tt, System.Diagnostics.Stopwatch ss,decimal f,string c,Boolean aa,ListBox l,string b,string d,string st)
        {
            if (a.Length > 0)
                if (MessageBox.Show("آیا از ثبت زمان فعلی و شروع زمان جدید اطمینان دارید ؟ ", " هشدار ", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    tt.Stop();
                  
                    f = Convert.ToDecimal(c);
                    ss.Reset();
                    switch(aa)
                    {
                        case true:
                            {
                                l.Items.Add("Start: " + a + " ==>  End: " + DateTime.Now.ToString("HH:mm") + " ==? Cost: " + Convert.ToString(concate(b, d)));
                                aa = false;
                                st = DateTime.Now.ToString("HH:mm");
                                break;
                            }
                        case false :
                                l.Items.Add("Start: " + st + " ==>  End: " + DateTime.Now.ToString("HH:mm") + " ==> Cost: " + Convert.ToString(concate(b, d)));
                                st = DateTime.Now.ToString("HH:mm");
                            break;

                        
                            
                    }
                        
                    
                    
                
                c = "";
                b = "";

                tt.Start();
                ss.Start();


                }

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

AmirGhasemi

عضویت از 1392/02/25

  • دوشنبه 30 دی 1398
  • 08:13

سلام

نکات زیر را دقت کن:

متغیرهایت را بصورت پراپرتی نگه دار نه متغیر ساده. اینجوری:

public static decimal f{get;set;}

و حتمن هم آنها را استاتیک کن

مورد دوم اینکه متدهایت را هم استاتیک کن.

البته بنده بطور کلی با نگهداری متغیرها بصورت سراسری کاملا مخالفم

کاربر سایت

mohammadd

عضویت از 1395/12/08

  • دوشنبه 30 دی 1398
  • 09:00

تو استفاده از متغییر Static خیلی دقت کن

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

از سشن یا امثال این استفاده کن راحت تری

من خودم روزای اول کارم یه پروژم بخاطر متغییر سراسری رفت رو هوا با نظر AmirGhasem کاملا موافقم

کاربر سایت

persianboy_333

عضویت از 1398/10/30

  • یکشنبه 6 بهمن 1398
  • 00:57

سلام. من برنامه ناقصی رو که نوشتم میفرستم. ممنون میشم بیشتر راهنماییم کنید. پیشاپیش از کدنویسی داغونم عذرخواهی میکنم :)))) برنامه 2 قسمت داره فعلا ( پلی استیشن 1 و پلی استیشن 2). برنامه توی قست 2 درست اجرا میشه. ولی توی قسمت 1 که از توابع و کلاس استفاده کردم تا حجم کدنویسیم کمتر بشه و چندین کد چندین جا تکرار نشه ایرادی وجود داره که نمیدونم چجوری حلش کنم. مراحل اجرا بصورت زیر : اول توی قسمت 1 روی ریدیو باتن یک نفره کلیک و سپس روی دکمه شروع کلیک کنید. زمانبندی شروع میشه. بعدش روی دکمه ی (بعدی) کلیک کنید. دو سه بار تا نتایج ثبت بشه توی لیست باکس پایینش. حالا همین مراحلو توی قسمت 2 انجام بدید. نتایج ثبت شده رو مقایسه کنید. دلیل وجود اشکال توی قسمت 1 زمانی که روی دکمه ی (بعدی) کلیک میکنم و باعث میشه دوتا تکست باکس صفر بشه چیه؟ ممنون از راهنماییتون

فایل های ضمیمه

کاربر سایت

persianboy_333

عضویت از 1398/10/30

  • دوشنبه 21 بهمن 1398
  • 20:38

دوستان خیلی واسم مهمه کسی نمیتونه کمکم کنه؟sad

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)