+2 امتیاز

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

با تشکر

var t1 = Convert.ToDecimal(f5.textBox9.Text);
var t2 = Convert.ToDecimal(f5.textBox14.Text);
while (t1 % 2 == 0 && t2 % 2 == 0)

{
f5.listBox4.Items.Clear();
t1 /= 2;
t2 /= 2;
f5.textBox9.Text = t1.ToString();
f5.textBox14.Text = t2.ToString();

 

1 پاسخ

+2 امتیاز

سلام . شما میتونید یک تابع به صورت public تعریف کنید و از اون در هر قسمت برنامه که خاستید استفاده کنید .

کلاس مورد نظر شما به صورت زیر است .

class Class1
    {
        public void Namdelkhah(System.Windows.Forms.TextBox txt1, System.Windows.Forms.TextBox txt2, System.Windows.Forms.ListBox list)
        {
            var t1 = Convert.ToDecimal(txt1.Text);
            var t2 = Convert.ToDecimal(txt2.Text);
            while (t1 % 2 == 0 && t2 % 2 == 0)
            {
                list.Items.Clear();
                t1 /= 2;
                t2 /= 2;
                txt1.Text = t1.ToString();
                txt2.Text = t2.ToString();
            }
        }
    }

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

Class1 clas = new Class1();
            clas.Namdelkhah(textBox1,textBox2,listBox1);

 

سلام کد بالا رو نوشتم خطا میده
توسط (148 امتیاز) 6 19
سلام چ خطایی .  کدوم قسمتش ؟
توسط (1,666 امتیاز) 8 21 78
وقتی در قسمت فرم این کد رو وارد میکنم اصلا فرمم باز نمیشه

Class1 clas = new Class1();

            clas.Namdelkhah(textBox1,textBox2,listBox1);
توسط (148 امتیاز) 6 19

سلام دوست عزیز

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

دوم اینکه یه عکس از برنامتون بندازین موقعی که خطا میده تا بهتر بتونیم راهنمایی کنیم.

با تشکر
 

توسط (6,480 امتیاز) 6 17 129
با سلام یه کلاس ایجاد کردم و کد زیر رو نوشتم
{
    class Class3
    {

        public void Namdelkhah(System.Windows.Forms.TextBox textBox17, System.Windows.Forms.TextBox textBox18, System.Windows.Forms.ListBox list)
        {
            Form5 f5 = new Form5();
            var t1 = Convert.ToDecimal(f5.textBox17.Text="0");
            var t2 = Convert.ToDecimal(f5.textBox18.Text="0");
            while (t1 % 2 == 0 && t2 % 2 == 0)
            {
                list.Items.Clear();
                t1 /= 2;
                t2 /= 2;
                f5.textBox17.Text = t1.ToString();
                f5.textBox18.Text = t2.ToString();
            }
        }

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

	
Class3 clas = new Class3();
         clas.Namdelkhah(f5.textBox17,f5.textBox18,f5.listBox2);

 

توسط (148 امتیاز) 6 19

این کد رو وقتی شما در داخل یک فرم استفاده کنید جواب میده اما ظاهرا شما میخاید با زدن یک دکمه در فرم دوم مقادیر تکست باکس فرم اول تغییر کنه پس فرم f5 رو به شکل زیر تعریف کنید .

form5 f5 = Application.OpenForms.OfType<form5>().ElementAt<form5>(0);

فقط نکته اینکه شما در صورتی میتونید از این کد استفاده کنید که از قبل form5 باز شده باشه . پس اگر فرمتون باز نیست باید اول فرمتون رو باز کنید بعد از این کد استفاده کنید . به شکل زیر :

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                form5 f5 = Application.OpenForms.OfType<form5>().ElementAt<form5>(0);
            }
            catch
            {
                Form5 frm = new Form5();
                frm.Show();
                form5 f5 = Application.OpenForms.OfType<form5>().ElementAt<form5>(0);
            }
        }

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

توسط (1,666 امتیاز) 8 21 78

سلام یه مشکل دیگه هم هست

class Class1
    {
        public void Namdelkhah(System.Windows.Forms.TextBox txt1, System.Windows.Forms.TextBox txt2, System.Windows.Forms.ListBox list)
        {
            var t1 = Convert.ToDecimal(txt1.Text);تو این خط و خط بعدی ارور میده و برنامه اجرا نمیشه
            var t2 = Convert.ToDecimal(txt2.Text);
            while (t1 % 2 == 0 && t2 % 2 == 0)
            {
                list.Items.Clear();
                t1 /= 2;
                t2 /= 2;
                txt1.Text = t1.ToString();
                txt2.Text = t2.ToString();
            }
        }


 

توسط (148 امتیاز) 6 19
دوست من برنامه رو تست کردم مشکلی نداره کد فرمی که در اون کلاس رو فراخونی کردین رو برام ارسال کنید و یک عکس هم از اروری که هنگام اجرا میده بزارید
توسط (1,666 امتیاز) 8 21 78

کد من

private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
           }
            catch
            {
                Form2 frm = new Form2();
                frm.Show();
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
            }
 
        }
 class Class1
    {
        public void Namdelkhah(System.Windows.Forms.TextBox txt1, System.Windows.Forms.TextBox txt2, System.Windows.Forms.ListBox list)
        {
          
            var t1 = Convert.ToDecimal(txt1.Text );
           
            var t2 = Convert.ToDecimal(txt2.Text);
          
            while (t1 % 2 == 0 && t2 % 2 == 0)
            {
                list.Items.Clear();
                t1 /= 2;
                t2 /= 2;
                txt1.Text = t1.ToString();
                txt2.Text = t2.ToString();
            }
 private void Form2_Load(object sender, EventArgs e)
        {
           Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
        }

 

توسط (148 امتیاز) 6 19

و

  private void Form2_Load(object sender, EventArgs e)
        {
           Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
           Class1 clas = new Class1();
           clas.Namdelkhah(textBox1, textBox2, listBox1);

 

        }

اروری که میده
 

توسط (148 امتیاز) 6 19

دوست من برای عکس گرفتن از صفحه از snip ویندوز استفاده کنید ( در منوی استارت All Programs ).

خب . در رابطه با خطای شما در واقع باید بگم که خطا بیانگر این هست که نوع ورودی تکست باکس شما قابل تبدیل به Decimal نیست . چون شما کدتون رو درون لود فرم نوشتین همزمان با لود فرم کد اجرا میشه و چون هیچ عددی داخل تکست باکسهاتون نیست برنامه ارور میده . تکست باکسهاتون رو باید از عدد پر کنید تا بتونید عملیات Convert.Todecimal رو روی اونها انجام بدین .

برای جلوگیری از خطا شما باید از دستور Try - Catch استفاده کنید .

 و اما در رابطه با استفاده از کد مربوط به Application.OpenForms باید خدمتتون عرض کنم که این طور که معلومه یه ذره اطلاعاتتون کمه . این لینکو یه نگاه بندازید . و پیشنهاد میکنم اگر اطلاعات بیشتری در خصوص کد نویسی c# میخاین کسب کنید در سایت عضو شین و از آموزشها بهره ببرید .

به هر حال هر کمکی از دست بنده بر بیاد در خدمتم

توسط (1,666 امتیاز) 8 21 78
با سلام من اطلاعات برنامه نویسیم کمه دستور Try - Catch رو کجا و به چه صورت اضافه کنم
توسط (148 امتیاز) 6 19
 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
            }
            catch
            {
                Form2 frm = new Form2();
                frm.Show();
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
            }

من کد رو بصورت بالا وارد کردم بعد تو تکس باکس ها عدد وارد کردم بازهم همون ارور رو میده

توسط (148 امتیاز) 6 19

دوست عزیز از یک مثال ساده تر کارتون رو شروع کنید . کنترل مقادیر در چند فرم با استفاده از کلاس اگه تا این حد اطلاعاتتون از thry - catch کار صحیحی نیست . بهتره برنامه نویسی رو از پایه شروع کنید . یه فیلم آموزش سی شارپ ببین ، اگه خیلی عجله دارین که یاد بگیرید فیلم های پروژه محور رو نگاه کنید و قدم به قدم باهاشون پیش برید میتونه بهتون کمک کنه enlightened

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

توسط (1,666 امتیاز) 8 21 78

با سلام کدی که دادید

  public void Namdelkhah(System.Windows.Forms.TextBox  textBox1, System.Windows.Forms.TextBox  textBox2, System.Windows.Forms.ListBox list)
        {

            
            
            try
            {
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
                var t1 = Convert.ToDecimal(f2.textBox1.Text);

                var t2 = Convert.ToDecimal(f2.textBox2.Text);

                while (t1 % 2 == 0 && t2 % 2 == 0)
                {

                    list.Items.Clear();
                    t1 /= 2;
                    t2 /= 2;
                    f2.textBox1.Text = t1.ToString();
                    f2.textBox2.Text = t2.ToString();
                }
            }
              catch
            {
        }
 private void Form2_Load(object sender, EventArgs e)
        {
           Form1 f1 = Application.OpenForms.OfType<Form1>().ElementAt<Form1>(0);

          
           Class1 clas = new Class1();
           clas.Namdelkhah(textBox1, textBox2, listBox1);
           textBox1.Text = f1.textBox1.Text.ToString();
           
           textBox2.Text = f1.textBox2.Text.ToString();
        }
  private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
               
            }
            catch
            {
                Form2 frm = new Form2();
                frm.Show();
                Form2 f2 = Application.OpenForms.OfType<Form2>().ElementAt<Form2>(0);
                Class1 clas = new Class1();
                clas.Namdelkhah(f2.textBox1, f2.textBox2, listBox1);
                //f2.textBox1.Text = textBox1.Text.ToString();
                //f2.textBox2.Text = textBox2.Text.ToString();
            }

جواب داد ولی تو برنامه خودم جواب نمیده برنامه من به این صورت هست که یک  تکس باکس بنام textBox4 و یک باتن محاسبه و چند تا کمبو باکس و چک باکس تو فرم دوم دارم وقتی کاربر عدد وارد میکنه تو تکس باکس4 فرم دوم و مثلا چک باکس رو تیک میزنه و روی باتن محاسبه کلیک میکنم یه سری اعمال ریاضی انجام میشه و تو فرم 5 نمایش داده میشه تو تکس باکس 17 و 18 نمایش داده میشه

تو فرم 5 هم دو تکس باکس بنام textBox17 و textBox18 و یک ListBox4دارم که نتیجه رو تو تکس باکس 17 و 18 و لیست باکس4 نشون میده تا اینجا مشکل ندارم ولی بعنوان مثال اگه عدد نمایش داده شده در تکس باکس 17  8  و عدد تکس باکس 18 مثلا16 باشه میخوام تا جایی که میشه ساده بشه و در تکس باکس17 و 18 و لیست باکس نمایش داده بشه مثلا 1 و 2 نمایش داده بشه تا جایی که بر 2 یا 3 یا 4 تا8 بخش پذیر بود ساده بشه ممنون میشم همراه با کدنویسی راهنمایی بفرمایید امیدوارم منظورم رو رسونده باشم با تشکر ایمیل من daem1364@yahoo.com

توسط (148 امتیاز) 6 19
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...