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

نام تاپیک: محدود كردن اجراي دوباره يك فرم

  1. #1
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    Question محدود كردن اجراي دوباره يك فرم

    سلام
    بنده برنامه اي نوشتم كه داراي چندين فرم هست كه خاصيت فرزند پدري دارند

    بنده ميخوام وقتي فرمي رو اجرا كردم در صورتي كه كاربر دوباره خواست اون فرم رو فراخواني كنه پيغامي مبني بر اينكه فرم در حال اجرا ميباشد نمايش دهد

    اين را هم خاطر نشان شوم كه نميخواهم از showdialog استفاده كنم چون ميخوام چندين فرم به صورت همزمان فعال باشد

    ممنون از شما دوستان

  2. #2

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    با سلام خدمت شما دوست عزیز


    راحت ترین راه ممکن :


    int r=0;
    foreach (Form f in Application.OpenForms)
    {
    if (f.Text.CompareTo("Form2")==0) r = 1;
    }

    if (r == 1) MessageBox.Show("Error");
    else
    {
    Form2 frm = new Form2();
    frm.MdiParent = this;
    frm.WindowState = FormWindowState.Maximized;
    frm.Show();
    }




    موفق باشین
    بایت بایت
    آخرین ویرایش به وسیله Y_Safaiee : سه شنبه 03 مرداد 1391 در 12:40 عصر

  3. #3
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    جواب نداد

    انگار نه انگار كه براش كد نوشتم

  4. #4

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    با سلام مجدد

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

    2.f.Text.CompareTo("Form2")==0 کپشن فرمتونو بررسی میکنه آیا با کپشن فرمتون یکیه؟

  5. #5
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    تو كپشن فرم مشكل داشت

    ممنون از راهنمائيت

    موفق باشي

  6. #6
    کاربر دائمی آواتار Farshid007
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    Karaj
    پست
    1,249

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    چرا لقمه رو می پی چونید ؟

           foreach (Form Frm in Application.OpenForms)
    {
    if (Frm.Text == "Form2")
    {
    MessageBox.Show("You Cannot Open This form For twice"); return;
    }
    }
    Form2 frm = new Form2();
    frm.MdiParent = this;
    frm.WindowState = FormWindowState.Maximized;
    frm.Show();

  7. #7

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    درود

    من این کد رو نوشتم برای بار اول که میخوام فرم2 رو شو کنم اول پیام Error میده بعد فرم2 رو باز میکنه!!!!

  8. #8
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    آقا Farshid007 عزيز

    من اكثر پست هايي كه دادين رو خوندم نميدونم چطوري فك ميكنيد كه اينطوري با اين لحن صحبت ميكنيد

    ادب هم خوب چيزيه

    نقل قول: محدود كردن اجراي دوباره ي يك فرم
    درود

    من این کد رو نوشتم برای بار اول که میخوام فرم2 رو شو کنم اول پیام Error میده بعد فرم2 رو باز میکنه!!!!

    شما هم از سورس آقا يونس استفاده كني جواب ميده

    من امتحان كردم

    موفق باشي

  9. #9
    کاربر دائمی آواتار ASKaffash
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    تهران
    پست
    2,427

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    سلام
    اگر می خواهید روش علمی را انتخاب کنید از Pattern بنام SingleTone استفاده کنید این Pattern تضمین میکند که یک شی فقط یکبار بیشتر ایجاد نمی شود اگر دقت کرده باشید در VB.NET می توان نوشت Form1.Show این همین مفهوم است یعنی روی کلاس Form1 متد Show یک متد Static است که از SingleTone استفاده میکند و اگر شی قبل ایجاد شده باشد فقط آن را Show می کند

  10. #10

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    فرقی نداره روی دو کد امتحان کردم ولی اول پیام به من نشان داده میشه!

    شاید روند کارم اشتباه هست!
    من دوتا فرم دارم 1 و2 از طریق فرم 1 فرم 2 شو میشه.این کد رو هم توی فرم لود فرم2 نوشتم.

    درسته؟

  11. #11

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    با سلام مجدد

    نه دوست عزیزم این کدها رو باید روی آیتمی که با کلیک روش فرم دومت قراره باز بشه بنویسی,مثلا رو آیتم منوبارت یا دکمه نمایش فرم جدیدت.(تو مثال شما میشه بخشی که تو فرم اول هست و قراره فرم دوم رو نشون بده)

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

    موفق باشی
    بایت بایت

  12. #12

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    ممنون از توجهتون من این کار رو هم کردم ولی با این خطا مواجه شدمerror.png

  13. #13

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    با سلام مجدد خدمت شما

    آهان این مشکل مال اینه که شما IsMdiContainer مربوط به فرم اولتونو برابر true نکردید,فرم اولتونو انتخاب کنید و تو پروپرتیسش خاصیت IsMdiContainer رو برابر با True نمائید.


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


    ...
    Form2 frm = new Form2();
    frm.TopLevel = false;
    this.Controls.Add(frm);
    frm.Show();
    ...


    موفق باشین
    بایت بایت
    آخرین ویرایش به وسیله Y_Safaiee : سه شنبه 03 مرداد 1391 در 18:10 عصر

  14. #14
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    می تونید از Mutex استفاده کنید ... به نظرم این روش منطقی تره ( اگه کتاب سیستم عامل Silberschatz رو خونده باشی ) .... بسیار عالی و مطمئن . برای اینکار فایل Programe.cs برنامتون رو باز کنید و اینطور بنویسید :

    قبل از نوشتن کدها فضای نام System.Threading رو اضافه کنید ....

    static void Main()
    {
    bool instanceCountOne=false;
    Mutex mtx = new Mutex(true, Application.ProductName, out instanceCountOne);
    if (instanceCountOne)
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    Application.Run(new Main());
    mtx.ReleaseMutex();
    }

    }

  15. #15

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    تشکر آقا یونس.جواب گرفتم.

    آقا سیروان این کد به من جواب نداد من از این کدی که نوشتید برای این استفاده میکنم که اگر برنامه در حال اجراست دوباره اجرا نشود.
          static void Main()
    {
    bool instancecountone = false;
    Mutex mtx = new Mutex(true, Application.ProductName, out instancecountone);
    if (instancecountone)
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(fals e);
    Application.Run(new Form1());
    mtx.ReleaseMutex();
    }
    else
    {
    MessageBox.Show("این برنامه قبلا اجرا شده است","خطا", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
    }

  16. #16
    کاربر دائمی آواتار sirvan-me
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    استان البرز
    پست
    251

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

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

  17. #17
    کاربر دائمی آواتار daneshjo90
    تاریخ عضویت
    تیر 1390
    محل زندگی
    چايپاره
    پست
    282

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    آقا سيروان از شما هم ممنون بخاطر اينكه تاپيك منو بي جواب نذاشتيد

    موفق باشي

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

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    سلام.
    راه حل سادش اینه که همه ی فرم ها رو برای اجرا به یک تابع دیگه بفرستی و از اونجا show کنی.فقط قبل از show کردن event ه form.closed ه form رو handle کنی که متوجه بشی فرم بسته شده و اجازه دوباره باز شدن رو داره.
    میتونی از type ه هر فرم به عنوان کلید ه dictionary ه فرمهای باز استفاده کنی
    تقریباً اینطوری

    form1 f = new form1();
    //f.show();
    showform(f);

    List<Type> openForms = new ...
    void showform(Form f){
    if (openForms.Contains(f.GetType())){
    Exception up = new Exception("Form " + f.Title + " is open");
    throw up;
    }
    else{
    openForms.Add(f.GetType());
    form.FormClosed+= f_close;
    form.show();

    }
    }
    void f_close(object sender, eventargs e){
    openForms.Remove(sender.GetType());
    }


    ولی به نصیحت من گوش کن:
    من اینها رو امتحان کردم:
    Tab Control
    Tree View
    Message Loop Per Form
    Single Instance
    ....

    تنها چیزی که ۶ ماه کاربرها رو خوشحال کرد تغییر Title ه فورم بود.

  19. #19

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    این کد رو در کلاس خود اون فرم اضافه کنید تا اگه دید تنها نمونه موجود نیست خودش مانع نمایش خودش بشه :

    protected override void OnCreateControl()
    {
    foreach (Form form in Application.OpenForms)
    {
    if ((form != this) && (form.GetType() == this.GetType()))
    {
    MessageBox.Show("your message.");
    this.Dispose();
    return;
    }
    }
    base.OnCreateControl();
    }

  20. #20
    کاربر دائمی آواتار Farshid007
    تاریخ عضویت
    بهمن 1389
    محل زندگی
    Karaj
    پست
    1,249

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    سلام اقای Fast code من بعضی جاها به شما بی احترامی کردم .شرمنده
    شما استاد من هستید .

    Message Loop Per Form
    Single Instance
    چیه؟

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

    نقل قول: محدود كردن اجراي دوباره ي يك فرم

    نقل قول نوشته شده توسط Farshid007 مشاهده تاپیک
    سلام اقای Fast code من بعضی جاها به شما بی احترامی کردم .شرمنده
    شما استاد من هستید .

    Message Loop Per Form
    Single Instance
    چیه؟
    سلام
    اشکالی نداره من هم قبلاً از این کارها کردم.پیش میاد.

    Message Loop
    حلقه ای هست که از system پیغام های مربوط به برنامه رو میگیره.
    وقتی یک برنامه یک پیغام رو میگیره, کنترل به حلقه برنمیگرده تا پردازش پیغام تموم بشه.
    حالا این پیغام میتونه هر چیزی باشه(click,mouse_move,form_close)
    اگر هر فرم یک message loop داشته باشه اگر پردازش پیغامی طول بکشه(تعریف هنگ کردن), بقیه فرمها هنگ نمیکنن چون از یک loop ه دیگه استفاده میکنند.

    single instance هم یعنی همین کاری که ما داریم سعب میکنیم انجام بدیم.

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

  1. نحوه ی ارتباط و پاس كردن مقادير ميان چند فرم ويندوز
    نوشته شده توسط محمد مومنی در بخش C#‎‎
    پاسخ: 41
    آخرین پست: سه شنبه 01 بهمن 1392, 14:59 عصر
  2. پاسخ: 5
    آخرین پست: یک شنبه 15 خرداد 1390, 10:04 صبح
  3. سوال: محدود كردن حركت فرم
    نوشته شده توسط RezaS_1354 در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: پنج شنبه 07 آذر 1387, 21:57 عصر
  4. محدود کردن select در یک فرم
    نوشته شده توسط IC_prog در بخش Foxpro
    پاسخ: 22
    آخرین پست: چهارشنبه 25 اردیبهشت 1387, 08:56 صبح
  5. نحوه محدود کردن حرکت ماوس روی فرم
    نوشته شده توسط amir_pro در بخش C#‎‎
    پاسخ: 6
    آخرین پست: جمعه 17 فروردین 1386, 23:00 عصر

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

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