PDA

View Full Version : حرکت بین پنجره ها



pouyansaraf
دوشنبه 08 تیر 1394, 00:52 صبح
سلام من در سی شارپ برای حرکت بین پنجره ها مخصوصا فرم های تو در تو از قطعه کد زیر استفاده میکنم
using (Form2 myform = new Form2())
{
DialogResult result = myform.ShowDialog();
if (result == DialogResult.OK)
this.Show();
}

در wpf کار نمیکنه
با dialogresult و show و hide هم به نتیجه دلخواه نرسیدم
لطفا راهنمایی ام کنید

SabaSabouhi
دوشنبه 08 تیر 1394, 08:21 صبح
سلام من در سی شارپ برای حرکت بین پنجره ها مخصوصا فرم های تو در تو از قطعه کد زیر استفاده میکنم
using (Form2 myform = new Form2())
{
DialogResult result = myform.ShowDialog();
if (result == DialogResult.OK)
this.Show();
}

در wpf کار نمیکنه
با dialogresult و show و hide هم به نتیجه دلخواه نرسیدم
لطفا راهنمایی ام کنید

سلام
من که متوجه نشدم، منظورت چی بود.
خوب شما یه dialog باز کردی و بعد هم بستیش.
دقیقاً همین کار رو هم توی WPF می‌تونی انجام بدی.
لطف کن و کاری که می‌خوای انجام بدی و مشکلی که داری رو شفاف‌تر بگو
شاید ما بتونیم کمکی کنیم.

صبا صبوحی

pouyansaraf
دوشنبه 08 تیر 1394, 10:31 صبح
سلام
من که متوجه نشدم، منظورت چی بود.
خوب شما یه dialog باز کردی و بعد هم بستیش.
دقیقاً همین کار رو هم توی WPF می‌تونی انجام بدی.
لطف کن و کاری که می‌خوای انجام بدی و مشکلی که داری رو شفاف‌تر بگو
شاید ما بتونیم کمکی کنیم.

صبا صبوحی
using (Window2 mywindow = new Window2())

{
DialogResult result = mywindow.ShowDialog();

if (result == DialogResult.OK)
this.Show();
}

ازین واضح تر که دیگه نمیشه؟
شما سه تا پنجره دارید.
1- وقتی پنجره دوم را باز میکنید اولی باید بسته شود و با بستن این پنجره دوباره پنجره 1 باز شود.
2- اگر روی دکمه ای روی پنجره 2 کلیک کردید پنجره 3 باز شود و پنجره 2 بسته شود(ولی نباید هنوز پنجره 1 باز شود).
3- با بستن پنجره 3 پنجره 2 باید باز شود.
و در نهایت فرمی که بسته میشود پنجره 1 است.
این قابلیت برای فرم ها درست است ولی برای window ها که دیالوگ ریزالتشان مانند فرم ها نیست صادق نیست. و همچنین در دستور using نمیشود پنجره ای را مانند فرم تعریف کرد.
شما برای window عمل کنید میبینید.

SabaSabouhi
دوشنبه 08 تیر 1394, 11:41 صبح
using (Window2 mywindow = new Window2())

{
DialogResult result = mywindow.ShowDialog();

if (result == DialogResult.OK)
this.Show();
}

ازین واضح تر که دیگه نمیشه؟
شما سه تا پنجره دارید.
1- وقتی پنجره دوم را باز میکنید اولی باید بسته شود و با بستن این پنجره دوباره پنجره 1 باز شود.
2- اگر روی دکمه ای روی پنجره 2 کلیک کردید پنجره 3 باز شود و پنجره 2 بسته شود(ولی نباید هنوز پنجره 1 باز شود).
3- با بستن پنجره 3 پنجره 2 باید باز شود.
و در نهایت فرمی که بسته میشود پنجره 1 است.
این قابلیت برای فرم ها درست است ولی برای window ها که دیالوگ ریزالتشان مانند فرم ها نیست صادق نیست. و همچنین در دستور using نمیشود پنجره ای را مانند فرم تعریف کرد.
شما برای window عمل کنید میبینید.

سلام
دوست من، وقتی که تو یه محیط عمومی برای دیگران مطلب می‌نویسی، نباید تصور کنی که
این دیگران از کار شما اطلاع دارن. این قضیه برای شما واضح هست نه برای ما که از ماهیت
برنامه‌ی شما و راه‌کارهای شما هیچ اطلاعی نداریم.
ضمن این که من بستن و باز کردن پنجره‌ها رو «حرکت بین پنجره‌ها» تعبیر نمی‌کنم.

چند تا نکته در نظرم هست که برات می‌نویسم، شاید به درد بخوره.
1. مقدار برگشتی DialogResult یک ?bool هست، پس برای این که بتونی
تصمیم بگیری به‌تره از این کد استفاده کنی:

var result = myForm.ShowDialog() ?? false;
if ( result ){
. . .
}


2. نیازی به using نداری.
3. برای مخفی کردن یا نمایش یک فرم می‌تونی خاصیت Visibility رو مقدار بدی، Hidden برای مخفی شدن و Visible برای نمایش.

و اما چرا هم‌چنین راه‌کاری رو انتخاب کردی؟ این باز و بسته کردن برای کاربر خوش‌آیند نخواهد بود.

صبا صبوحی

golbafan
سه شنبه 09 تیر 1394, 09:42 صبح
در مورد سوال استارتر:
من هم با دانش اندکی که دارم باید عرض کنم مشکل شما در نحوه طراحی نرم افزارتون هست
دلیل کارتون رو توضیح بدید.

باید این رو در نظر بگیرید که داستان wpf با winform فرق میکنه و اونجا نباید از using استفاده کنید:

در وین فرم:
using (var form1 = new Form1() ) {
form1.ShowDialog();
}
using (var form2 = new Form2()) {
form2.ShowDialog();
}

در wpf:


var win1 = new Window1();
win1.ShowDialog();
var win2 = new Window2();
win2.ShowDialog();

golbafan
سه شنبه 09 تیر 1394, 10:20 صبح
ادب حکم میکنه اگر حتی کسی پاسخ اشتباه داد چون برای شما وقت گذاشته نباید توهین کنید
در غیر این صورت کسی رغبت نمیکنه پاسخ شما رو بده

درضمن این کلمات رو در گوگل بزنید و جوابتون رو پیدا کنید:
wpf switch between forms

اون مثال رو زدم که متوجه بشید نباید از using استفاده کنید

یک جا هم کاملا توضیح داده که بهتره طراحی رو عوض کنید (اونجا هم دقیقا سوال کننده 3 تا فرم مثل شما داشته) :
http://stackoverflow.com/questions/10196445/switch-views-in-same-window-wpf-without-creating-new-instances-of-the-pages

pouyansaraf
سه شنبه 09 تیر 1394, 10:27 صبح
شما سه تا پنجره دارید.
1- وقتی پنجره دوم را باز میکنید اولی باید بسته شود و با بستن این پنجره دوباره پنجره 1 باز شود.
2- اگر روی دکمه ای روی پنجره 2 کلیک کردید پنجره 3 باز شود و پنجره 2 بسته شود(ولی نباید هنوز پنجره 1 باز شود).
3- با بستن پنجره 3 پنجره 2 باید باز شود.
و در نهایت فرمی که بسته میشود پنجره 1 است.
این قابلیت برای فرم ها درست است ولی برای window ها که دیالوگ ریزالتشان مانند فرم ها نیست صادق نیست. و همچنین در دستور using نمیشود پنجره ای را مانند فرم تعریف کرد.
شما برای window عمل کنید میبینید.

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

مدیر این تالار لطفا پست های زیر رو پاک کنید