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

نام تاپیک: اضافه کردن فرم فرزند به فرم پدر در برنامه های MDI

  1. #1

    اضافه کردن فرم فرزند به فرم پدر در برنامه های MDI

    همونطور که میدونین برای اضافه کردن یه فرم فرزند به فرم والد دز برنامه های MDI از کد زیر استفاده میکنیم


    Form childForm = new Form();
    childForm.MdiParent = this;
    childForm.Show();



    که this اشاره گر به فرم پدر هست
    حالا اگه بخوایم از یه کلاس دیگه که مثلا در لایه business logic هست عمل فوق را انجام بدیم باید چه کدی نوشت ؟
    درو اقع بهترین کد چیه؟

    آیا این کد درسته؟



    Form childForm = new Form();
    childForm.MdiParent = Form1.ActiveForm;
    childForm.Show();



    Form1 در واقع فرم والد هست

    البته این کد کار میکنه و هیچ مشکلی هم نداره ولی میخوامن ببینم آیا این روش درسته یا راه بهتری هست؟

  2. #2
    مطمئنی درست کار میکنه؟ و به عنوان فرزند کار میکنه

  3. #3
    نقل قول نوشته شده توسط once4ever مشاهده تاپیک
    مطمئنی درست کار میکنه؟ و به عنوان فرزند کار میکنه
    شما شک دارین؟

    ظاهرا که اینطوره

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

    یه نمونه گذاشتم

    ممنون میشم اگه کد ایرادی یا هر عیب و نقصی داره بگین
    فایل های ضمیمه فایل های ضمیمه

  4. #4
    ببین دوست من
    این کدی که شما نوشتی درست نیست
    شما خط
    mdiChildren.addChildForm();
    در رویداد Load فرم 1 بذار ببین چه اتفاقی میافته!

    درواقع شما یک BUG پیدا کردی. یه راه دیگه فهمیدنش اینه که یک Breakpoint به خط زیر اضافه کن و ببین چه اتفاقی میافته ;)
    newChild.MdiParent = Form1.ActiveForm;

    بنظر من بهترین روش برای اینکار اینه که به متد "اضافه کردن چایلد" یک شی از نوع فرم به عنوان ورودی اضافه کنی که فرم والد به عنوان ورودی بگیره.

  5. #5
    نقل قول نوشته شده توسط once4ever مشاهده تاپیک
    ببین دوست من
    این کدی که شما نوشتی درست نیست
    شما خط
    mdiChildren.addChildForm();
    در رویداد Load فرم 1 بذار ببین چه اتفاقی میافته!

    درواقع شما یک BUG پیدا کردی. یه راه دیگه فهمیدنش اینه که یک Breakpoint به خط زیر اضافه کن و ببین چه اتفاقی میافته ;)
    newChild.MdiParent = Form1.ActiveForm;

    بنظر من بهترین روش برای اینکار اینه که به متد "اضافه کردن چایلد" یک شی از نوع فرم به عنوان ورودی اضافه کنی که فرم والد به عنوان ورودی بگیره.
    ممنون از پاسختون
    بلا خره یه نفر پیدا شد یه جوابی به ما بده
    اولا من یه همچین متدی (addchildForm) ندارم (البته شما حدس زدید که من کدهای اضافه کردن را در این متد نوشتم )
    من برای فرم های child از روش singeltonepattern استفاده کردم و یک متد به نام مثلا showForm در فرم فرزند گذاشتم که ورودی اون هم یه فرم هست که به عنوان فرم والد عمل میکنه
    مشکل اینجاست که من متد showForm را از کلاس Form1 فراخوانی نمی کنم که بخوام this را به عنوان پارا متر به اون پاس بدم
    من از یک کلاس دیگه میخوام فرم فرزند را به فرم 1 add کنم
    حالا میشه بگین چطوری باید فرم 1 را به متد showForm پاس بدم؟

    اگه براتون مقدوره یه نمونه برنامه کوچیک بذارین ممنون میشم

  6. #6
    اولا من یه همچین متدی (addchildForm) ندارم (البته شما حدس زدید که من کدهای اضافه کردن را در این متد نوشتم )
    والا من از رو این برنامه ای که اینجا گذاشتید به شما جواب دادم و طبق اون راه درستش گفتم.
    شما کدی که دارید اینجا بزارید تا دوستان بهتر کمک کنند

  7. #7
    نقل قول نوشته شده توسط once4ever مشاهده تاپیک
    والا من از رو این برنامه ای که اینجا گذاشتید به شما جواب دادم و طبق اون راه درستش گفتم.
    شما کدی که دارید اینجا بزارید تا دوستان بهتر کمک کنند
    بهتره سوال را اینطوری مطرح کنم شاید بهتر متوجه بشین
    یه برنامه داریم که 3 تا فرم به نام های Form1 و Form2 و Form3داریم

    حال میخواهیم در فرم 3 یه آبجکت از فرم 2 ساخته و اونو به فرم 1 اضافه کنیم
    خاصیت ISMdiContainer مربوط به فرم 1 نیز true میباشد
    حال پیدا کنید پرتقال را ......
    دیگه ساده تر از این نمیشد گفت

  8. #8
    کاربر دائمی آواتار hmm
    تاریخ عضویت
    مهر 1382
    محل زندگی
    ایران - یزد
    پست
    1,229
    کد پست اول شما درسته ، من هم از همین روش استفاده میکنم و به خوبی خواب میده

  9. #9
    نقل قول نوشته شده توسط hmm مشاهده تاپیک
    کد پست اول شما درسته ، من هم از همین روش استفاده میکنم و به خوبی خواب میده
    تو پست اول 2 تا کد هست
    من بحثم وی کد دوم هست وگر نه کد اول که روش استاندار هستش
    منظور شما هم کد دوم هست؟

  10. #10
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    یه برنامه داریم که 3 تا فرم به نام های Form1 و Form2 و Form3داریم

    حال میخواهیم در فرم 3 یه آبجکت از فرم 2 ساخته و اونو به فرم 1 اضافه کنیم
    خاصیت ISMdiContainer مربوط به فرم 1 نیز true میباشد
    در Form3:

    Form1 frm1 = new Form1();
    Form2 frm2 = new Form2();
    frm1.IsMdiContainer = true;
    frm2.MdiParent = frm1;

    چیزی مثل بالا باید باشه.

  11. #11
    خوب چی شد؟
    منتظرم
    مرسی
    1. کد دوم شما در پست اول به دلیلی که گفتم صحیح نمیباشد.
    2. برای تعریف کردن یک فرم چایلد برای فرم اول هیچ راهی نیست جز اینکه به عضو کلاس فرم اولت دسترسی داشته باشی
    ....
    بنابر این ببین آیا میتونی به نحوی به اون تابع پاس بدی یا نه. یا اینکه فرم از همون فرم اول باز بشه ولی رویدادش از اون کلاس صدا زده بشه.

  12. #12
    یه برنامه داریم که 3 تا فرم به نام های Form1 و Form2 و Form3داریم

    حال میخواهیم در فرم 3 یه آبجکت از فرم 2 ساخته و اونو به فرم 1 اضافه کنیم
    خاصیت ISMdiContainer مربوط به فرم 1 نیز true میباشد
    حال پیدا کنید پرتقال را ......
    دیگه ساده تر از این نمیشد گفت
    باید به نحوی در کد فرم سوم (Form3) به اشاره گری به فرم والد (Form1) دسترسی داشته باشید، مثلاً با استفاده از Owner. به این ترتیب می تونید بعد از اینکه فرم دوم رو در Form3 ایجاد کردید، MdiParent اون رو Form1 معرفی و بعد، فرم رو Show کنید. اگر مورد دیگه ای مد نظرتون هست هم می تونید مطرح کنید، فقط مودبانه.
    در صورتی که برخوردی مشابه پستهای 16 به بعد از هر کدام از دو کاربر مشاهده بشه، برخورد میشه.
    موفق باشید.

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

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