PDA

View Full Version : سوال: راهنمایی در مورد قراردادن منو درتمام فرم ها و اندازه فرم ها



L_eskandary
پنج شنبه 27 مرداد 1390, 20:09 عصر
سلام دوستان
من تو برنامه نویسی تحت ویندوز کاملا مبتدی ام . خوب الان یه برنامه تحت ویندوز نوشتم ولی چند تا مشکل دارم :
1- می خوام اندازه همه فرم ها یکی باشه و یا بهتر بگم فرم ها در حالت maximize باز شن چه تنظیماتی رو باید انجام بدم؟
2- تو برنامه تحت ویندوز هم مثل وب میشه یه صفحه ی master اضافه کرد ؟ به عبارتی من می خوام منوی اصلی ام تو همه صفحات نشون داده بشه خوب فعلا به صورت دستی تو همه صفحات منو رو اضافه کردم و کدها رو نوشتم ولی مسلما این روش عاقلانه نیست . چه طور می تونم با یه بار تعریف منو اون رو تو همه صفحات استفاده کنم؟
3- اجرای پروژه من برا یه صفحه login تنظیم شده می خوام وقتی کاربرlogin کرد فرم login بسته شه ولی با بستن فرم login کل پروژه از حالت اجرا خارج میشه برا این مسئله چیکار باید بکنم ؟
فعلا همین تا بیشتر خسته نشدین هر چند سوال زیاده...
پیشاپیش از توجه دوستان ممنون...

morteza271
پنج شنبه 27 مرداد 1390, 20:20 عصر
1- خاصیت WindowsState از فرمها رو برابر Maximaized تعیین کید.
2- در مورد این سوال من اطلاعی ندارم!ولی مگه همه منوها توی فرمهاتون قراره یه کار انجام بدن که از یکی توی همه استفاده کنید؟؟؟
3- می تونید فرم Login رو نبندین و فقط اون رو مخفی کنید با این دستور :
this.Hide();
ولی یه روش دیگه هم هست که فرمی که بعد از فرم Login باز میشه رو به عنوان فرم اصلی برنامه تعیین کنید و سپس در رویداد Load فرم ، فرم Login رو باز کنید.
موفق باشید

L_eskandary
پنج شنبه 27 مرداد 1390, 21:42 عصر
1- خاصیت WindowsState از فرمها رو برابر Maximaized تعیین کید.
2- در مورد این سوال من اطلاعی ندارم!ولی مگه همه منوها توی فرمهاتون قراره یه کار انجام بدن که از یکی توی همه استفاده کنید؟؟؟
3- می تونید فرم Login رو نبندین و فقط اون رو مخفی کنید با این دستور :
this.Hide();
ولی یه روش دیگه هم هست که فرمی که بعد از فرم Login باز میشه رو به عنوان فرم اصلی برنامه تعیین کنید و سپس در رویداد Load فرم ، فرم Login رو باز کنید.
موفق باشید
1- الان که تغییر می دم خوب جای کنترل هام خیلی بد ترکیب میشن . یه راهی هست که بشه کنترل هایی که تو صفحه استفاده شدن رو هم در حالت maximize به صورت خودکار در location مناسب قرار داد؟
2- خوب من یه منوی اصلی دارم که می خوام تو همی فرم هام بهش دسترسی داشته باشم .
3- دستور hide رو نوشتم ولی بعد از ساختن setup این دستور عمل نکرد ...
با تشکر از پاسختون.

morteza271
پنج شنبه 27 مرداد 1390, 22:05 عصر
1- می تونید با استفاده از خاصیت های Dock و Anchor مکان کنترل ها رو طوری تنظیم کنید که در هنگام تغییر اندازه فرم، کنترل ها جابجا نشن.

3- یعنی چی عمل نکرد؟؟؟!!! یعنی فرم مخفی نشد!! پس از روش 2 استفاده کنید.
موفق باشید

BEHZADnr
پنج شنبه 27 مرداد 1390, 22:35 عصر
سلام دوست عزیر

