PDA

View Full Version : سوال: رفتن به فرم فرعی، و برگشتن به فرم اصلی



omid2195
یک شنبه 03 مهر 1390, 17:37 عصر
باسلام:ببخشید اگه تاپیک تکراری می زنم،تو سایت رو یه خورده گشتم اما نتونستم به جوابم برسم.
سوال من اینه:چطور وقتی تو یه فرم اصلی هستم به یه فرم دیگه برم البته فرم اصلی نمایش داده نشه،وبعد از اینکه کار تمام شد کاربر بتونه به فرم اصلی برگرده؟:ناراحت:
با تشکر
اگه سوالم تکراری و جوابش در سایت هست لطفا آدرس اون تاپیک رو به من بدهید.:خجالت:
باز هم تشکر

MohammadGh2011
یک شنبه 03 مهر 1390, 17:52 عصر
سلام عليکم
با اين که منم يه تازه کارم جوابش رو ميدونم
اين کد ها رو تو يک کامند بريزيد و يک فورم ديگه اضافه کنيد.

System.Threading.Thread mythread = new System.Threading.Thread(new System.Threading.ThreadStart(OpenNewFrom));
mythread.Start();
this.Close();
}
public static void OpenNewFrom()
{
Application.Run(new Form2());.


اگه اشتباست دوستان تصحيح بفرمايند
موفق باشيد

MohammadGh2011
یک شنبه 03 مهر 1390, 18:16 عصر
با سلام
دوستان براي اينکه بخوايم وقتي رو يک کامند تو فورم1 کليک کنيم تا فورم 2 باز شه فقط بايد از اين راه بريم؟!
راه و روش آسون تري نداره؟
ما تو ويژوال بيسيک مينويسيم
Form1.Hide
Form2.Show
به همين آسوني
تو سي شارپ چي کد کم تري براي اين کار هست؟

ممنون

nunegandom
یک شنبه 03 مهر 1390, 19:07 عصر
internal static void STR() //insert in into form2
{
Form2 frm2 = new Form2();
frm2.Show();
}

Form2.STR(); //form1 button

MohammadGh2011
یک شنبه 03 مهر 1390, 19:25 عصر
internal static void STR() //insert in into form2
{
Form2 frm2 = new Form2();
frm2.Show();
}

Form2.STR(); //form1 button
سلام عليکم
اين کد فورم1 رو نميبنده فقط فورم 2 رو نشون ميده!.
لطفا خط به خط کد رو برام توضيح بديد که اين خط چيکار ميکنه.
ساده تر از اين ديگه نميشه؟


با تشکر

ya30ien2
یک شنبه 03 مهر 1390, 21:18 عصر
دوست عزیز داخل سی شارپ هم همون کد رو مینویسیم
form1.hide();
form2.show();

MohammadGh2011
یک شنبه 03 مهر 1390, 21:34 عصر
دوست عزیز داخل سی شارپ هم همون کد رو مینویسیم
form1.hide();
form2.show();
سلام مطمئنيد ولي ارور ميگيره من قبلا اين کد رو امتحان کردم
من الان نوشتم فورم1 دات رو که نوشتم ولي hide يا show رو نمياره

:متفکر:

omid2195
یک شنبه 03 مهر 1390, 22:24 عصر
با سلام:ممنون از راهنمایی تون-ولی وقتی فرم یک رو مخفی می کنم (this.hide()) و فرم فرعی رو نمایش می دم مشکلی نیست و میشه،اما چطور می تونم وقتی فرم فرعی رو میبندم دوباره فرم اصلی نمایش داده بشه؟
با تشکر از زحماتتون

nunegandom
دوشنبه 04 مهر 1390, 02:27 صبح
سلام عليکم
اين کد فورم1 رو نميبنده فقط فورم 2 رو نشون ميده!.
لطفا خط به خط کد رو برام توضيح بديد که اين خط چيکار ميکنه.
ساده تر از اين ديگه نميشه؟
با تشکر


سلام دوسته عزیز. فقط کافیه دستور رو اینطوری بنویسید:

Form1.ActiveForm.Hide();
Form2.STR();

فکر کنم کد پست بعدی ساده تر باشه!

یه Function داریم که بر اساس قانونش:

<visibility> <return type> <name>(<parameters>)
{
<function code>
}
من اینجوری تعریف کردم که همه جا دیده بشه، استاتیک باشه و نوع بازگشتیش هم void و پارامتر هم دریافت نکنه!
از Form2 یه نمونه ساختم و یه فضا بهش اختصاص دادم.
بقیشم که دیگه معلومه

nunegandom
دوشنبه 04 مهر 1390, 02:57 صبح
برای نمایش یه فرم این کارو بکن:
یه نمونه از فرم مورد نظر بساز و بهش فضا اختصاص بده
Form1 frm1 = new Form1();
بعد رویه نمونه یه اون مانور بده:
frm1.Show();
frm1.Activate();

میخوای وقتی فرم2 بسته شد فرم1 نمایش داده بشه تویه رویداد FromClosed کدها تو قرار بده

MohammadGh2011
دوشنبه 04 مهر 1390, 17:10 عصر
سلام عليکم
دوستان ببخشيدا ولي من به هيچ نتيجه اي نرسيدم
من فقط خيلي کم با محيط سي شارپ آشنام ، از يکي از اساتيدان محترم خواهش ميکنم که برام درست توضيح بدن که:
بالا خره من از کدوم کد اين تاپيک بايد استفاده کنم و چه طوري؟
اين کد رو بايد کجا بنويسم؟
اصلا براي اين کار تو فورم 2 هم نياز به کد نويسي هست يا نه فقط تو فورم 1(button1) بايد کد بنويسم؟
و...

نوشته شده توسط ya30ien2
دوست عزیز داخل سی شارپ هم همون کد رو مینویسیم
form1.hide();
form2.show();
سلام مطمئنيد ولي ارور ميگيره من قبلا اين کد رو امتحان کردم
من الان نوشتم فورم1 دات رو که نوشتم ولي hide يا show رو نمياره


اين کد واقعا درسته يا براي من خطا ميگيره و نمياره؟


از همگي دوستان عذر ميخوام و ميخوام خيلي ساده يکي برام توضيح بده که من جوابم رو بگيرم.
سوالم رو يه بار ديگه مطرح ميکنم:من دو فورم دارم رو فورم1 يدونه button1 دارم و ميخوام هر موقع رو button1 کليک کرديم فورم 2 باز شه و فورم يک بسته شه؟
سپاس گذارم.

مرتضی تقدمی
دوشنبه 04 مهر 1390, 17:22 عصر
سلام
واقعا چرا؟!!

توی رویداد کلیک دکمه Form1 این کدها رو بذارید :


Dim f As New Form2

Me.Hide()
f.ShowDialog()

Me.Show()


موفق باشید

omid2195
دوشنبه 04 مهر 1390, 17:29 عصر
سلام دوسته عزیز. فقط کافیه دستور رو اینطوری بنویسید:

Form1.ActiveForm.Hide();
Form2.STR();

فکر کنم کد پست بعدی ساده تر باشه!

یه Function داریم که بر اساس قانونش:

<visibility> <return type> <name>(<parameters>)
{
<function code>
}
من اینجوری تعریف کردم که همه جا دیده بشه، استاتیک باشه و نوع بازگشتیش هم void و پارامتر هم دریافت نکنه!
از Form2 یه نمونه ساختم و یه فضا بهش اختصاص دادم.
بقیشم که دیگه معلومه


برای نمایش یه فرم این کارو بکن:
یه نمونه از فرم مورد نظر بساز و بهش فضا اختصاص بده
Form1 frm1 = new Form1();
بعد رویه نمونه یه اون مانور بده:
frm1.Show();
frm1.Activate();

میخوای وقتی فرم2 بسته شد فرم1 نمایش داده بشه تویه رویداد FromClosed کدها تو قرار بده


سلام مطمئنيد ولي ارور ميگيره من قبلا اين کد رو امتحان کردم
من الان نوشتم فورم1 دات رو که نوشتم ولي hide يا show رو نمياره

:متفکر:


سلام:دوستان من اینجا هویج نیستما،یه نفر هم به سوال من توجه کنه:عصبانی::عصبانی:
ممنون از راهنمایی تون-ولی وقتی فرم یک رو مخفی می کنم (this.hide()) و فرم فرعی رو نمایش می دم مشکلی نیست و میشه،اما چطور می تونم وقتی فرم فرعی رو میبندم دوباره فرم اصلی نمایش داده بشه؟
با تشکر از زحماتتون

مرتضی تقدمی
دوشنبه 04 مهر 1390, 17:51 عصر
سلام
حالا شما خودتون رو اینقدر عصبانی نکنید!! :لبخندساده::لبخندساده:
توی پست بالایی جواب دادم. منظور شما همینه دیگه؟

nunegandom
دوشنبه 04 مهر 1390, 19:42 عصر
آقای مرتضی تقدمی لطف میکنید درباره کدتون یه توضیحی بدید؟ ممنون

جناب omid2195
در باره کد خودم که بهتون توضیح دادم که:
وقتی میخواید یه فرم نمایش بدید یه شئ ازش میسازید
Form1 formname = new Form1();
formname میشه شئ اینجا، حالا میتونید هر کاری میخواید بکنید. کد بالا یه نمونه از Form1 میسازه به اسمه formname ، بعدش اومده با استفاده از مساوی کد سمت راسته مساوی میاد با new یه فضایه جدید به اندازه Form1() میسازه و با استفاده با مساوی این فضا رو به نمونه تعریف شده اختصاص دادم

شما تویه رویداد FromClosed این کد ها رو قرار بده


Form1 frm1 = new Form1();
frm1.Show();

مرتضی تقدمی
دوشنبه 04 مهر 1390, 22:11 عصر
آقای مرتضی تقدمی لطف میکنید درباره کدتون یه توضیحی بدید؟ ممنون
[/CSHARP]

سلام


Form2 f = new Form2();

this.Hide();
f.ShowDialog();

this.Show();

وی بی نت بود به سی شارپ تبدیل کردم.

بینید ساده بگم : اول یک شی جدید از فرم دوم می سازیم. فرم کنونی رو مخفی می کنیم. بعد فرم دوم رو showdialog می کنیم. دقت کنید که show نمی کنیم, چون فرق دارن. با این کار تا وقتی که فرم دوم بسته نشه کدهای بعد از f.ShowDialog(); اجرا نخواهند شد. به محض بسته شدن فرم دوم, فرم اول نمایش داده میشه. دقت کنید که تمامی این کدها توی رویداد کلیک دکمه فرم اول نوشته شوند.

موفق باشید

omid2195
دوشنبه 04 مهر 1390, 23:39 عصر
سلام


Form2 f = new Form2();

this.Hide();
f.ShowDialog();

this.Show();

وی بی نت بود به سی شارپ تبدیل کردم.

بینید ساده بگم : اول یک شی جدید از فرم دوم می سازیم. فرم کنونی رو مخفی می کنیم. بعد فرم دوم رو showdialog می کنیم. دقت کنید که show نمی کنیم, چون فرق دارن. با این کار تا وقتی که فرم دوم بسته نشه کدهای بعد از f.ShowDialog(); اجرا نخواهند شد. به محض بسته شدن فرم دوم, فرم اول نمایش داده میشه. دقت کنید که تمامی این کدها توی رویداد کلیک دکمه فرم اول نوشته شوند.

موفق باشید


آقای مرتضی تقدمی لطف میکنید درباره کدتون یه توضیحی بدید؟ ممنون

جناب omid2195
در باره کد خودم که بهتون توضیح دادم که:
وقتی میخواید یه فرم نمایش بدید یه شئ ازش میسازید
Form1 formname = new Form1();
formname میشه شئ اینجا، حالا میتونید هر کاری میخواید بکنید. کد بالا یه نمونه از Form1 میسازه به اسمه formname ، بعدش اومده با استفاده از مساوی کد سمت راسته مساوی میاد با new یه فضایه جدید به اندازه Form1() میسازه و با استفاده با مساوی این فضا رو به نمونه تعریف شده اختصاص دادم

شما تویه رویداد FromClosed این کد ها رو قرار بده


Form1 frm1 = new Form1();
frm1.Show();




سلام
حالا شما خودتون رو اینقدر عصبانی نکنید!! :لبخندساده::لبخندساده:
توی پست بالایی جواب دادم. منظور شما همینه دیگه؟


سلام:چه عجب بالاخره به من هم یه نگاهی انداختید،از راهنمایی تون ممنون-ولی کار نمی کنه،چرا؟!خیلی تابلو ه دیگه،-وقتی کاربر با "نام کاربری" خودش وارد می شه و بعد از صفحه اصلی به صفحه فرعی میره،وقتی کارش در صفحه فرعی تموم شد می خواد برگرده صفحه اصلی،چون یه شی تازه از صفحه اصلی درست شده و نه ان صفحه ای که اولین بار دیدش،پس دوباره از کاربر "نام کاربری" و... می خواد.
و مشکل بعدی هم وقتی کاربر صفحه فرعی رو ببنده(از علامت ضربدر قرمز ویندوز)،برنامه باز درحال استفاده از حافظه و... در هر صورت برنامه بازه و دیده هم نمی شه.:گیج::متفکر::عصبانی++:
حالا دوستان خواهشا یه فکر اساسی بکنن،خواهشا هم کمک کنید.
با تشکر از کمکهاتون

مرتضی تقدمی
سه شنبه 05 مهر 1390, 00:02 صبح
سلام:چه عجب بالاخره به من هم یه نگاهی انداختید،از راهنمایی تون ممنون-ولی کار نمی کنه،چرا؟!خیلی تابلو ه دیگه،-وقتی کاربر با "نام کاربری" خودش وارد می شه و بعد از صفحه اصلی به صفحه فرعی میره،وقتی کارش در صفحه فرعی تموم شد می خواد برگرده صفحه اصلی،چون یه شی تازه از صفحه اصلی درست شده و نه ان صفحه ای که اولین بار دیدش،پس دوباره از کاربر "نام کاربری" و... می خواد.
و مشکل بعدی هم وقتی کاربر صفحه فرعی رو ببنده(از علامت ضربدر قرمز ویندوز)،برنامه باز درحال استفاده از حافظه و... در هر صورت برنامه بازه و دیده هم نمی شه.:گیج::متفکر::عصبانی++:
حالا دوستان خواهشا یه فکر اساسی بکنن،خواهشا هم کمک کنید.
با تشکر از کمکهاتون

در مورد کدهای من نه. ببینید شما وقتی دکمه رو زدید و فرم دوم باز شد و بعد اون رو بستید, فرم اول نمایش داده میشه و بعد اون شی ای که از فرم دوم درست کردیم از بین میره. OK ?

reza_magical
سه شنبه 05 مهر 1390, 00:13 صبح
سلام
این همه چرا لقمه رو دور سر خودتون میچرخونید؟!!
با این کد میتونید به فرم و همینطور کنترلها و خاصیتهاشون توی یک فرم دیگه دسترسی داشته باشید:
برای مثال با این کد میتونید فرم search_cst رو مخفی کنید:

Application.OpenForms["search_cst"] as Form).visible=false;
به جای search_cst ، اسم فرمی که میخواید مخفی یا ظاهر یا هر چیز دیگه ای بشه رو بنویسید.
در مورد کنترلهای فرم هم به این صورت هست:

(Application.OpenForms["yourFirstFormName"].Controls["YourTextBoxName"] as TextBox).Text = "Your Text";

omid2195
سه شنبه 05 مهر 1390, 07:42 صبح
سلام
این همه چرا لقمه رو دور سر خودتون میچرخونید؟!!
با این کد میتونید به فرم و همینطور کنترلها و خاصیتهاشون توی یک فرم دیگه دسترسی داشته باشید:
برای مثال با این کد میتونید فرم search_cst رو مخفی کنید:

Application.OpenForms["search_cst"] as Form).visible=false;
به جای search_cst ، اسم فرمی که میخواید مخفی یا ظاهر یا هر چیز دیگه ای بشه رو بنویسید.
در مورد کنترلهای فرم هم به این صورت هست:

(Application.OpenForms["yourFirstFormName"].Controls["YourTextBoxName"] as TextBox).Text = "Your Text";

سلام:ممنون از کمکهاتون-خواهشا یکی اول متنی که من نوشتم بخونه بعد راهنمایی کنه:
کار نمی کنه،چرا؟!خیلی تابلو ه دیگه،-وقتی کاربر با "نام کاربری" خودش وارد می شه و بعد از صفحه اصلی به صفحه فرعی میره،وقتی کارش در صفحه فرعی تموم شد می خواد برگرده صفحه اصلی،چون یه شی تازه از صفحه اصلی درست شده و نه ان صفحه ای که اولین بار دیدش،پس دوباره از کاربر "نام کاربری" و... می خواد.
و مشکل بعدی هم وقتی کاربر صفحه فرعی رو ببنده(از علامت ضربدر قرمز ویندوز)،برنامه باز درحال استفاده از حافظه و... در هر صورت برنامه بازه و دیده هم نمی شه.
----------------------------------
چرا کد که reza_magical (http://barnamenevis.org/member.php?50280-reza_magical) نوشت کار نمی کنه،چون وقتی کاربر از صفحه فرعی برمی گرده به صفحه اصلی،واگه دوباره بره به صفحه فرعی،انوقت 2 صفحه فرعی وجود داره.البته اینم بگم که مشکلات قبلی هنوز وجود داره.
خواهشا یه کمکی بکنید.
با تشکر از زحماتتون

nunegandom
سه شنبه 05 مهر 1390, 09:46 صبح
برنامه تون رو اگه ممشکلی نداره آپلود کنید

reza_magical
سه شنبه 05 مهر 1390, 12:55 عصر
چرا کد که reza_magical (http://barnamenevis.org/member.php?50280-reza_magical) نوشت کار نمی کنه،چون وقتی کاربر از صفحه فرعی برمی گرده به صفحه اصلی،واگه دوباره بره به صفحه فرعی،انوقت 2 صفحه فرعی وجود داره.البته اینم بگم که مشکلات قبلی هنوز وجود داره.


شما اگه فرم فرعی (یا اصلی) رو showdialog کنید نباید مشکلی در این مورد باشه ، چون در هر زمانی تنها یک نمونه از اون فرم با اون اسم باز هست.
راههای زیادی برای اینکار وجود داره ، ولی ساده ترین راهش همینه.