PDA

View Full Version : چك كردن باز بودن يك فرم



mehdin69
شنبه 18 دی 1389, 10:06 صبح
سلام.
چطوري ميشه چك كرد كه آيا يه فرم توي برنامه باز هست يا خير؟؟؟
و اگه باز هست دوباره همون فرمي كه باز بوده رو نشون بده نه اينكه يه فرم جديد باز شه؟؟؟
مرسي

navidiran
شنبه 18 دی 1389, 10:17 صبح
فکر کنم اینطوری بشه نتیجه گرفت:


if (Form.ActiveForm == frmForm1.ActiveForm)
{ do{ loop; } }

mehdin69
شنبه 18 دی 1389, 12:18 عصر
ببينيد فكر كنيد ما يه فرم1 داريم و يه button1 و مي خوايم وقتي روي دكمه كليك مي كنيم فقط بار اول اين فرم باز بشه و براي دفعات بعدي چك كنه اگه فرم 1 يه جايي از پروژه باز هست همون فرمي كه باز هست رو نشون بده نه اينكه بياد يه فرم1 جديد رو باز كنه....
نمي دونم خوب توضيح دادم يا نه:متفکر:

amir-yeketaz
شنبه 18 دی 1389, 12:57 عصر
ببین این به کارت میاد!

foreach (Form item in Application.OpenForms)
{
if (item is Form1)
{
//do

}

}

hossin.esm
شنبه 18 دی 1389, 13:00 عصر
Form2 Form2 = (Form2)Application.OpenForms["form2"];
Form2.textBox1.Text = "test";

meysamrt
شنبه 18 دی 1389, 13:07 عصر
foreach(Form frm in Application.OpenForms)
if(frm is Form1)
{
frm.Activate();
return;
}
Form1 form=new Form1();
frm.Show();

tooraj_azizi_1035
شنبه 18 دی 1389, 13:08 عصر
سلام،
دوستان نیازی به استفاده از حلقه foreach نیست چون هزینه بالا می ده.

Application.OpenForms حاوی تمام فرم های برنامه است. داخل [] اسم فرمت رو بنویس و با null مقایسه کن اگه null باشه می تونی ایجادش کنی اگه نه بایدBringToFront() کنی. :قلب:

mehdin69
شنبه 18 دی 1389, 13:14 عصر
خب اينو انجام دادم اما نمي دونم چطوري بگم برو همون فرم يكي رو باز كن كه الان باز هست... چطوري اون فرمي كه الان باز هست رو دوباره نمايش بدم رو صفحه؟؟؟؟
آخه شايد رفته باشه زير يه 2 تا فرم ديگه
مي خوام بياد رو و دوباره بشه ديدش

tooraj_azizi_1035
شنبه 18 دی 1389, 13:16 عصر
گفتم که از متد BringToFront() فرم استفاده کن.

tooraj_azizi_1035
شنبه 18 دی 1389, 13:17 عصر
گفتم که از متد BringToFront فرمت استفاده کن.

ACorvinus
شنبه 18 دی 1389, 13:18 عصر
دوستمون جواب رو بهتون گفتن:


if (Application.OpenForms["Form2"] != null)
{
Application.OpenForms["Form2"].BringToFront();
}
else
{
Form2 frm = new Form2();
frm.Show();
}

meysamrt
شنبه 18 دی 1389, 13:21 عصر
آقا ايني كه من گفتم رو تست كن جواب ميده.

tooraj_azizi_1035
شنبه 18 دی 1389, 13:24 عصر
آقا ايني كه من گفتم رو تست كن جواب ميده.

وقتی مستقیماً می شه بهش دسترسی داشت چرا از foreach که هزینه بره استفاده کنه؟

meysamrt
شنبه 18 دی 1389, 13:34 عصر
وقتی مستقیماً می شه بهش دسترسی داشت چرا از foreach که هزینه بره استفاده کنه؟

دوست عزيز. اگر از [] استفاده كني داخل خودش داره از foreach استفاده مي كنه و هزينه هر دو يكسانه.

tooraj_azizi_1035
شنبه 18 دی 1389, 13:39 عصر
یعنی اگه یک آرایه 1000000 عنصری داشته باشیم برای دستیابی به عنصر 999999 عناصری قبلی اش اسکن می شوند؟
دسترسی مستقیم صورت می گیرد. تازه شما در کدتون مقایسه رو انجام می دید.
اگر شما مطمئن باشید که در یک آرایه تمام عناصر یکتا هستند آیا برای دستیابی از اندیس آن استفاده می کنید یا با مقایسه تک تک عناصر به آن دست پیدا می کنید؟ اگر این طور باشد چرا به RAM حافظه با دستیابی مستقیم می گویند؟
علت را شرح دهید.

mehdin69
شنبه 18 دی 1389, 13:48 عصر
داخل [] چطوري اسم فرم رو بنويسم؟؟؟
int رو مي گره فقط....

tooraj_azizi_1035
شنبه 18 دی 1389, 13:55 عصر
مگه این کد جواب نمی ده؟
Application.OpenForms["Form2"].BringToFront();

