PDA

View Full Version : برنامه های چند فرمی



Moharram
شنبه 21 آذر 1383, 15:03 عصر
با سلام
یه مشکل بزرگ با سی شارپ دارم !!!
می خوام وقتی توی یک فرم یه کاری انجام دادم نتیجه اونو توی یه فرم دیگه ببینم . بذارید یه مثال برنم :
با یه کلید فرم دومی باز میشه و کلید Disable میشه ...
بعد با بستن فرم دومی میخوام کلیده دوباره Enable بشه (مثـــــــــــــــلا)
خیلی مثالای دیگه میشه زد .

شاید تو دلفی دیده باشین که اینجور کارا چقدر راحت انجام میشه ولی این شی گرایی محض سی شارپ دردسر ساز شده .

لطفا راهنمایی کنیـــــــــــــــد

M.GhanaatPisheh
شنبه 21 آذر 1383, 15:18 عصر
ببینید این چیزی که شما میخواید ساده است
هیچ احتیاجی نداره از تو کلاس دوم enable اون button رو true کنید.



this.button1.Enabled = false;

Form2 obj = new Form2();
obj.ShowDialog();

button1.Enabled = true;

تو oop کلاسهای مختلف به وسیله فرستادن پیغام با هم در ارتباطند.
قرار نیست هر کلاسی به هر چیزی که خواست دسترسی داشته باشه.

Moharram
شنبه 21 آذر 1383, 15:31 عصر
گفتم که این یه مثال ساده اس . حالا فرض کنید بجای Enable کردن یه کلید بخواهیم یه text نشون بدیم یا یه grid رو پر از اطلاعات کنیم . حالا تکلیف چیه ؟؟؟

M.GhanaatPisheh
شنبه 21 آذر 1383, 23:32 عصر
تو oop کلاسهای مختلف به وسیله فرستادن پیغام با هم در ارتباطند.

تو کلاس Form2 یه فیلد Public تعریف کنید
تو کلاس Form2 مقدار دهیش کن(هر جا که لازمه مثلا توی event کلیک یه button)
بعد از ()obj.ShowDialog توی Form1 ازش استفاده کن .

اگر متوجه نشدی بگو یه sample برات Upload میکنم.

hmm
یک شنبه 22 آذر 1383, 07:07 صبح
upload کن دوست گرامی ؛
چون من با این روش جواب نگرفتم

M.GhanaatPisheh
یک شنبه 22 آذر 1383, 20:57 عصر
حجم Uploadم تموم شده
یکی سفارش ما رو به آقایون بکنه تورو خدا.
:sorry:

------------------------------------
اصلاح شد
با تشکر از مهدی کرامتی

Moharram
دوشنبه 23 آذر 1383, 10:11 صبح
اگه میشه بفرست به : Bagheri_110@yahoo.com با تشکر

M.GhanaatPisheh
سه شنبه 24 آذر 1383, 13:58 عصر
برنامه رو ببینید
البته اگر Bug داره ببخشید 5 دقیقه ای آماده شد.شما استفاده از فیلد public یه فرم دیگه رو ببینید.
توی Path یه مسیر غیر از Partition اصلی بدید.

Moharram
چهارشنبه 25 آذر 1383, 11:17 صبح
جناب dot_net_lover با تشکر از برنامه ای که گذاشتین . تو این برنامه اول موارد درخواستی تو فرم دوم تو آرایه Result قرار می گیرند بعد فرم اول اونارو نشون میده . حالا فرض کنید یه برنامه ای داریم که هر چیزی رو که پیدا کرد همون لحظه تو ListBox فرم اول نشون بده . (معطل نمونه آرایه Result پر بشه!!!)
می خوام بدونم که چجور از فرم دوم به ListBox فرم اول دسترسی پیدا می کنین .
با تشکر

M.GhanaatPisheh
چهارشنبه 25 آذر 1383, 16:29 عصر
شما میخواید از داخل form2 مستقیم اطلاعات رو توی listbox مربوط به form1 بنویسید؟!!!!!!!!!

