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

نام تاپیک: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر

  1. #1

    Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر

    با سلام خدمت دوستان

    من در نرم افزار در صفحه اصلی یک panel دارم برای باز کردن دیگر فرمها به شکل زیر عمل میکنم:


    AForm2 af2 = new AForm2();
    af2.Show(panel2);
    1- اگر از ShowDialog استفاده کنم نمیتوانم هم زمان چند فرم را باز کنم و تا زمانی که فرم بسته نشده است به صفحه اصلی دسترسی ندارم آیا برای این موضوع راه حلی وجود دارد که از این متد استفاده شود ولی چند فرم باز شود؟

    2- در روشی که من استفاده کردم برای جلوگیری از باز شدن فرمهایی که در حال حاضر باز هستند چه کدی باید نوشت؟ و کجا؟

    3- برای جلوگیری از بسته شدن فرم اصلی در صورتی که فرم دیگری درون آن باز باشد ( با توجه به روشی که استفاده کردم) چه کدی باید نوشت؟

  2. #2

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    1- ShowDialog تا زمانی که پاسخش را از کاربر نگیرد اجازه دسترسی به فرم اصلی را نمی دهد.

    2- در فرم اصلی یک متغیر تعریف کنید و هر بار فرمی باز شد به آن مقداری بدهید. در صورتی که فرم دیگری فراخوانی شد مقدار این متغیر برسی شده و اجازه ی باز شدن یا نشدن داده شود.

    3- باز هم برسی همان متغیر مذکور

  3. #3
    کاربر دائمی آواتار mehdi5106
    تاریخ عضویت
    مهر 1385
    محل زندگی
    جوين
    پست
    251

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    قبلا تو همین بخش بحث شده...
    باید یک نمونه از فرم ایجاد کنید و پس از بستن اونو dispose کنید و زمانی که فرم باز شده اجازه باز شدن به فرم مشابه را ندهد و فرم جاری را Activate نماید.

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

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    سن
    34
    پست
    608

    Thumbs up نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    سلام.

    شما یه MainForm دارین که به همه فرم هاتون از اونجا دسترسی پیدا می کنین.

    خب حالا در MainForm یه List تعریف می کنین که نام فرم هاتونو بعد از باز کردن فرم های فرزند در اون ADD کنین. و قبل از باز شدن فرم چک می کنین که نام فرمی که میخواین باز کنین در GenericList هست یا نه؟!!!

    حالا وقتی میخواین MainForm ببندین خیلی راحت می گین که اگه تعداد آیتم های لیست 0 باشه فارم رو ببنده.

    متغیر عددی دیگه چیه؟!!!!

  5. #5
    کاربر دائمی آواتار ricky22
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    1,591

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    یک راه استفاده از 2 Thread همزمان هست. می تونی 2 تا دیالوگ باز کنی اما منطق دیالوگ بودن از بین میره

  6. #6

    Cool نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    نقل قول نوشته شده توسط ricky22 مشاهده تاپیک
    یک راه استفاده از 2 Thread همزمان هست. می تونی 2 تا دیالوگ باز کنی اما منطق دیالوگ بودن از بین میره
    مایکروسافت به شدت از کاربران خود می خواهد تا جایی که ممکن است از برنامه نویسی چند نخی استفاده نکنند. این روش فقط در موارد خاص و آن هم به دلیل ناچاری است. استفاده از برنامه نویسی چند نخی برای حل این مسئله مثل کشتن یگ مگس به کمک بمب اتمی است!!!

  7. #7

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    نقل قول نوشته شده توسط mehdi5106 مشاهده تاپیک
    قبلا تو همین بخش بحث شده...
    باید یک نمونه از فرم ایجاد کنید و پس از بستن اونو dispose کنید و زمانی که فرم باز شده اجازه باز شدن به فرم مشابه را ندهد و فرم جاری را Activate نماید.

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

  8. #8
    کاربر دائمی آواتار ricky22
    تاریخ عضویت
    مرداد 1386
    محل زندگی
    شیراز
    پست
    1,591

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    نقل قول نوشته شده توسط jalalx مشاهده تاپیک
    مایکروسافت به شدت از کاربران خود می خواهد تا جایی که ممکن است از برنامه نویسی چند نخی استفاده نکنند. این روش فقط در موارد خاص و آن هم به دلیل ناچاری است. استفاده از برنامه نویسی چند نخی برای حل این مسئله مثل کشتن یگ مگس به کمک بمب اتمی است!!!
    لطفا یک لینک از این توصیه ماکروسافت رو بفرمایید

  9. #9

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

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

    چه کنم؟

    AForm1 af1 = new AForm1();
    bool open = true;
    for (int i = 0; i < Application.OpenForms.Count; i++)
    {
    if (Application.OpenForms[i].Name == "AForm1")
    {
    open = false;
    }
    }
    if (open)
    {
    af1.Show(panel2);
    }
    else
    {
    af1.Activate();
    }

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    سن
    34
    پست
    608

    Thumbs up نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

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

    چه کنم؟

    AForm1 af1 = new AForm1();
    bool open = true;
    for (int i = 0; i < Application.OpenForms.Count; i++)
    {
    if (Application.OpenForms[i].Name == "AForm1")
    {
    open = false;
    }
    }
    if (open)
    {
    af1.Show(panel2);
    }
    else
    {
    af1.Activate();
    }
    سلام.

    شما میتونین اینجوری عمل کنین:

    List<string> l = new List<string>();

    if (!(l.Contains(FormName)))
    {
    //مراحل باز کردن فرم
    }
    else { /*فرم قبلا باز شده است */ }


    حالا یه چیز دیگه. استفاده از پنل برای باز کردن فرم ها دیگه قدیمی شده و همچنین شما چندین فرم رو در یه پنل باز می کنین و این کار درستی نیست مگر اینکه فرم های قبلیتونو در یه Stack ذخیره کنین تا با بستن هر فرم آخرین فرم موجود در Stack رو pop کنین و بیخیال.

    بیاین مثل Enternet Explorer از TabControl استفاده کنین و با هر بار باز کردن یه فرم جدید به صورت دینامیک یه Tab به TabControl اضافه کرده و فرمتون رو در Panel اون Tab اضافه کنین.

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

    برای افزودن تب به صورت دینامیک به TabControl ابتدا یه TabControl به فرم افزوده و مراحل کار را در InitializeComponent بررسی کنید و ببینید خود برنامه چه کدهایی رو مینویسه که یه Tab به TabControl افزوده میشه.

    اگه واقعا مشکلی بود بگو سعی می کنم وقت پیدا کنم و برات یه Sample تهیه کنم.

    موفق باشی.

  11. #11

    نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    نقل قول نوشته شده توسط ACorvinus مشاهده تاپیک
    سلام.

    اگه واقعا مشکلی بود بگو سعی می کنم وقت پیدا کنم و برات یه Sample تهیه کنم.

    موفق باشی.

    با تشکر از اینکه وقت گذاشتی ...

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

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

    - استفاده از پنل که گفتید قدیمی شده ... چه مشکلی داره؟
    - در این روشی که من رفتم چه جوری میشه فرم باز شده رو مجدد Active کرد؟

    نقل قول نوشته شده توسط ACorvinus مشاهده تاپیک
    مگر اینکه فرم های قبلیتونو در یه Stack ذخیره کنین تا با بستن هر فرم آخرین فرم موجود در Stack رو pop کنین و بیخیال.
    -این تیکه رو برام بیشتر توضیح بدید و اگر نمونه ای دارید بزارید ممنون میشم؟

  12. #12
    کاربر دائمی
    تاریخ عضویت
    مهر 1387
    محل زندگی
    تهران
    سن
    34
    پست
    608

    Thumbs up نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    سلام.

    - استفاده از پنل که گفتید قدیمی شده ... چه مشکلی داره؟
    مشکلی نداره، چون پنجره هایی مثل Internet Explorer مد شده و کاربر راحت تره به همین دلیل گفتم قدیمی شده (نسبت به Internet Explorer) !!!

    - در این روشی که من رفتم چه جوری میشه فرم باز شده رو مجدد Active کرد؟
    یه نمونه کد براتون میذارم که مشکلتونو حل می کنه. فقط وقتی میخواین فرمی رو باز کنین، از اون Sample گرفته و به این تابع ارسال کنین:

    void prcTest(object Form)
    {
    Form f = (Form)Form;
    bool Is = false;
    Control Ctl = null;
    if (panel1.Controls.Count >= 1)
    {
    foreach (Control Ctrl in panel1.Controls)
    {
    if (Ctrl is Form && ((Form)Ctrl).Name == f.Name)
    {
    Is = true;
    Ctl = Ctrl;
    break;
    }
    }
    if (Ctl != null)
    ((Form)Ctl).BringToFront();
    }
    if (Is == false)
    {
    f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    f.Dock = DockStyle.Fill;
    f.TopLevel = false;
    panel1.Controls.Add(f);
    f.BringToFront();
    f.Show();
    }
    }


    -این تیکه رو برام بیشتر توضیح بدید و اگر نمونه ای دارید بزارید ممنون میشم؟
    ماجراش طولانیه. بذار واس بعد.
    اگه مشکلی داشتی بهم بگو. موفق باشی.

  13. #13

    Cool نقل قول: Show() یا ShowDialog() سوال این است! و سوالات کوچک دیگر ... لطفا راهنمایی بفرمایید ...

    نقل قول نوشته شده توسط ricky22 مشاهده تاپیک
    لطفا یک لینک از این توصیه ماکروسافت رو بفرمایید

    Windows Presentation Foundation (WPF) is designed to save developers from the difficulties of threading. As a result, the majority of WPF developers won't have to write an interface that uses more than one thread. Because multithreaded programs are complex and difficult to debug, they should be avoided when single-threaded solutions exist.

    Source

برچسب های این تاپیک

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

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