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

نام تاپیک: ارسال خود فرم(نه object ش) به يك كلاس!

  1. #1
    کاربر دائمی آواتار mahboube
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شيراز
    سن
    36
    پست
    596

    ارسال خود فرم(نه object ش) به يك كلاس!

    سلام دوستان
    چطوري ميشه يك فرم رو نه يك شي از فرم ،خود فرم (كه بشه ازش شي ساخت) رو به عنوان پارامتر به يك كلاس فرستاد؟؟!!!
    توي كلاس حتما بايد به شكل زير تعريف شه چون نمي دونيم چه فرميه!!

    class class1
    {
    public class1(Form f)
    {}
    }


    در واقع مي خوام يك فرم رو به يك كلاس بفرستم و توي كلاس ازش چند تا object بسازم .به جاي كد زير:(اينجا مجبورم دوتا شي از يك نوع فرم رو بفرستم)


    class class1
    {
    public class1(Form f,Form f1
    {}
    }

  2. #2

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    با سلام

    یعنی شما نمیخوای به این دوشکلی که نوشتم عمل بکنید ؟

    کدهای کلاس :


    class Myform
    {
    public void MyformAddToClass(Form MyForm )
    {
    MessageBox.Show(MyForm.Name);
    }

    public Myform(Form f)
    {
    MessageBox.Show(f.Name);
    }
    }



    کدهای فرم :


    Myform f = new Myform(this);



    یا این :


    f.MyformAddToClass(this);

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  3. #3
    کاربر دائمی آواتار mahboube
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شيراز
    سن
    36
    پست
    596

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نه نازنين!
    من بايد تو كلاسم بتونم ازش شي بسازم.يعني ميخام بتونم دستور زيرو تو كلاس براي پارامتر ارسال شده بنويسم:
    Form1 form=new Form1

  4. #4

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

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

    Public void CreateForm(Form f)
    {
    Form f2;
    if(f is Form1)
    f2=new form1();
    elseif (f is Form2)
    f2=new Form2();
    else
    f2=new Form3();
    f2.Show();
    }

  5. #5

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط ali.rezaei7 مشاهده تاپیک
    سلام
    از کلمه کلیدی is استفاده کنید. شی مورد نظرتونو با فرمهای داخل برنامتون مقایسه کنید. مثال:

    Public void CreateForm(Form f)
    {
    Form f2;
    if(f is Form1)
    f2=new form1();
    elseif (f is Form2)
    f2=new Form2();
    else
    f2=new Form3();
    f2.Show();
    }

    فکر نکنم نیازی باشه. چون اگر 100 فرم داشته باشیم اونوقت باید چیکار کنیم ؟؟؟

    روش پایین به مراتب بهتره.


    public void Myf(Form f)
    {
    Form f2 = f;

    MessageBox.Show(f.Name);
    MessageBox.Show(f2.Name);

    }

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  6. #6
    کاربر دائمی آواتار mahboube
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شيراز
    سن
    36
    پست
    596

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط ali.rezaei7 مشاهده تاپیک
    سلام
    از کلمه کلیدی is استفاده کنید. شی مورد نظرتونو با فرمهای داخل برنامتون مقایسه کنید.
    مرسي ولي اينم عملي نيست چون 100 تايي فرم دارم.

  7. #7

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط mahboube مشاهده تاپیک
    مرسي ولي اينم عملي نيست چون 100 تايي فرم دارم.
    بالا که گفتم نیازی نیست به این کار. همون روشی که گفتم رو برید.

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  8. #8
    کاربر دائمی آواتار mahboube
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شيراز
    سن
    36
    پست
    596

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط mmd2009 مشاهده تاپیک
    فکر نکنم نیازی باشه. چون اگر 100 فرم داشته باشیم اونوقت باید چیکار کنیم ؟؟؟

    [/php]
    اينم نميشه.
    چون حتي اگه دوتا هم فرم بسازيم و فرم ارساليمونو بهش بديم باز به يك فرم اشاره مي كنن!!!
    همون كه ارسال شده!

  9. #9

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط mmd2009 مشاهده تاپیک
    فکر نکنم نیازی باشه. چون اگر 100 فرم داشته باشیم اونوقت باید چیکار کنیم ؟؟؟

    روش پایین به مراتب بهتره.


    public void Myf(Form f)
    {
    Form f2 = f;

    MessageBox.Show(f.Name);
    MessageBox.Show(f2.Name);

    }
    دوست عزیز این کد هیچ فرقی با نبودش نداره. f2 به f اشاره می کنه. حتی اگه از متد Show برای f2 استفاده کنی فرم جدید رو نشون نمی ده. ولی کد من یک شی از کلاس شی ارسال شده ایجاد می کنه.

  10. #10

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

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

    خب الان این کد رو اجرا کنید ببینید باز اشکال میده ؟


    public void Myf(Form f)
    {
    Form f2 = f;
    f2.ShowDialog();
    }


    فرم 2 ورودی می باشد. تو خود فرم یک باید فرم دورو بفرستی به ورودی.

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  11. #11

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    چون حتي اگه دوتا هم فرم بسازيم و فرم ارساليمونو بهش بديم باز به يك فرم اشاره مي كنن!!!
    متوجه نشدیم.!!!

    شما انتظار دارید یک فرم رو بفرستید به یک ورودی بعدش به 2 فرم دسترسی داشته باشید؟؟؟!

    سوالتون رو بهتر بپرسید. انگار از صورت مسئله دور شدیم.

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  12. #12

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    public void Myf(Form f)
    {
    Form f2 = f;
    f2.ShowDialog();
    }
    کد درست است، ولی به این صورت:
    Myf(new Form1());
    اما این جوری امکان نداره:
    Myf(this);
    نمی شه که فرم رو در یک لحظه هم معمولی نمایش دهیم و هم showDialog! دوست که این تایپیک رو ایجاد کرده، می خواد از کلاس شی ارسال شده برای ساخت فرمش استفاده کنه.



  13. #13

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    می شه به من بفهمونید که نوشتن Form f2=f چه لزومی داره. این دوتا که یکی هستند. فرم جدیدی ایجاد نمی شه که.

  14. #14
    کاربر دائمی آواتار mahboube
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    شيراز
    سن
    36
    پست
    596

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    فكر مي كنم بايد فرم رو به صورت ref بفرستيم!!!
    نظرتون چيه؟
    ببينيد من مي خوام خود فرم و نه شي اي از فرم فرستاده شه.!!!!سوالم واضحه ديگه!

  15. #15

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    تا اونجایی که من از این تایپیک سر در آوردم، ایشون(mahbube) می خوان یه فرمی رو بگیرن و از اون نوع فرم، فرم هایی رو تکثیر کنند. و بازم تا اونجایی که سواد من جواب می ده، کدهایی رو که شما(mmd2009) نوشتید، هیچ فرم جدید رو به وجود نمیاره. فکر می کنم راه حل من به جواب نزدیکتر باشه.

  16. #16

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    ببينيد من مي خوام خود فرم و نه شي اي از فرم فرستاده شه.!!!!سوالم واضحه ديگه!
    به نظر من روشي ali.rezaei7 گفتند روش مناسبي به حساب مياد
     Myf(new Form1());  

    ولي اگر اصرار بر اين داريد كه توي متد شي جديد درست كنيد ميتونيد از روش زير استفاده كنيد.
    void MyMethod(Form f)
    {
    Type t = f.GetType();
    Form f2 = (Form)t.GetConstructors()[0].Invoke(null);
    f2.Show();
    }

    البته اين كد فقط براي حالتي به كار مياد كه بخوايد به يك درست كنيد. ولي بازم ميگم كه روش اول بهتره!!

  17. #17

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    سلام Reza_Yarahmadi

    الان کدی که من گفتم که فرقی با کد ali.rezaei7 داشت :


    public void Myf(Form f)
    {
    Form f2 = f;
    f2.ShowDialog();
    }


    در مورد این کد :


    void MyMethod(Form f)
    {
    Type t = f.GetType();
    Form f2 = (Form)t.GetConstructors()[0].Invoke(null);
    f2.Show();
    }


    باز هم فرم ارسال نمیشه ...
    آخرین ویرایش به وسیله mmd2009 : سه شنبه 27 مهر 1389 در 15:15 عصر

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  18. #18

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    کد من:
    Public void CreateForm(Form f)
    {
    Form f2;
    if(f is Form1)
    f2=new form1();
    elseif (f is Form2)
    f2=new Form2();
    else
    f2=new Form3();
    f2.Show();
    }
    کد شما:

    public void Myf(Form f)
    {
    Form f2 = f;
    f2.ShowDialog();
    }
    کد من کلاس فرم شی f رو پیدا می کنه و فرم جدید رو بر اساس اون تولید می کنه.f2=new
    ولی در کد شما Form f2 = f باعث بوجود اومدن فرم جدیدی نمی شه

  19. #19

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    فرقشون از زمين تا آسمونه!
    كد شما 2 نام به يك فضاست يعني f و f2 هيچ فرقي با هم ندارند هر تغييري روي f داده بشه روي f2 هم اعمال ميشه و بالعكس.
    عملگر انتساب (=) فقط اشاره گر رو منتقل ميكنه نه كل شي رو. كلاسهايي كه از ICloneable ارث براي كرده باشند با متد Clone اونها ميشه شي جديدي با تمام خصوصيات شي اصلي درست كرد.

  20. #20

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    به چی اشاره کردید و چی رو توضیح دادید ؟ این چیزی که توضیح دادید رو میدونیم مسئله چیزی هست که توضیح دادید.

    شما داری میگی این کد :


    Myf(new Form1());
    و دارید اینو توضیح میدید :



    Public void CreateForm(Form f)

    من دارم در مورد این کد حرف میزنم که همین دوستمون هم اولش گفتن درسته #12 با کدی که شما گفتید. در صورتی که هر دو کدی مشکل دارن یا حداقل برای من مشکل دارن هر دو .

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  21. #21

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    این چیزی که توضیح دادید رو میدونیم مسئله چیزی هست که توضیح دادید.
    كلي در مورد اين جمله فكر كردم ولي به نتيجه اي نرسيدم كه منظورتون چيه؟
    كدي كه شما اول گذاشتيد 2 به صورت زير استفاده كرديد.
     		 			   Myform f = new Myform(this);  

    بعد در توي پست 5 اينو گفتيد
            public void Myf(Form f)
    {
    Form f2 = f;

    MessageBox.Show(f.Name);
    MessageBox.Show(f2.Name);

    }

    هيچ كجا هم روش استفاده از متد رو نگفتيد.
    منم عرض كردن اگر به صورت زير صدا زده بشه روش مناسبتريه
     		 			 Myf(new Form1());  

    توضيحاتي كه دادم برطبق روند صحبت هاي شما و دوستان و كدهايي بود كه رد و بدل شد

  22. #22

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    ولی قراره که فرم در داخل کلاس ساخته بشه اونم به تعداد متغیر.
    روشی mmd2009 گفتند ، هیچ فرمی رو در داخل تابع بوجود نمیاره.
    کسی که این تاپیک رو مطرح کرد، فکر می کنم که می خواست نوع فرم رو بگیره و داخل کلاس، از اون ایجاد کنه. دقیقا مثل کاری که من کردم.

  23. #23

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    كلي در مورد اين جمله فكر كردم ولي به نتيجه اي نرسيدم كه منظورتون چيه؟


    خیلی اینو باحال گفتید. اینم دقیقا مثل ردوبدل شد حرفها بود.

    هيچ كجا هم روش استفاده از متد رو نگفتيد.
    چی؟ یعنی باید اینم بگیم. مگه خود شما گفتی روش استفاده از متد رو؟

    ولی فکر کنم مشکل دوستمون حل شد.

    درکی که من از این موضوع داشتم این بود که خیال کردم میخواد از دوتا ابجکت یک فرم رو کنترل بکنند. که فکر کنم درک اشتباهی بود.

    اصلا دوست ندارم روش اشتباهی رو به کسی بگم و قصد توهین به کسی رو هم نداشتم و از جناب رضایی ( عاشق اوارتورم ) اگر ناراحتی دارند معذرت میخوام .

    موفق باشید دوستان. فکر کنم دیگه بریم بشیم بخونیم برای کنکور

    کسی که به خود اطمینان دارد به تعریف دیگران احتیاج ندارد. «گوستاو لوبون»


  24. #24

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    کسی که این تاپیک رو مطرح کرد، فکر می کنم که می خواست نوع فرم رو بگیره و داخل کلاس، از اون ایجاد کنه. دقیقا مثل کاری که من کردم.
    كدي كه شما داديد اگر 100 فرم داشته باشيم بايد به ازا هر كدوم شرط گذاشت
    كدي كه mmd2009 گداشتند به اضافه روش استفاده اي كه شما گفتيد روش خوبيه.
    مگه خود شما گفتی روش استفاده از متد رو؟
    كدي كه من گذاشتم با هر 2 روش كار ميكنه و فرقي نميكنه چطور استفاده اس كنيد.
    MyMethod(new Fomr2())
    //OR
    MyMethod(this)

    به هر حال اين تاپيك هم به نتيجه رسيد ، خدا رو شكر!

  25. #25
    کاربر دائمی
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    ایران
    سن
    39
    پست
    467

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط Reza_Yarahmadi مشاهده تاپیک
    به نظر من روشي ali.rezaei7 گفتند روش مناسبي به حساب مياد
     Myf(new Form1());  
    ولي اگر اصرار بر اين داريد كه توي متد شي جديد درست كنيد ميتونيد از روش زير استفاده كنيد.
    void MyMethod(Form f)
    {
    Type t = f.GetType();
    Form f2 = (Form)t.GetConstructors()[0].Invoke(null);
    f2.Show();
    }
    البته اين كد فقط براي حالتي به كار مياد كه بخوايد به يك درست كنيد. ولي بازم ميگم كه روش اول بهتره!!
    روش درست همینه که این دوستمون گفتند ، در واقه نوع باید استفاده بشه
    منتها در این روش آبچکت پاس شده و نوعش برداشته شده و از اون نوع هر چند تا که بخوایم می تونیم انستنس کنیم ولی می تونیم به جای این خود TYPE رو پاس بدیم نه یک نمونه را

  26. #26
    کاربر دائمی آواتار FastCode
    تاریخ عضویت
    تیر 1388
    محل زندگی
    /dev/null
    پست
    3,486

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    خوشبختانه generic و dynamic اختراع شدن.
    void DoVerb<T>(T Object) where T : new()
    {
    T NewObj = new T();
    dynamic TRef = NewObj;
    dynamic ObjRef = Object;
    MessageBox.Show(TRef.Name);
    MessageBox.Show(ObjREf.Name);
    }
    آخرین ویرایش به وسیله FastCode : چهارشنبه 28 مهر 1389 در 19:39 عصر دلیل: syntax error

  27. #27
    کاربر دائمی آواتار میلاد قاضی پور
    تاریخ عضویت
    بهمن 1388
    محل زندگی
    اوج بلند
    پست
    768

    نقل قول: ارسال خود فرم(نه object ش) به يك كلاس!

    نقل قول نوشته شده توسط FastCode مشاهده تاپیک
    خوشبختانه generic و dynamic اختراع شدن.
    void DoVerb(T Object) where T : new()
    {
    T NewObj = new T();
    dynamic TRef = NewObj;
    dynamic ObjRef = Object;
    MessageBox.Show(TRef.Name);
    MessageBox.Show(ObjREf.Name);
    }
    یعنی دونه دونه پستهارو خوندم و متعجب از اینکه چرا کسی ننوشته از جنریک استفاده کنید . اسلحمو گذاشته بودم رو شقایقم که شما از راه رسیدی .

    روشی که دوستمون از طریق reflection ها گفتن هم صحیح هست .

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

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