جواب سوال اول رو که دوستمون در بالا گفتن
2- برای استفاده منو یا هر ابزار دیگری از فرم اصلی در فرم های فرعی از کد زیر استفاده کنید
در کد زیر فرم اصلی Form1 میباشد و ما فرم 2 را از فرم یک ارث بری کردیم - خط 1
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{

}
}
3- برای تنظیم کردن هر فرمی به عنوان پیش فرض روی فایل Program.cs در پنجره Solution Explorer کلیک کنید و نام فرم خود را به جای Form1 بنویسید
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

بازم اگه مشکلی داشتید یا متوجه نشدین بگین تا بیشتر توضیح بدم
موفق باشین

L_eskandary
جمعه 28 مرداد 1390, 05:21 صبح
سلام دوست عزیر

جواب سوال اول رو که دوستمون در بالا گفتن
2- برای استفاده منو یا هر ابزار دیگری از فرم اصلی در فرم های فرعی از کد زیر استفاده کنید
در کد زیر فرم اصلی Form1 میباشد و ما فرم 2 را از فرم یک ارث بری کردیم - خط 1
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{

}
}
3- برای تنظیم کردن هر فرمی به عنوان پیش فرض روی فایل Program.cs در پنجره Solution Explorer کلیک کنید و نام فرم خود را به جای Form1 بنویسید
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

بازم اگه مشکلی داشتید یا متوجه نشدین بگین تا بیشتر توضیح بدم
موفق باشین
ممنون از پاسخ تون
در مورد سوال 3 فک می کنم منظور من رو متوجه نشدین :
من با تعریف فرم پیش فرض مشکلی ندارم . مشکل من اینه که هر فرمی که بعنوان فرم پیش فرض تعریف کنم و بعد اگه بخوام با باز کردن فرم دیگه این فرم بسته شه کل برنامه بسته میشه و باید دوباره اجراش کنم . راه حلی برا این مسئله وجود داره یا نه ؟

hamed_hossani
جمعه 28 مرداد 1390, 07:21 صبح
سلام
شما فرم پیش فرض(لوگین) را بعد از تصدیق هاید کنید.
در این حالت اگه فرم های دیگه رو ببندید برنامه همچنان بازه به خاطر لوگین هاید شده!
شما می تونید رویداد closedفرم اصلی (یا هر فرمی که مایلیید) را بنویسید[Application.Exist()] تا پروژت بسته شه!
[ مشکل من اینه که هر فرمی که بعنوان فرم پیش فرض تعریف کنم و بعد اگه بخوام با باز کردن فرم دیگه این فرم بسته شه کل برنامه بسته میشه ]>> شما فرمی را که نمی خواهید نمایش دهید فقط هاید کنید
Form1 frm=new Form1();
frm.ShowDialog();
This.Hide();

cccccccccc
جمعه 28 مرداد 1390, 10:46 صبح
سلام اصلا چرا فرم لوگینتو فرم اصلی میگیری؟
بعد از اینکه کارش تموم شد بیخود تو حافظه بمونه؟!
این یه مثال(توی سازنده ی فرم اصلیت):
public main()
{
login f = new login();
f.ShowDialog();
if (f.log == 123)
{
Environment.Exit(0);
}
InitializeComponent();
}

L_eskandary
جمعه 28 مرداد 1390, 12:14 عصر
سلام اصلا چرا فرم لوگینتو فرم اصلی میگیری؟
بعد از اینکه کارش تموم شد بیخود تو حافظه بمونه؟!
این یه مثال(توی سازنده ی فرم اصلیت):
public main()
{
login f = new login();
f.ShowDialog();
if (f.log == 123)
{
Environment.Exit(0);
}
InitializeComponent();
}
این کد رو تو کدوم قسمت برنامه باید قرار بدم ؟

cccccccccc
جمعه 28 مرداد 1390, 12:28 عصر
توی سازنده ی فرم اصلیت
توی سازنده فرم اصلی برنامت قبل از InitializeComponent();

