PDA

View Full Version : سوال: چطور پنجره لاگین رو بعد از لاگین شدن ببندمک که کل نرم افزار بسته نشه؟



ostovarit
دوشنبه 24 خرداد 1389, 17:28 عصر
چطور پنجره لاگین رو بعد از لاگین شدن ببندم که کل نرم افزار بسته نشه؟

visible = false نمیخوام بکنم!
this.close() و application.exit() کل نرم افزار رو میبنده و صفحه اصلی رو بعد از لاگین نمیاره...

لطفا راه حل را بفرمایید؟

حجتی نیا
دوشنبه 24 خرداد 1389, 17:43 عصر
منم این مشکل را دارم. بعد اینکه فرم اصلی لود میشه صفحه لوگین رو میبندم اما بسته نمیشه.

Afshin160
دوشنبه 24 خرداد 1389, 18:02 عصر
سلام ....
لينك زير كمك تون مي كنه .
http://www.barnamenevis.org/forum/showpost.php?p=990789&postcount=4
http://www.barnamenevis.org/forum/showpost.php?p=990789&postcount=4

Open-Source
دوشنبه 24 خرداد 1389, 18:13 عصر
من اینطوری کار میکنم که:
قبل از لود شدن فرم اصلی، فرم Login را بصورت ShowDialog باز میکنم و توی رویداد FormClosing آن Cancel رو برابر True قرار میدم؛ اگه لاگین صورت گرفت Cancel رو False کرده بعد فرم لاگین رو میبندم.

مثل این مثال (فرم1 همون فرم اصلی و فرم2 همون فرم لاگین است).

حجتی نیا
دوشنبه 24 خرداد 1389, 19:35 عصر
من اینطوری کار میکنم که:
قبل از لود شدن فرم اصلی، فرم Login را بصورت ShowDialog باز میکنم و توی رویداد FormClosing آن Cancel رو برابر True قرار میدم؛ اگه لاگین صورت گرفت Cancel رو False کرده بعد فرم لاگین رو میبندم.
منم از این روش استفاده میکنم ولی الان چون گرافیک فرم اولم بالاست وقتی بخوام فرم لاگین رو لود کنه،برنامه کند میشه. واسه حلش اومدم اول فرم لاگین رو لود میکنم و بعدش فرم اولی رو اما مشکل الان اینه که بعد واردشدن به فرم اصلی نمیتونم فرم لاگین رو ببندم چون تو login-load فرم اصلی رو show کردم به همین دلیلی تا وقتی که فرم اصلی بسته نشه،فرم لاگین هم بسته نمیشه..

akarsu
دوشنبه 24 خرداد 1389, 20:37 عصر
منم از این روش استفاده میکنم ولی الان چون گرافیک فرم اولم بالاست وقتی بخوام فرم لاگین رو لود کنه،برنامه کند میشه. واسه حلش اومدم اول فرم لاگین رو لود میکنم و بعدش فرم اولی رو اما مشکل الان اینه که بعد واردشدن به فرم اصلی نمیتونم فرم لاگین رو ببندم چون تو login-load فرم اصلی رو show کردم به همین دلیلی تا وقتی که فرم اصلی بسته نشه،فرم لاگین هم بسته نمیشه..
شما ميتونيد يه splash درست كنيد براي برنامتون...
و هم ميتونيد فرم لاگين رو براي رفع مشكلتون hide كنيد....:متفکر:

ostovarit
دوشنبه 24 خرداد 1389, 20:42 عصر
شما ميتونيد يه splash درست كنيد براي برنامتون...
و هم ميتونيد فرم لاگين رو براي رفع مشكلتون hide كنيد....:متفکر:

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

شما برای اینکه تا پنجره ها بسته نشدند فرم اصلی بسته نشود چه میکنید؟

حجتی نیا
دوشنبه 24 خرداد 1389, 23:21 عصر
شما ميتونيد يه splash درست كنيد براي برنامتون...
و هم ميتونيد فرم لاگين رو براي رفع مشكلتون hide كنيد....:متفکر:
توضیحی راجع به splash میدین چیه؟؟؟

ostovarit
دوشنبه 24 خرداد 1389, 23:34 عصر
توضیحی راجع به splash میدین چیه؟؟؟

splash به صفحه ای گفته میشه که قبل از باز شدن صفحه اصلی نمایشداده میشه معمولا نام نرم افزار حقوق انتشار حق کپی رایت و ... رو داخلش مینویسند ... اکثر نرم افزار ها دارند باید دیده باشید (فتوشاپ، کرل و...)

برای یادگیری نحوه ساختشم تو سایت کد پروجکت نمونه های زیادی هست من خودم از اونجا یاد گرفتم :
http://www.codeproject.com/info/search.aspx?artkw=splash

