PDA

View Full Version : سوال: وقتی که یک فرم را فراخوانی کردیم تا زمان فعال بودنش دوباره فراخوانی نشه



esy2012
یک شنبه 13 آذر 1390, 16:26 عصر
با عرض سلام

لطفا به این برنامه ای که لینکشو پایین زدم نگاه کنید.:افسرده:

http://s1.picofile.com/file/7200932896/WFA1.rar.html

توی این برنامه می خوام وقتی روی Command کلیک کردم و فرم جدید فراخوانی شد ، تا زمانی که فرم که فراخوانی شده فعال هست ، بار دیگر رو Command کلیک کردم فرم فراخوانی نشه، ولی وقتی که فرم بسته شد اگر رو Command کلیک کردم دوباره فراخوانی بشه . نمی دونم منظورمو رسوند یا نه .

ممنون میشم خیلی سریع پاسخشو بدید.:عصبانی++:

sinashahab
یک شنبه 13 آذر 1390, 16:43 عصر
خیلی راه های زیادی هست .
مثلا یه راه ساده اینه که توی فرم اصلی یا توی یه کلاس استاتیک ، یه متغیر شناور "static" تعریف کنید و هر وقت باز شد اون رو true و هر وقت بسته خواست بشه اون رو false کنید و از روی این تصمیم گیری کنید.

سوداگر
یک شنبه 13 آذر 1390, 16:50 عصر
Form1.ShowDialog();
باعث میشه تا فرم نمایش داده شده، تا زمانی که بسته نشده باشه، به بقیه فرم ها دستسی نداشته باشیم.

esy2012
یک شنبه 13 آذر 1390, 19:39 عصر
سلام

دوست عزیزم خودتون که خوب میدونین تو سی شارپ به دلیل کپسوله کردن متغییر ها نمیشه به این راحتی از متغییر فرم دیگر استفاده کرد . منم مشکلم همینجا هستش. اگه لطف کنید خودتو یکشو درست کنید بفرسید به ایمیل من ممنون میشم.

:لبخند:

esy2012
یک شنبه 13 آذر 1390, 19:43 عصر
Form1.ShowDialog();
باعث میشه تا فرم نمایش داده شده، تا زمانی که بسته نشده باشه، به بقیه فرم ها دستسی نداشته باشیم.


سلام دوست عزیزم

این روش خوبه ولی وقتی فرمی که فعال هستش رو می خوای مینیمایز کنی کل پروژه مینیمایز میشه.

abdullah20
یک شنبه 13 آذر 1390, 20:21 عصر
برای دسترسی به فرم های دیگر

(Application.OpenForms["Form1"].Controls["Textbox1"] as TextBox).Text;

ya30ien2
یک شنبه 13 آذر 1390, 23:59 عصر
دوست عزیز همینطور که دوستمون گفت شما میتونید یک متغیر عمومی تعریف کنید و هر وقت فرم رو نمایش میدید اون رو true و هر وقت بسته اونر رو false کنید و برای کلیدی که برای نمایش در نظر گرفتید هم شرط بزارید که چک کنه اگه true بود هیچ کاری انجام نده اگه false بود نمایش بده

esy2012
دوشنبه 14 آذر 1390, 00:46 صبح
دوست عزیز همینطور که دوستمون گفت شما میتونید یک متغیر عمومی تعریف کنید و هر وقت فرم رو نمایش میدید اون رو true و هر وقت بسته اونر رو false کنید و برای کلیدی که برای نمایش در نظر گرفتید هم شرط بزارید که چک کنه اگه true بود هیچ کاری انجام نده اگه false بود نمایش بده

سلام دوست عزیز منم در بالا خدمت همه عرض کردم که سی شارپ متغییر ها را کپسوله سازی میکند و من خودم این راهو امتحان کردم ولی به دلیل کپسوله سازی نمیتونم انجام بدم.


باتشکر:افسرده:

sinashahab
دوشنبه 14 آذر 1390, 10:57 صبح
دوست عزیز همه ی اینا که جواب میدن تا حدودی با کپسولی شدن و اینا در سی شارپ اطلاع دارند و وقتی هم یه چیزو میگن به احتمال زیاد خودشون این کارو کردن.
پیشنهاد میکنم مباحث پیشرفته ی برنامه نویسی شی گرا رو مطالعه کنید.

ولی جواب :
public static bool bl = false;
اینا در کد فرم 1 قرار بده.

اینم کد کامل تر:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static bool bl = false;
private void button1_Click(object sender, EventArgs e)
{
if (!bl)
{
Form2 f = new Form2();
f.Show();
}
}
}



public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
Form1.bl = true;
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1.bl = false;
}
}

sobaisobai
دوشنبه 14 آذر 1390, 11:03 صبح
سلام
شما میتونید باتنی رو که تو رویدادش فرم نمایش داده میشه رو غیرفعال کنید و وقتی فرم بسته شد دوباره فعال بشه
ابتدایی ترین کار

ya30ien2
دوشنبه 14 آذر 1390, 11:11 صبح
اینم یک نمونه (http://s1.picofile.com/file/7203796341/PublicForm.rar.html)
امیدوارم کمک کنه

esy2012
سه شنبه 15 آذر 1390, 00:04 صبح
دوست عزیز همه ی اینا که جواب میدن تا حدودی با کپسولی شدن و اینا در سی شارپ اطلاع دارند و وقتی هم یه چیزو میگن به احتمال زیاد خودشون این کارو کردن.
پیشنهاد میکنم مباحث پیشرفته ی برنامه نویسی شی گرا رو مطالعه کنید.

ولی جواب :
public static bool bl = false;
اینا در کد فرم 1 قرار بده.

اینم کد کامل تر:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static bool bl = false;
private void button1_Click(object sender, EventArgs e)
{
if (!bl)
{
Form2 f = new Form2();
f.Show();
}
}
}



public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
Form1.bl = true;
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1.bl = false;
}
}




سلام دوست عزیزم ، من قسط جسارت نداشتم ولی منظورم این بود که بنده بلد نیستم و تازه کارم لطف کنید کمی بیشتر توضیح دهید ، فقط همین . و خیلی ممنونم از همگیتون و جوابمو گرفتم ازتون .:لبخند:


یا حق

mehdin69
سه شنبه 15 آذر 1390, 02:16 صبح
private void button1_Click(object sender, EventArgs e)
{
if (Application.OpenForms["Form2"] == null)
{
Form2 f = new Form2();
f.Show();
}
}


اگه دیگه باز شد... :بامزه: