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

نام تاپیک: اضافه کردن form به یک tab control ؟؟

  1. #1
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372

    اضافه کردن form به یک tab control ؟؟

    با سلام :
    من در ویژوال سی 2005 در یک پروژه mfc و مبتنی بر کادر تبادلی یک tab control رو به فرمم اضافه کردم و سه tab به شکل زیر به اون اضافه کردم :
     

    m_ctrlTab.InsertItem(0,_T("test1"));
    m_ctrlTab.InsertItem(1,_T("test2"));
    m_ctrlTab.InsertItem(2,_T("test3"));
    m_ctrlTab.SetCurSel(0);


    حالا سوالم اینه که چطور میشه یک فرم (دیالوگ ) رو به اون اضافه کرد ؟ مثلا برای اضافه کردن یک دیالوگ موجود در برنامه به اون چکار باید کرد ؟

  2. #2
    شما باید ابتدا اندازه و موقعیت منطقه مورد نمایش را پیدا کنید و سپس دیالوگ ها را در آن نمایش دهید، لبنک زیر را نگاه کنید ، دو روش در آن ذکر شده که می توانید از آن ها استفاده کنید.
    در روش اول یک تابعی به نام CreateContents که به خوبی نحوه کار را نشان می دهید:
    http://simplesamples.info/MFC/CTabCtrl.php

  3. #3
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372

    Question

    با سلام :
    با اینکه اون لینک رو دادید ولی در هر حال من باز هم نتونستم متوجه بشم که این کار چطور ممکنه ؟؟
    در مثال اول با این اشکالات مواجه شدم :
    1)ا یک کلاس مشتق شده چطور ایجاد میشه ؟
    In the CTabCtrl derived class create a member variable for the modeless dialog that currently exists in the tab control (which varies based on which tab is selected)
    در کلاس مشتق شده از CTabCtrl یک متغیر عضو برای دیالوگ modless که هم اکنون در tabcontrol وجود دارد ایجاد کنید (که بستگی دارد کدام تب انتخاب شده است )
    2) متغیر های موجود در جدول در کجا باید تعریف شوند ؟

    3) آیا تابع CreateContents را خودمان ایجاد می کنیم یا اینکه جزء توابع ویژال سی است ؟

    Add a member function to the CTabCtrl derived class to create a modeless dialog to be the content for each tab; I called mine "CreateContents". This member function will be called once for each tab's dialog.
    یک تابع عضو به کلاس مشتق شده از CTabCtrl اضافه کنید تا یک دیالوگ modeless خلق کنید که محتوی هر tab است که ان را CreateContents نامیدم .این تابع عضو یک بار برای هر دیالوگ tab فراخوانی خواهد شد .

    در کل ممکنه بیشتر توضیح بدید چون حدود یک هفته میشه که باهاش سر و کله میزنم !
    کاری که من انجام دادم این بود :اول یک پروژه dialog based ایجاد کردم در دیالوگ اصلی یک tab control رو به فرمم اضافه کردم و یک متغیر عضو به نام m_ctlTab (همانند مثال) واسش تعریف کردم بعد هم سه تا دیالوگ جدید اضافه کردم و خاصیت style از نوع child و title bar رو false کردم .برای دیالوگ ها هم کلاس تعریف کردم اما در مورد قرار دادن و کپی کردن کدها اشکال داشتم . . .
    با تشکر

  4. #4
    نقل قول نوشته شده توسط eshgh_82 مشاهده تاپیک
    1) یک کلاس مشتق شده چطور ایجاد میشه ؟

    2) متغیر های موجود در جدول در کجا باید تعریف شوند ؟

    3) آیا تابع CreateContents را خودمان ایجاد می کنیم یا اینکه جزء توابع ویژال سی است ؟
    شما قبل از ادامه کار با MFC ، نیاز به مطالعه یک کتاب در مورد MFC دارید تا با مفاهیم MFC و oop خوب آشنا شوید ، ادامه کار از طریق خواندن مقاله و یا سوال به شما کمک زیادی نسبت به مطالعه کتاب نخواهد کرد.

    1) در MFC وقتی گفته می شود یک کلاس مشتق شده از یک کنترل یا هر چیز دیگر بسازید یعنی از طریق class wizard این کار را باید انجام دهید. در مقاله ذکر شده ، پس از اضافه کردن کنترل Tab به دیالوگ ، باید از طریق class wizard یک کلاس با نام دلخواه بسازید که نوع base class آن باید CTabCtrl باشد (در مقاله نام دلخواه مشخص شده)

    2) این همان قسمت OOP یا شئی گرایی است:
    از طریق قابلیت add variable ( با راست کلیک کردن بر روی کنترل شما ) و یا اضافه کردن راحت و ساده متغیر ها در همان کلاس ساخته شده در مرحله 1 ، به صورت اعضای private

    3) کاملا واضح است که یک یک تابع عضو با نام دلخواه کلاس است که خودتان باید بسازید.
    ...I called mine CreateContents...
    از متد GetCurSel استفاده می کند تا بداند کدام tab فعال شده است.

    ------------------------
    این هم یک مقاله دیگر که ساده تر و کامل تر ، از اول تا آخر ، حتی class wizard را هم توضیح می دهد: http://www.codersource.net/mfc_ctabctrl.html

    در پایان این مقاله و همین طور مقاله قبلی در پست قبل ، فایل sample قابل دریافت است ، حتما نگاه کنید.

    موفق باشید

  5. #5
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    البته من فکر می کنم مشکل اساسی تفاوتهایی هست که بین ویژوال 2005 و ویژوال 6 وجود داره لینک دومی رو که دادید رو با ویژوال 2005 نتونستم اجرا کنم و مجبور شدم ویژوال 6 رو نصب کنم و با اون تونستم بالاخره جواب بگیرم حالا سوالی که پیش میاد اینه که برای افزودن یک کلاس مشتق شده در ویژوال 2005باید چیکار کنیم ؟ چون در اونجا نه class wizard ی هست و نه اینکه از قسمت add class چیزی به نام base class وجود داره!
    بعد هم در اون لینک چه متغیر و یا متغیر هایی اندازه tab control رو مشخص می کند.
    با تشکر

  6. #6
    نقل قول نوشته شده توسط eshgh_82 مشاهده تاپیک
    چون در اونجا نه class wizard ی هست و نه اینکه از قسمت add class چیزی به نام base class وجود داره!
    در visual C++‎ 2005 از طریق منوی Project و سپس Add class ، در دیالوگ ظاهر شده MFC class را انتخاب کنید و Add را کلیک کنید . wizard ظاهر می شود ، به همین راحتی.

    بعد هم در اون لینک چه متغیر و یا متغیر هایی اندازه tab control رو مشخص می کند.
    خوب وقتی شما اندازه کنترل را به صورت دستی به دیالوگی اضافه می کنید ، دیگر نیازی به متغیر برای تنظیم اندازه خود tab ندارید.

  7. #7
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    در visual C++‎ 2005 از طریق منوی Project و سپس Add class ، در دیالوگ ظاهر شده MFC class را انتخاب کنید و Add را کلیک کنید . wizard ظاهر می شود ، به همین راحتی.

    من شکل دیالوگی رو که همیشه از اون استفاده می کنیم و شما گفتید رو در زیر آوردم و منوی base class رو هم باز کردم حالا میشه بگید mfc class کدومه ؟؟ ضمنا در اینجا دکمه add ی وجود نداره فقط finish هست
    که بعد از کلیک کردن اون کلاس ایجاد میشه (اما فکر نکنم مشتق شده باشه).



    در ضمن من این دیالوگ رو در برنامه ای باز کردم که tab control روی فرمش بود پس چرا ctabctrl در base class وجود نداره ؟

  8. #8
    شما وقتی وارد منوی project می شوید نباید در قسمت طراحی دیالوگ باشید و همین طور نباید در هیچ جای دیگری باشید. فقط روی solution explorer و آن هم بر روی فایل build شما که با2 علامت مثبت روی آیکن ان مشخص شده است و یا بر روی هر صفحه ای از کدها .h یا cpp. پروژه می توانید باشید .

    باز شدن class wizard ربطی به دیالوگ مورد نظر ندارد ، بلکه این کار را برای پروژه شما انجام می دهد.

  9. #9
    خوب این را هم توضیح بدم که در قسمت Initializing and Activating the Tab Sheets in CTabCtrl در مقاله دوم ، برای ارتباط ID کنترل با دیالوگ و کلاس ساخته شده ، در VC++‎ 2005 نباید Class wizard را انتخاب کنید ، بلکه با راست کلیک کردن بر روی کنترل tab در نمای طراحی دیالوگ گزینه Add variable را باید انتخاب کنید.

  10. #10
    کاربر دائمی آواتار A_Salimi
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    North khorasan-Esfarayen
    پست
    372
    با سلام

    از وقتی که TABCONTROL رو به برنامه اصلیم اضافه کردم در ابتدای اجرای برنامه با یک ERROR مواجه میشم که بعد از زدن دکمه Retry و یا Ignor به این خط از برنامه در فایل dlgdata.cpp راهنمایی میشم و بعدش برنامه کامل و بی نقص اجرا میشه . . . ممکنه بگید ایراد از کجاست ؟
     
    ASSERT(!pDX->m_bSaveAndValidate);
    pDX->PrepareCtrl(nIDC);
    HWND hWndCtrl;
    pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    با تشکر

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

  1. مقاله جامع: User Control ها و Custom Control ها در ASP.NET
    نوشته شده توسط Behrouz_Rad در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 12
    آخرین پست: سه شنبه 24 اردیبهشت 1392, 10:35 صبح
  2. فرق form.showبا form.dialogsho
    نوشته شده توسط eshaghi در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 07 بهمن 1386, 17:50 عصر
  3. 2سوال در رابطه با FORM ها ؟؟
    نوشته شده توسط omidreza812 در بخش VB.NET
    پاسخ: 1
    آخرین پست: چهارشنبه 24 مرداد 1386, 14:37 عصر
  4. refresh کردن master form از طریق detail form
    نوشته شده توسط mojtaba_abolhasani در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: سه شنبه 24 شهریور 1383, 18:05 عصر

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

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