ostovarit
دوشنبه 24 خرداد 1389, 23:39 عصر
من اینطوری کار میکنم که:
قبل از لود شدن فرم اصلی، فرم Login را بصورت ShowDialog باز میکنم و توی رویداد FormClosing آن Cancel رو برابر True قرار میدم؛ اگه لاگین صورت گرفت Cancel رو False کرده بعد فرم لاگین رو میبندم.

مثل این مثال (فرم1 همون فرم اصلی و فرم2 همون فرم لاگین است).

از توجهت ممنونم
نمونه خوبی بود فقط یک مشکلی اگر طرف فرم لاگین رو ببنده بسته نمیشه ؟!
چون bLogin == false هست و مانع بسته شدن صفحه میشه برای این مشکل چه کنم؟
(میخوام کاربر از طریق همون ضربدر بالا پنجره صفحه رو ببنده نمیخوام باتن خروج بسازم)

مطلب دیگه اینکه اگر کاربر بخواد با یوزر دیگه ای لاگین کنه برای نمایش دوباره لاگین و بستن صفحه اصلی فعلی چه باید کرد؟

Open-Source
سه شنبه 25 خرداد 1389, 10:24 صبح
میتونی توی FormClosing این کد رو وارد کنی:

if (bLogin == false)
{
e.Cancel = true;
Environment.Exit(0);
}


برای نمایش فرم لاگین، میتونی هر موقع که خواستی اون رو ShowDialog کنی؛ اگه خواستی فرم اصلیت پیدا نباشه، Opacity اونو 0 کن (اینطوری میتونی یه حالتی افکت مانند هم به فرمت بدی).

mohammad_2039
سه شنبه 25 خرداد 1389, 10:51 صبح
آقا من این کارو میکنم
وقتی دکمه ورود رو در فرم لاگین میزنی بعد از کد هایی که مربوط به نمایش فرم بعدی میشه بنویس this.hide(); حالا وقتی فرم اصلی برنامه نمایش داده شد فرم لاگین مخفی میشه. بعد تو رویداد closing فرم اصلی بنویس application.Exit(); حالا وقتی فرم اصلی رو ببندی کل برنامه به اضافه فرم لاگین که هاید شده بود بسته میشه . موفق باشی:لبخندساده:

ostovarit
سه شنبه 25 خرداد 1389, 16:11 عصر
آقا من این کارو میکنم
وقتی دکمه ورود رو در فرم لاگین میزنی بعد از کد هایی که مربوط به نمایش فرم بعدی میشه بنویس this.hide(); حالا وقتی فرم اصلی برنامه نمایش داده شد فرم لاگین مخفی میشه. بعد تو رویداد closing فرم اصلی بنویس application.Exit(); حالا وقتی فرم اصلی رو ببندی کل برنامه به اضافه فرم لاگین که هاید شده بود بسته میشه . موفق باشی:لبخندساده:

با تشکر منم از روش شما استفاده میکنم و فرم رو هاید میکردم اما این کار اصولی نیست ... وقتی کارمون با پنجره ای تموم میشه باید ببندیمش ... نظر من اینه که شما هم از روشی که جناب Open-Source (http://barnamenevis.org/forum/member.php?u=79096) گفتند استفاده کنید ...

taghvajou
سه شنبه 25 خرداد 1389, 17:04 عصر
سلام به همه
چرا فرم مادر رو MDI نمی کنین؟

حجتی نیا
سه شنبه 25 خرداد 1389, 17:35 عصر
سلام به همه
چرا فرم مادر رو MDI نمی کنین؟
یکمی بیشتر با جرئیات توضیح بدید..لطفا

exlord
سه شنبه 25 خرداد 1389, 18:11 عصر
چرا دنبال کلک رشتی میگردین ....
من فعلا این به ذهنم رسید .........
توی program.cs

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
public static Thread tLog;
public static Thread tmain;
[MTAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
tLog = new Thread(new ThreadStart(tlogStart));
tmain = new Thread(new ThreadStart(tmainStart));

tLog.SetApartmentState(ApartmentState.MTA);
tmain.SetApartmentState(ApartmentState.MTA);
tLog.Start();
}
private static void tlogStart()
{
Application.Run(new Form1());
}
private static void tmainStart()
{
Application.Run(new Form2());
}
}تو فرم لوگین .....

private void button1_Click(object sender, EventArgs e)
{
Program.tmain.Start();
Program.tLog.Abort();
}

حجتی نیا
سه شنبه 25 خرداد 1389, 18:24 عصر
چرا دنبال کلک رشتی میگردین ....
من فعلا این به ذهنم رسید .........
با این روش بعدا میشه اطلاعات رو بین فرما جابجا کرد؟ منظورم استفاده از متغیرهای public فرماست

exlord
سه شنبه 25 خرداد 1389, 19:56 عصر
tmain = new Thread(new ParameterizedThreadStart(Program.tmainStart));


private static void tmainStart(object frm)
{
Application.Run((Form2)frm);
}


private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Width = 600;
Program.tmain.Start(frm2);
Program.tLog.Abort();
}