PDA

View Full Version : باز کردن چند تا فرم روی یک فرم



آرام جان گل
دوشنبه 22 مرداد 1386, 15:06 عصر
سلام

من فرمی دارم که بازدن یکی از دکمه هایش یک فرم دیگر باز می شود

فرم دوم هم دکمه ای دارد که با زدن آن فرم سومی باز می شود و فرم سوم هم عملیاتی خودکار برای باز کردن فرم چهارم انجام می دهد

لطفا اگر خندتون گرفته نخندید می دونم این قضیه مثل کادوی تولد شده که کادوی آخر توی ده تا کادوی دیگست

ولی واقعا نیازه چون گاهی احتیاجه که از اواسط برنامه بتونیم دوباره به اول برنامه برگردیم

خوب حالا مشکل من :
من برای باز شدن فرم دوم این کد را می نویسم:


this.Close();
users user = new users();
user.ShowDialog();

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

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

ولی این فرم اول که بازه اعصاب من را خط خطی می کنه

لطفا راهنمایی کنید

rasoul_ras
دوشنبه 22 مرداد 1386, 15:22 عصر
this.Hide();
Form2 frm = new Form2();
frm.ShowDialog();


اگه منظورتو فهمیده باشم این کد کارتو را می اندازد

آرام جان گل
سه شنبه 23 مرداد 1386, 20:42 عصر
سلام
اول ممنون از شما
من در مورد برنامه ام توضیح می دهم چون من نمی خواهم wizard بسازم

کلاسی که main داره یک اسپلش است که هفت ثانیه نمایش می یابد(اولین فرمی که تو هوا باقی می مونه) و بعد فرم دوم که فرم login است که کاربر با کلمه عبور و رمز وارد شده (دومین فرمی که تو هوا می مونه) بعد فرم اصلی برنامه بازشده و در بخشی از این فرم ممکنه کاربر بخواهد تغییر وضعیت بدهد پس باید دوباره به فرم login دسترسی داشته باشه حالا فرم اصلی برنامه هم شد جزو فرم های توی هوا

اگر کاربر بتونه از طریق فرم login وارد بشه این فرم (login دوم) هم تو هوا رها می شه و دوباره فرم اصلی باز میشه

راه hide کردن هم صفحه را مخفی می کنه ولی من می خوام از رو ی نوار وظیفه اینها برداشته بشن والکی یه چیزی باز نباشه

مرسی
راهنمایی کنید.

ghafoori
سه شنبه 23 مرداد 1386, 22:34 عصر
دوست عزیز هر کدام از فرم ها که نمی خواهی در taskbr باشند خاصیت showInTaskbar انها را برابر false قرار بده

PC2st
سه شنبه 23 مرداد 1386, 23:40 عصر
جناب "آرام جان گل" یک مورد عجیب! کدهای شما را در فرم نوشتم، نه تنها فرم اول روی صفحه نماند، بلکه فرم دوم هم سریعا Close میشد!؟!

Mohammadreza Heidari
چهارشنبه 24 مرداد 1386, 00:45 صبح
همونطور که دوست خوبمون آقای غفوری گفتن از این کد هم میشه استفاده کرد :


this.Hide();
this.ShowInTaskbar = false;
Form frm = newForm();
frm.Show();


:تشویق:

SMRAH1
چهارشنبه 24 مرداد 1386, 03:15 صبح
سلام

من سالهاست VC++6 کار می کنم و تاره دارم #C یاد می گیرم.
به نظر من بهتره تابع Main رو اینطوری بنویسی

application.Run(new Form1)
application.Run(new Form2)
application.Run(new Form3)
application.Run(new Form4)
...

موفق باشی

اَرژنگ
چهارشنبه 24 مرداد 1386, 08:18 صبح
سلام

من سالهاست VC++6 کار می کنم و تاره دارم #C یاد می گیرم.
به نظر من بهتره تابع Main رو اینطوری بنویسی

application.Run(new Form1)
application.Run(new Form2)
application.Run(new Form3)
application.Run(new Form4)
...

موفق باشی
این کد را خودتان امتحان کردید؟

MH2538
چهارشنبه 24 مرداد 1386, 09:43 صبح
سلام
دوست خوب من
من هم مثل شمما برنامه های زیادی نوشتم که هم اسپلش داشته و هم نیاز به Login ولی اینوطوری که شما کار کردید کار نکردم.
من روشم رو میگم شاید این روش مشکلتون رو حل کنه.
من همیشه همون اول فرم اصلی رو نتو startup پروژه میگذارم بعد بسته به اینکه بخو.ام فقط اسپلش دیده باشه یا اسنکه اسپلش روی فرم اصلی دیده بشه اون رو قبل از Initialize برنامه و یا توی FormLoad میگذارم.
بعد از پایان مدت زمان نمایش اسپلش فرم login رو توی FormLoad صدا می زنم اما با تابع ()ShowDialog اما فرم اسپلش رو با تابع ()Show صدا می زنم .
اینطوری به مشکلاتی که شما گفتید هم بر نمی خورم

حامد مصافی
چهارشنبه 24 مرداد 1386, 09:48 صبح
نیازی نیست در هر فرم، فرم بعدی رو فراخوانی کنید. فرم هایی مثل فرم های login یک دیالوگ هستند و از نظر استاندارد های تولید نرم افزار کادر هایی برای جمع آوری اطلاعات هستند. اگر پیمانه این فرم ها شامل کد های راهبردی روتین اصلی نرم افزار باشد باعث بوجود آمدن سردرگمی میان کد های برنامه خواهد شد.
شما سعی کن تمام این کار ها را در روتین شروع برنامه (main) انجام بدی. (با عنایت به شبه کد زیر)


boolean b;
frmlogin f = new frmlogin;
f.showdialog();
if (f.dialogresult==..ok)
b = checkpass(f.usr,f.pass);
else
b = false;

if (b)
frmMain mf = new frmMain;
mf.showdialog();
else
application.exit;

rasoul_ras
چهارشنبه 24 مرداد 1386, 10:15 صبح
اگه منظورت splash Screen یه نگاهی به این لینک بکن فکر کنم کمکت کنه یه مثال خوبم داره
http://www.codeproject.com/csharp/PrettyGoodSplashScreen.asp

حامد مصافی
چهارشنبه 24 مرداد 1386, 11:41 صبح
از نسخه 2003 استفاده می کنید یا 2005؟