mehdin69
شنبه 18 دی 1389, 13:57 عصر
مرسي
حالا شد
دستتون درد نكنه

tooraj_azizi_1035
شنبه 18 دی 1389, 14:00 عصر
کار BringToFront اینه که اگه فرم زیر فرم های دیگه باشه اون رو میاره روی همه فرم ها. این کد رو تست کردم جواب می ده:

if (Application.OpenForms["Form2"] != null)
{
Application.OpenForms["Form2"].BringToFront();
}
else
{
Form2 frm = new Form2();
frm.Show();
}

ACorvinus
شنبه 18 دی 1389, 14:00 عصر
داخل [] چطوري اسم فرم رو بنويسم؟؟؟
int رو مي گره فقط....

به نظر من یا شما کل پست هارو نمیخونین یا همه رو گرفتین اینجا و دارین به ریشمون میخندین؟!!!
از مدیران فروم تقاضا می کنم این پست منو به عنوان اهانت به کاربر در نظر نگیرن چون جواب به ایشون داده میشه و دوباره دارن سوال می پرسن!!!

mehdin69
شنبه 18 دی 1389, 14:37 عصر
به نظر من یا شما کل پست هارو نمیخونین یا همه رو گرفتین اینجا و دارین به ریشمون میخندین؟!!!
از مدیران فروم تقاضا می کنم این پست منو به عنوان اهانت به کاربر در نظر نگیرن چون جواب به ایشون داده میشه و دوباره دارن سوال می پرسن!!!


من از حضور شما معذرت مي خوام
يه بار تست كردم ارور داد بايد با آزمون خطا دوباره تست مي كرم اما سريع سوال پرسيدم
ببخشيد

meysamrt
شنبه 18 دی 1389, 17:59 عصر
یعنی اگه یک آرایه 1000000 عنصری داشته باشیم برای دستیابی به عنصر 999999 عناصری قبلی اش اسکن می شوند؟
دسترسی مستقیم صورت می گیرد. تازه شما در کدتون مقایسه رو انجام می دید.
اگر شما مطمئن باشید که در یک آرایه تمام عناصر یکتا هستند آیا برای دستیابی از اندیس آن استفاده می کنید یا با مقایسه تک تک عناصر به آن دست پیدا می کنید؟ اگر این طور باشد چرا به RAM حافظه با دستیابی مستقیم می گویند؟
علت را شرح دهید.

اگر شما آرایه ای 1,000,000 عنصری داشته باشی که مرتب شده نباشد و بخواهی به عنصری نامشخص در آن دسترسی داشته باشی که باید با مقایسه یافت شود مجبوری با مقایسه تک تک عناصر اون عنصر را پیدا کنی. OpenForms هم یکی از همین آرایه هاست.

tooraj_azizi_1035
یک شنبه 19 دی 1389, 09:17 صبح
خیر، برنامه نویس می داند که در OpenForms به دنبال چه چیزی است. مستقیماً نام فرم را در "" قرار می دهد و به آن دست پیدا می کند. تست کنید.

meysamrt
یک شنبه 19 دی 1389, 11:59 صبح
برنامه نويس مي داند اما برنامه نمي داند. ضمنا من نگفتم راه حل شما اشتباه است. گفتم روند شما و من يكي است و فرقي با هم ندارن.
من آخرين حرفم رو زدم. در ضمن اينجا محيط كل كل نيست و من براي ارضاي تعصبات شما اينجا نيامدم.
قصدم راهنمايي بود نه خودنمايي. شما هر روالي را كه مايليد پيش بگيريد.

mehdin69
یک شنبه 19 دی 1389, 14:48 عصر
برنامه نويس مي داند اما برنامه نمي داند. ضمنا من نگفتم راه حل شما اشتباه است. گفتم روند شما و من يكي است و فرقي با هم ندارن.
من آخرين حرفم رو زدم. در ضمن اينجا محيط كل كل نيست و من براي ارضاي تعصبات شما اينجا نيامدم.
قصدم راهنمايي بود نه خودنمايي. شما هر روالي را كه مايليد پيش بگيريد.

بله شما درست مي گيد اما به نظرتون خلاصه كردن كد بهتر نيست؟؟؟
به نظرم كه كم كردن كد هنري هست براي خودش

tooraj_azizi_1035
شنبه 10 اردیبهشت 1390, 11:10 صبح
برنامه نويس مي داند اما برنامه نمي داند. ضمنا من نگفتم راه حل شما اشتباه است. گفتم روند شما و من يكي است و فرقي با هم ندارن.
و من براي ارضاي تعصبات شما اينجا نيامدم.
قصدم راهنمايي بود نه خودنمايي. شما هر روالي را كه مايليد پيش بگيريد.

من آخرين حرفم رو زدم. در ضمن اينجا محيط كل كل نيست
مگر من گفتم جای کل کل است؟ این شما هستید که نام بحث علمی را کل کل می گذارید!

من براي ارضاي تعصبات شما اينجا نيامدم.
من برای چیزی که می گویم تعصب ندارم بلکه منبع دارم!
روند من و شما یکی نیست. برای استدلال خود منبع ارائه نمائید.