PDA

View Full Version : سوال: نفی application.exit()



jd.mn98
شنبه 09 شهریور 1392, 09:10 صبح
سلام دوستان
من می خوام بدونم چجوری میشه دستور application.exit() را نفی کرد.
من روی رویداد FormClosing فرمم این دستور رو نوشتم و یک مسیج باکس گذاشتم که بپرسه آیا می خواهید خارج شوید و دو تا دکمه ی بله و خیر دارد
من می خوام اگر روی دکمه ی ضربدر بالای فرم کلیک کردم و پیغام نمایش داده شد و من روی دکمه ی نه کلیک کردم برنامه بسته نشه.

danialafshari
شنبه 09 شهریور 1392, 10:22 صبح
در همون رویداد
e.cancel=true

jd.mn98
شنبه 09 شهریور 1392, 11:15 صبح
این کد رو نوشتم ولی کار نکرد

veniz2008
شنبه 09 شهریور 1392, 11:29 صبح
این کد رو نوشتم ولی کار نکرد
سلام.
خوب ننوشتی.

if (MessageBox.Show("خروج", "آیا قصد خروج دارید؟", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
e.Cancel = true;

jd.mn98
شنبه 09 شهریور 1392, 11:48 صبح
من یه فرم دیگه به عنوان مسیج باکس ساختم و یه لیست شمارشی از سوالات برای این مسیج باکس در یک کلاس نوشتم
این کد داخل کلاس

public static DialogResult dialog;
public enum message
{
Qexit
}
public DialogResult MSG(message m)
{
switch (m)
{
case message.Qexit:
frm.btnno.Visible = frm.btnyes.Visible = true;
frm.lbltxt.Text = "آیا برای خروج اطمینان دارید";
break;
default:
break;
}
frm.ShowDialog();
return dialog;
}

اینم کد رویداد formclosing

private void frm_main_FormClosing(object sender, FormClosingEventArgs e)
{
if (c.MSG(Class1.message.Qexit) == DialogResult.No)
{
e.Cancel = true;
}
}

aliagamon
شنبه 09 شهریور 1392, 11:56 صبح
اینطوری فکر کنم درست بشه:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
message m;
switch (m)
{
case message.Qexit:
if (MessageBox.Show("خروج", "آیا قصد خروج دارید؟", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.No)
e.Cancel = true;
break;
default:
break;
}}

اگر هم میخواین از فرم خودتون استفاده کنید اونو با Showdialog فراخوانی کنید...

jd.mn98
شنبه 09 شهریور 1392, 12:01 عصر
تا حد امکان من می خوام کد هام داخل کلاس باشه

wolf_majid
شنبه 09 شهریور 1392, 12:09 عصر
frm.ShowDialog();
return dialog;
کد بالا رو اصلاح کن
return frm.ShowDialog();

مهرداد صفا
شنبه 09 شهریور 1392, 12:36 عصر
با سلام.
یک راه جلوگیری از بسته شدن پنجره همانطور که دوستان گفتند تغییر خصوصیت Cancel آرگومنت رویداد FormClosing به true است.
همچنین می توانید متود WndProc فرم را بازنویسی کنید و در صورت نیاز از پردازش پیغامهای WM_CLOSE و WM_DESTROY جلوگیری کنید. به این صورت:

//بسم الله الرحمن الرحیم
//اللهم صل علی محمد و آل محمد

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
const int WM_CLOSE = 0x0010;
const int WM_DESTROY = 0x0002;

public bool AllowExit{get;set;}
public Form1()
{
InitializeComponent();
this.AllowExit = false;
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//e.Cancel = !this.AllowExit;
}
protected override void WndProc(ref Message m)
{
if (!this.AllowExit && ((m.Msg == WM_CLOSE) || (m.Msg == WM_DESTROY))) return;
base.WndProc(ref m);
}

}
}