Moharram
چهارشنبه 25 آذر 1383, 17:11 عصر
خیلی ممنون به خاطر اینکه توجه نشون میدید .

شما میخواید از داخل form2 مستقیم اطلاعات رو توی listbox مربوط به form1 بنویسید؟!!!!!!!!!
البته این اولین بار نیست که می بینم از این حرفم تعجــــــــــــــــــب می کنن .
چه اشکالی داره اگه بتونیم این کار رو بکنیم . همون مثال خودتونو جوری اصلاح کنین که منتظر پر شدن آرایه Result نشه و هر وقت یکی پیدا شد تو Form1 نشون داده بشه .

M.GhanaatPisheh
چهارشنبه 25 آذر 1383, 22:16 عصر
من تنها راهی که میتونم بهتون پیشنهاد کنم اینه که توی Main Method فرم2 رو run کنید Visibleش رو fale کنید بعد توی Loadش یه object از Form1 بسازید و نشونش بدین و با Visible فرمها بازی کنید .
که به نظرم استفاده از این روش یه سوتی technical هست. :wink:

ببینید من باز هم تکرار میکنم
توی Object Oriented کلاسهای مختلف بوسیله ارسال پیام با هم در ارتباطند

یه سری به کتابای UML بزنید و یه Case Study رو ببینید
نمودارهای مختلف رو ببینید(بخصوص نمودار کلاسها ) منظورم رو متوجه میشید.

M.GhanaatPisheh
پنج شنبه 26 آذر 1383, 01:00 صبح
ببینید من این راه رو به هیچ عنوان توصیه نمی کنم چون فکر می کنم با قواعد معمولی شیگرایی هیچ نیازی به این کارا نیست ولی بهتون میگم.
برای Form2 یه Cunstructor تعریف کنید که یه پارامتر Reference Type از نوع ListBox بگیره و هر جا خواستید مقدار دهیش کنید.
Sample رو ببینید. :wink:

Moharram
شنبه 28 آذر 1383, 12:24 عصر
:thnx: ولی بازم اون چیزی نیست که می خواستم :cry:

M.GhanaatPisheh
شنبه 28 آذر 1383, 13:42 عصر
I think you misunderstand the previous sample, so check out the new SIMPLE sample.
See, you have three choices for communicating between your objects. (Don't tell me about Remoting, MSMQ, etc, they are all, method calls!)
1. by using its public fields or properties or methods
2. by passing an object reference between objects
3. by using delegate and/or events


HTH

Moharram
شنبه 28 آذر 1383, 16:58 عصر
ListBox فرم اولی رو می فرستی تو فرم دومی (با Constructor) . خوب این راه خوبیه .
حالا اگه فرمها یکم زیاد بشن چی (مثلا تو یه برنامه MDI) . همه کنترلها رو بفرستیم بهم دیگه ؟؟؟!!!
اگه بجای ListBox خود فرم رو بفرستیم بهتر نیست .

منتظر جوابت هستم :flower:

M.GhanaatPisheh
یک شنبه 11 بهمن 1383, 17:34 عصر
فکر می کنم همینو میخوای.

dot_net_lover2
سه شنبه 10 خرداد 1384, 03:11 صبح
تا اونجا که من فهمیدم میخوای نتایج کار Form2 را همزمان در یکی از کنترلهای Form1 بریزی
واسه این کار اول Modifiers Property مربوط به کنترل فرم اول را Public قرار بده
بعد در فرم دوم فقط کافی است که یک Instance از فرم اول بسازی و بعد با اون کنترل مستقیما کار کنی.


MainForm mainForm;
mainForm.myList.Items.Add(string here);

mohsen57
یک شنبه 26 تیر 1384, 14:09 عصر
من هم کارم گیره کسی نیست جواب بده؟

danial82
سه شنبه 05 مهر 1384, 10:40 صبح
تا اونجا که میدونم برای اینکه به یه فیلد از کلاس دیگه دسترسی پیدا کنی باید یه properties تعریف کنی و دسترسی اون رو public تعریف کنی اینکه خیلی ساده است