PDA

View Full Version : رویداد shown در فرم



negar442
جمعه 14 شهریور 1393, 00:41 صبح
من یک سول ساده دارم ؛ رویداد shown فرم چه زمانی رخ می ده؟ سوال من از یک مشکل تو برنامه ای که نوشتم ناشی می شه. مشکل از این قراره که دستوراتی که در این رویداد نوشتم بعضی اوقات 2 بار اجرا می شه! می خوام بدونم چرا این رویداد دو بار اجرا می شه؟ سایتهای فارسی هیچ اشاره ای به این رویداد نکرده اند و انگلیسی هم زیاد بلد نیستم!

aminmousavi
جمعه 14 شهریور 1393, 03:04 صبح
سلام دوست عزیز ، این اونت برای زمانی هست که فرم شما نمایش داده میشه (فرقش با FormLoad در این هست که فرم لود قبل نمایش صفحه و ایجاد کنترل ها اجرا میشه ، اما Shown زمانی اجرا میشه که کنترل های شما به کاربر نشان داده شد ، معمولا برای ایجاد Waiting و صبر کردن ازش استفاده میکنن)

در خصوص اجرای دوبار هم ، تاحالا بنده به همچین مشکلی برنخوردم ، حدسم از این هست که ممکنه مشکل از کد شما باشه که دوبار اجرا میشه دستورتون .
اگه کدتون رو بزارید و بگید کی دوبار اجرا میشه بهتر میشه راهنماییتون کرد

negar442
جمعه 14 شهریور 1393, 11:10 صبح
کدهای رویداد shown فرم اصلی :

if (!classmain.b)
{
formlogin frm = new formlogin();

frm.ShowDialog();
}

بعد میره تو فرم لاگین و اگه پسورد درست بود classmin.b = true میشه و formlogin.visible= false میشه. کدهام چیز خاصی توش نیست! با توضیحات شما فکر نمی کنم مشکل از shown باشه.
این که کد چه موقع 2 بار اجرا میشه هم نمی دونم بعضی اوقات این اتفاق میوفته. یعنی برنامه ای که تو سیستم مشتریه با یک کلیک 2 بار باز میشه وقتی یکی رو می بنده هر دو بسته میشه!
توی program.cs هم کدهام اینه :


static void Main()
{
bool ok;
Mutex m = new Mutex(true, " ", out ok);
if (!ok)
{
MessageBox.Show("برنامه در حال اجرا است");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new frmtemp("","","","","","",""));



}

یعنی با این کد باید مانع از اجرای مجدد برنامه وقتی برنامه در حال اجراست بشه.
کدهای frmtemp

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 Hesab
{
public partial class frmtemp : Form
{
string Id = ""; string name = ""; string address = ""; string phone = ""; string mobile = ""; string fax = ""; string description = "";

public frmtemp(string ID, string Name, string Address, string Phone, string Mobile, string Fax, string Description)
{
InitializeComponent();
Id = ID;
name = Name;
address = Address;
phone = Phone;
mobile = Mobile;
fax = Fax;
description = Description;
}


private void frmtemp_Activated(object sender, EventArgs e)
{

var f = new frmforoshmin(Id, name, address, phone, mobile, fax, description);
f.Show();
this.Hide();
}


private void frmtemp_Load(object sender, EventArgs e)
{


}


private void label1_Click(object sender, EventArgs e)
{


}


private void timer1_Tick(object sender, EventArgs e)
{

}
}
}

aminmousavi
شنبه 15 شهریور 1393, 01:31 صبح
سلام مجدد ، بنده هم متوجه نشدم چرا دوبار میشه .
میتونیین صورت مساله رو پاک کنین :دی
توی اونت Shown شرط بزارین که اگر فرم Login باز نبود فرم رو باز کنه :


if (Application.OpenForms["formlogin"] == null)
{
if (!classmain.b)
{
formlogin frm = new formlogin();

frm.ShowDialog();
}
}

negar442
شنبه 15 شهریور 1393, 10:43 صبح
الآن متوجه شدم که از خود برنامه دو نمونه باز میشه یعنی 2 نمونه از اون در تسکبار نشون داده میشه و هر کدوم رو ببندی دیگری هم بسته میشه!

negar442
یک شنبه 16 شهریور 1393, 08:38 صبح
هر موقع ویندوز reset می شه در نخستین اجرا 2 نمونه از برنامه باز میشه!