Farshid007
جمعه 28 مرداد 1390, 13:12 عصر
اصلا چرا اینجوری می کنید
یه فرم 2 (فرم لوگین)درست کنید که diolog Result رو هم برگردونه
و تو لود فرم 1 این رو بزارید:
using (Form2 frm = new Form2())
{
if (frm.ShowDialog() == DialogResult.OK)
{

}
else
{
this.Close();
}

}
این هم یه نمونه فرم لوگین ساده
توجه پسورد فرم لوگین:0000

L_eskandary
جمعه 28 مرداد 1390, 13:22 عصر
برا استفاده از f.log باید چی رو به using ها اضافه کنیم؟ چون با خطا مواجه شدم.

L_eskandary
جمعه 28 مرداد 1390, 13:43 عصر
اصلا چرا اینجوری می کنید
یه فرم 2 (فرم لوگین)درست کنید که diolog Result رو هم برگردونه
و تو لود فرم 1 این رو بزارید:
using (Form2 frm = new Form2())
{
if (frm.ShowDialog() == DialogResult.OK)
{

}
else
{
this.Close();
}

}
این هم یه نمونه فرم لوگین ساده
توجه پسورد فرم لوگین:0000
خوب این رو نوشتم ولی خوب مشکلی که الان پیش اومد من تو صفحه login بعد از اینکه user , pass رو چک کردم که درسته سطوح دسترسی به صفحات رو می خوانم و تو یه متغییر static قرار می دم این طوری دیگه اون تیکه مربوط به خوندن سطوح دسترسی اجرا نمی شه !!! و مستقیم میره سراغ فرم اصلی ام .
من از یه فرم master هم تو صفحه اصلی ارث بری کردم . تو شرط if هر دوتا فرم هم خواستم سطح دسترسی رو بخونم که باز همون وضعیت پیش اومد!

BEHZADnr
جمعه 28 مرداد 1390, 14:39 عصر
اگه میشه بیشتر توضیح بدین تا بتونم راهنمایی کنم

cccccccccc
جمعه 28 مرداد 1390, 15:19 عصر
اصلا چرا اینجوری می کنید
اون یه مثال بود
بحث سر فرم اصلی و مکان فراخوانی فرم login بود.

Originalgriff
جمعه 28 مرداد 1390, 16:52 عصر
ببخشید منظورتون از 123 و log چیه؟؟؟

Farshid007
جمعه 28 مرداد 1390, 17:01 عصر
بهتر توضیح بدبد
من که گیج شدم:گیج:

cccccccccc
جمعه 28 مرداد 1390, 17:16 عصر
ببخشید منظورتون از 123 و log چیه؟؟؟
ببخشید از نحوه پاسخم، صریح و خلاصه جواب دادم
آموزش و یاددادن هم خودش هنره که من :گریه:

ما فرم login رو قبل از ایجاد فرم اصلی ایجاد می کنیم و نمایش میدیم (فقط به خاطر اینکه سریعتر بالا بیاد)
حالا توی فرم login هر کاری رو انجام دادین کاری نداریم، مهم اینه که یک مقدار بازگشتی داشته باشیم که با توجه به اون برنامه بفهمه که چیکارکنه، برنامه آقای Farshid007 کاملا درسته، البته برای زمانی که ما یک نوع کاربر داشته باشیم، زمانی که ما بیش از یک نوع کاربر داشته باشیم، مثلا یک منشی و یک رئیس، شاید بهتر باشه که منشی به همه ی قسمت های سیستم دسترسی نداشته باشه، بنابراین پس از نمایش فرم login، و صحت کد کاربر، با توجه به مقدار بازگشتی آن، مثلا بعضی از منوهارو غیرفعال میکنیم
در اینجا (مثلا) اگر مقدار بازگشتی 123 بود یعنی رئیس وارد سیستم شده، اگر 124 بود یعنی منشی وارد شده و...