PDA

View Full Version : ایجاد فرم در یک ریسمان جدید در ‍سی شارپ



khosro hoseini
دوشنبه 19 فروردین 1387, 23:15 عصر
سلام به کلیه اساتید من در حال نوشتن یه برنامه چت تحت شبکه هستم و به یک مشکل برخوردم:عصبانی++:
بهتره شفاف تر بگم : فرض کنید من یه برنامه دارم که دو تا فرم داره حال میخواهم وقتی روی
یک دکمه مثلا b1 روی فرم 1 کلیک کردم یک ریسمان ایجاد بشه و در این ریسمان فرم 2 نمایش داده بشه...

saeid4634
دوشنبه 19 فروردین 1387, 23:27 عصر
مثلاً اسم فرم اولی Form1
و دومی رو Form2
در فرم اول در رویدادکلیک Button1
Form2 frm2=new Form2();
frm2.Show();

khosro hoseini
دوشنبه 19 فروردین 1387, 23:30 عصر
مثلاً اسم فرم اولی Form1
و دومی رو Form2
در فرم اول در رویدادکلیک Button1
Form2 frm2=new Form2();
frm2.Show();


اینو که خودم میدونم میخوام با زدن دکمه روی فرم 1 یک ریسمان اجرا بشه وفرم2 در آن ریسمان نمایش داده شود

saeid4634
دوشنبه 19 فروردین 1387, 23:32 عصر
منظورت از ریسمان چیه؟؟؟

mohammad272005
دوشنبه 19 فروردین 1387, 23:34 عصر
اگه ریسمان منظورت thread باشه باید یه تابه برای ایجاد فرم، بنویسی بعد اون تابع رو تو thread صدا کنی.. اینجوری:
privatevoid CreateForm()
{
Form1 from1 = newForm1();
from1.ShowDialog();
from1.Dispose();
}
...
new Thread(new ThreadStart(CreateForm)).Start();
....
یه همچین چیزی.

khosro hoseini
دوشنبه 19 فروردین 1387, 23:48 عصر
اگه ریسمان منظورت thread باشه باید یه تابه برای ایجاد فرم، بنویسی بعد اون تابع رو تو thread صدا کنی.. اینجوری:
private void CreateForm(){
Form1 from1 = new Form1();
form1.ShowModal();
form1.Dispose();
}
...
new Thread(new ThreadStart(CreateForm)).Start();
....
یه همچین چیزی.

جناب mohammad272005 در صورت چنین کاری فرمی که در ریسمان نمایش داده میشود که در برنامه من form2 میباشد خیلی سریع باز و بسته میشود یعنی بلا فاصله پس از نمایش بسته میشود شاید به این علت باشد که thread پایان میابد .

khosro hoseini
دوشنبه 19 فروردین 1387, 23:51 عصر
هنگامی که به صورت زیر عمل میکنم form2 بلافاصله پس از نمایش بسته میشود
لازم به ذکر است که button1 یک دکمه بر روی form1 است
(privatevoid button1_Click(object sender, EventArgs e
}
;()new Thread(newThreadStart(CreateForm)).Start

{
( ) privatevoid CreateForm
}
( ) Form2 form2 = new Form2
; ( )form2.Show
; ( ) form2.Dispose
{

khosro hoseini
دوشنبه 19 فروردین 1387, 23:53 عصر
وقتی به صورت زیر عمل میکنم form2 بلافاصله پس از نمایش بسته میشود

khosro hoseini
دوشنبه 19 فروردین 1387, 23:54 عصر
آیا از دوستان کسی نمیتونه به این مشکل که دیر یا زود خود آنها نیز در برنامه های عملی با آن برخورد خواهند کرد پاسخ بده؟

mohammad272005
سه شنبه 20 فروردین 1387, 00:10 صبح
نه دوست من. زود بسته نمی شه. شما گه از
form1.ShowDialog();استفاده کنید. زود بسته نمیشه.

khosro hoseini
سه شنبه 20 فروردین 1387, 00:18 صبح
نه دوست من. زود بسته نمی شه. شما گه از
form1.ShowDialog();استفاده کنید. زود بسته نمیشه.


جناب mohammad272005
از راهنمایی شما کمال تشکر را دارم. واقعا مختصر اما مفید بود بازم ممنون

علیرضا مداح
سه شنبه 20 فروردین 1387, 09:18 صبح
سلام ،
قطعه کد بهینه شده با بهره گیری از ویژگی Anonymous Methods :


privatevoid btnCreateThread_Click(object sender, EventArgs e)
{
Thread newThread = newThread(
delegate()
{
Form frm2 = newForm();
frm2.ShowDialog();
}
);
newThread.Start();
}

Mrs.Net
سه شنبه 20 فروردین 1387, 10:41 صبح
سلام ،
قطعه کد بهینه شده با بهره گیری از ویژگی Anonymous Methods :

فایده این کد چیه؟ (نسبت به یک روش معمولی که تو پست قبلی بوده)

sinpin
سه شنبه 20 فروردین 1387, 10:59 صبح
فایده این کد چیه؟ (نسبت به یک روش معمولی که تو پست قبلی بوده)

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

علیرضا مداح
سه شنبه 20 فروردین 1387, 11:09 صبح
فایده این کد چیه؟ (نسبت به یک روش معمولی که تو پست قبلی بوده)


By using anonymous methods, you reduce the coding overhead in instantiating delegates by eliminating the need to create a separate method.

http://msdn2.microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx