PDA

View Full Version : بستن کل برنامه از فرمی غیر از فرم اصلی



ali_mnkt
جمعه 22 خرداد 1388, 01:06 صبح
سلام به دوستان

فرض کنید یک فرم اصلی داریم که از طریق یه button یه فرم دیگه رو show میکنه. حالا چطوری

می شه از فرم دوم کل برنامه رو خاتمه داد ؟ (در فرم اصلی می شد این کار رو از طریق کد

this.close انجام داد ولی تو این شرایط این کار چطور انجام می شه ؟ )

Reza_Yarahmadi
جمعه 22 خرداد 1388, 01:37 صبح
توی رویداد Closing بنویس


Application.Exit();

mojtaba1363
جمعه 22 خرداد 1388, 02:27 صبح
برای باز شدن فرم 2 (در رویداد باتن فرم 1)



Form2 frm1 = newForm2();
frm1.Show();
this.Hide();

برای باز شدن فرم 3 (در رویداد باتن فرم 2)



Form3 frm2 = newForm3();
frm2.Show();
this.Hide();


بستن یک صفحه



this.Close();


خروج از کل برنامه



Application.Exit();

Open-Source
جمعه 22 خرداد 1388, 11:31 صبح
Form2_FormClosing

Application.Exit();

programmable
جمعه 22 خرداد 1388, 13:34 عصر
البته Application.Exit() اجازه ادامه فعالیت ترد جاری رو میده که بعضی وقت ها قصد دولوپر این نیست از خروج اضطراری ، برای این موارد یه نوع خروج نامناسب ولی کشنده وجود داره بصورت زیر که کلا خفه میکنه برنامه رو :


System.Threading.Thread.CurrentThread.Abort();

ali_mnkt
جمعه 22 خرداد 1388, 14:42 عصر
دوستان اگه بخوام از فرم دوم به یه متد از فرم اول دسترسی داشته باشم چیکار باید بکنم؟

مثلا از فرم 2 بخوام فرم 1 رو hiden یا show کنم ؟

Sajjad1364
جمعه 22 خرداد 1388, 21:15 عصر
میشه اینطوری هم نوشت


Environment.Exit(0);

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

Sajjad1364
جمعه 22 خرداد 1388, 21:37 عصر
اگه خواستین میتونین از این dll هم استفاده کنین.
برای نمایش مثلا فرم1 در هر فرمی که بودین مینویسین


Applications.OpenForms.ShowThisForm<Form1>();

بجای Form1 میتونین نام هر فرم دیگری رو (هر جا که خواستین ) بنویسین
اگه فرم مورد نظر شما در حافظه موجود بود سپس بدون ایجاد نسخه دیگری اون فرم رو نمایش میده . در غیر اینصورت از فرم مورد نظر یه نمونه میسازه(سازنده پیش فرض اجرا میشه) و فرم رو نمایش میده.

ali_mnkt
شنبه 23 خرداد 1388, 01:21 صبح
اگه خواستین میتونین از این dll هم استفاده کنین.
برای نمایش مثلا فرم1 در هر فرمی که بودین مینویسین


Applications.OpenForms.ShowThisForm<Form1>();
بجای Form1 میتونین نام هر فرم دیگری رو (هر جا که خواستین ) بنویسین
اگه فرم مورد نظر شما در حافظه موجود بود سپس بدون ایجاد نسخه دیگری اون فرم رو نمایش میده . در غیر اینصورت از فرم مورد نظر یه نمونه میسازه(سازنده پیش فرض اجرا میشه) و فرم رو نمایش میده.


حالا بدون dll و توسط دستورات موجود چطور می شه این کار رو انجام داد ؟

Sajjad1364
شنبه 23 خرداد 1388, 19:32 عصر
با سلام .
دوست عزیز بعضی چیزا رو که در دات نت پیش بینی نشده رو خودمون باید پیاده سازی کنیم و این dll هم که میبینی چیز عجیبی نیست این کدش (خیلی سادس) :





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyExtensionMethods
{
/// <summary>
/// If Your Form Must do Works At Startup Then You Must Impelemet This Interface
/// </summary>
public interface IParameterizedForm
{
/// <summary>
/// When Implementing This Method At Form Startup This Method Called
/// </summary>
/// <param name="args">All Parameters That Sended By Caller And You Must Cast All In Correct Way</param>
void SetParameters(params object[] args);
}
public static class FormExtension
{
/// <summary>
/// Returns The Form That You Want If Thes Form be in Memory.
/// </summary>
/// <typeparam name="T">An Instance Of Form</typeparam>
/// <param name="allForm"></param>
/// <returns>An Instance Of T Returned If Thes Form be in Memory.Else Null Returned</returns>
public static T ThisForm<T>(this FormCollection allForm) where T : Form, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
return (T)form;
}
else
{
return default(T);
}
}
/// <summary>
/// Show Form That You Want.If Exist Show it.Else Create A New Instance And Then Show it As Active Form
/// </summary>
/// <typeparam name="T">Type Of Form</typeparam>
/// <param name="allForm"></param>
/// <returns></returns>
public static void ShowThisForm<T>(this FormCollection allForm) where T : Form, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
if (!form.Focused)
{
form.Show();
form.Focus();
}
}
else
{
t.Show();
}
}
/// <summary>
/// Show Form That You Want.If Exist Show it.Else Create A New Instance And Then Show it As Active Form
/// </summary>
/// <typeparam name="T">Type Of Form</typeparam>
/// <param name="allForm"></param>
/// <param name="args">All Parameters That Sended By Caller For This Form</param>
public static void ShowThisForm<T>(this FormCollection allForm, params object[] args)
where T : Form, IParameterizedForm, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
if (!form.Focused)
{
form.Show();
form.Focus();
}
}
else
{
t.SetParameters(args);
t.Show();
}
}
}
}


اگه رابط IParameterizedForm رو پیاده سازی کنی میتونی از نسخه سربارگذاری شده متد ShowThisForm هم استفاده کنی

ali_mnkt
سه شنبه 26 خرداد 1388, 00:17 صبح
با سلام .
دوست عزیز بعضی چیزا رو که در دات نت پیش بینی نشده رو خودمون باید پیاده سازی کنیم و این dll هم که میبینی چیز عجیبی نیست این کدش (خیلی سادس) :





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace MyExtensionMethods
{
/// <summary>
/// If Your Form Must do Works At Startup Then You Must Impelemet This Interface
/// </summary>
public interface IParameterizedForm
{
/// <summary>
/// When Implementing This Method At Form Startup This Method Called
/// </summary>
/// <param name="args">All Parameters That Sended By Caller And You Must Cast All In Correct Way</param>
void SetParameters(params object[] args);
}
public static class FormExtension
{
/// <summary>
/// Returns The Form That You Want If Thes Form be in Memory.
/// </summary>
/// <typeparam name="T">An Instance Of Form</typeparam>
/// <param name="allForm"></param>
/// <returns>An Instance Of T Returned If Thes Form be in Memory.Else Null Returned</returns>
public static T ThisForm<T>(this FormCollection allForm) where T : Form, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
return (T)form;
}
else
{
return default(T);
}
}
/// <summary>
/// Show Form That You Want.If Exist Show it.Else Create A New Instance And Then Show it As Active Form
/// </summary>
/// <typeparam name="T">Type Of Form</typeparam>
/// <param name="allForm"></param>
/// <returns></returns>
public static void ShowThisForm<T>(this FormCollection allForm) where T : Form, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
if (!form.Focused)
{
form.Show();
form.Focus();
}
}
else
{
t.Show();
}
}
/// <summary>
/// Show Form That You Want.If Exist Show it.Else Create A New Instance And Then Show it As Active Form
/// </summary>
/// <typeparam name="T">Type Of Form</typeparam>
/// <param name="allForm"></param>
/// <param name="args">All Parameters That Sended By Caller For This Form</param>
public static void ShowThisForm<T>(this FormCollection allForm, params object[] args)
where T : Form, IParameterizedForm, new()
{
T t = new T();
String _Type = t.GetType().Name;
Form form = allForm.Cast<Form>()
.FirstOrDefault(f => f.GetType().Name == _Type);
if (form != null)
{
if (!form.Focused)
{
form.Show();
form.Focus();
}
}
else
{
t.SetParameters(args);
t.Show();
}
}
}
}


اگه رابط IParameterizedForm رو پیاده سازی کنی میتونی از نسخه سربارگذاری شده متد ShowThisForm هم استفاده کنی


مرسی دوست عزیز از راهنماییت .فرض کن من در فرم دوم یه دکمه دارم که با زدن اون

فرم اول hiden یا show می شه . حالا اگه برات امکان داره بگو تو رویداد click اون button

چه کدی بنویسم (فرض می کنیم فرم اول وجود داره و نیازی به چک کردن وجود یا عدم وجود

فرم اول نیست )

ali_mnkt
سه شنبه 26 خرداد 1388, 14:12 عصر
از دوستان کسی نمی تونه کمک کنه؟

Reza_Yarahmadi
سه شنبه 26 خرداد 1388, 16:02 عصر
برای اینکه از فرمهایی غیر از فرم اصلی به فرم اصلی بری (وقتی فرم اصلی رو Hide کردی و فرمهای دیگه رو Show)


Form1 f1= (Form1)Application.OpenForms["Form1"];
f1.Show();

به جای Form1 اسم فرم اصلیتو بنویس

ali_mnkt
سه شنبه 26 خرداد 1388, 23:12 عصر
برای اینکه از فرمهایی غیر از فرم اصلی به فرم اصلی بری (وقتی فرم اصلی رو Hide کردی و فرمهای دیگه رو Show)


Form1 f1= (Form1)Application.OpenForms["Form1"];
f1.Show();
به جای Form1 اسم فرم اصلیتو بنویس

مرسی از کمکت