PDA

View Full Version : ارسال اطلاعات فرم پدر به فرم فرزند



Kubuntu
شنبه 21 خرداد 1390, 09:49 صبح
سلام بچه ها!!
وقتتون بخیر!!

چجوری می تونم اطلاعات فرم پدر را در فرم فرزند استفاده کنم. مثل property های فرم پدر یا کنترلهای روی فرم پدر.

سپاس

Kubuntu
شنبه 21 خرداد 1390, 19:11 عصر
یعنی کسی نمی دونه! :گریه:

saman6384
شنبه 21 خرداد 1390, 20:58 عصر
با این میشه property هاشو بدست اورد دیگه!
this.MdiParent

شما چیز دیگه ای منظورته؟

Kubuntu
شنبه 21 خرداد 1390, 22:06 عصر
سلام دوست عزیز!! :قلب:
خب مثلا از کد شما چجوری باید استفاده کنم؟! :متفکر:
مثلا من می خوام در فرم فرزند بگم که:
frm_Parent.Button1.text="hi";
حالا اینو تو سی شارپ چیجوری باید نوشت؟!

saman6384
یک شنبه 22 خرداد 1390, 00:18 صبح
و علیکمو سلام

این نمونه رو همینجوری سریع نوشتم!
هم توش با property فرم پدر کار شده ، هم با button که روی فرم پدر هس!

noname1st
یک شنبه 22 خرداد 1390, 09:09 صبح
اگه از کنترل های فرم پدر می خوایی استفاده کنی باید اون کنترل رو از نوع پابلیک کنی اما توصیه نمی کنم.
در ضمن بسیار بسیار در هنگام ابجکت گرفتن از فرم پدر مواظب باش توی لوپ نیوفته که هی آبجکت تولید بشه و فضا بگیره که اگه این اتفاق بیوفته حافظه پر میشه و هنگ میکنه

Kubuntu
یک شنبه 22 خرداد 1390, 09:11 صبح
نمونه سامان جون هم که زحمت کشیدن همینطور تکراری آبجکت ایجاد میکنه. برای حل این مشکل باید چیکار کرد؟

noname1st
یک شنبه 22 خرداد 1390, 09:12 صبح
بریا پابلیک کردن کنترل هم از Property خود کنترل استفاده کن در لیست می تونی پیدا کنیش که به صورت Default private هست شما باید Public کنیش

Kubuntu
یک شنبه 22 خرداد 1390, 09:18 صبح
ببخشید سامان میشه این یه تیکه کد رو خط به خط توضیح بدی که چیکار میکنه. (برای قسمت parent)
frm2 = new Form2();
frm2.MdiParent = this;
frm2.Load += new EventHandler(frm2_Load);
frm2.Show();
this.PerformAutoScale();
و همچنین: (Parent)
public Form1()
{
InitializeComponent();
this.Text = "HI Dear " + Environment.UserName;
}
و ببخشید این یه قسمت در فرزند: :خجالت:

frm2 = new Form2();
frm2.MdiParent = this;
frm2.Load += new EventHandler(frm2_Load);
frm2.Show();
this.PerformAutoScale();


مرسی خیلی خیلی :قلب:

noname1st
یک شنبه 22 خرداد 1390, 09:19 صبح
نمونه سامان جون هم که زحمت کشیدن همینطور تکراری آبجکت ایجاد میکنه. برای حل این مشکل باید چیکار کرد؟
دقیقا به این نکته من اشاره کردم
یه BreakPoint بذار روی FormLoad بعد ادامه بده میبینی که میره تو فرم پدر و بعد برمیگرده و دوباره میره فرم پدر ..................و تولید میشه

Kubuntu
یک شنبه 22 خرداد 1390, 09:21 صبح
بریا پابلیک کردن کنترل هم از Property خود کنترل استفاده کن در لیست می تونی پیدا کنیش که به صورت Default private هست شما باید Public کنیش
مثلا
private void button1_Click_1(object sender, EventArgs e)
رو بنویسم
public void button1_Click_1(object sender, EventArgs e)

:متفکر:
میشه بیشتر توضیح بدید پیلیز!

saman6384
یک شنبه 22 خرداد 1390, 09:24 صبح
اگه منظورت اون باتن فرم پدره که تو باتن فرم فرزند گذاشتم!:لبخند:
شما بزارش تو load فرم فرزند!:بامزه:
یا هر سری که کارت با کنترله تموم شد dispose اش کن!:چشمک:
من هدفم نشون دادن طریقه استفاده از فرم پدر بود:لبخندساده:
الگوریتم استفادشو که نخواسته بودی

تازشم! فکر نکنم منظور نونیم اینجور آبجکت ساختن باشه!:متفکر: ( چیزیو تو لوپ نزاشتم!؟ )

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

examplefunction((Button)this.MdiParent.Controls[0]);
private void examplefunction(Button btn)
{
...........
}

noname1st
یک شنبه 22 خرداد 1390, 09:26 صبح
درسته
همین کار رو انجام بده تا بعد از اینکه از فرم پدر آبجکت گرفتی بتونی توی لیست شی خودت ببینیش
البته راحت اینه که وقتی کنترل رو میندازی توی فرم توی properties اونجا Private رو Public کنی

haghft
یک شنبه 22 خرداد 1390, 09:35 صبح
این یه نمونه برای ارتباط و رد و بدل اطلاعات بین انواع دو فرم است.برای کار شما هم نمونه داره.

saman6384
یک شنبه 22 خرداد 1390, 09:37 صبح
ببخشید سامان میشه این یه تیکه کد رو خط به خط توضیح بدی که چیکار میکنه. (برای قسمت parent)
frm2 = new Form2();
frm2.MdiParent = this;
frm2.Load += new EventHandler(frm2_Load);
frm2.Show();
this.PerformAutoScale();


1. داره یه شی از کلاس فرم 2 میسازه
2.داره به شی که ساخته میگه بابات کیه:لبخند:
3.یه eventhandler به رویداد load شی ساخته شده اضافه میکنه!
4. میگه شی ساخته شده رو نشون بده
5.این خط اشتباه از جای دیگه اومده بهش توجه نکن!


و همچنین: (Parent)
public Form1()
{
InitializeComponent();
this.Text = "HI Dear " + Environment.UserName;
}

1. مشخصه دیگه! داره کنترلها رو میسازه!
2. داره خاصیت تکست فرم رو مقدار دهی میکنه!
باEnvironment.UserName; داره user ای که با کامپیوتر اومده بالا رو بدست میاره!

و ببخشید این یه قسمت در فرزند: :خجالت:

frm2 = new Form2();
frm2.MdiParent = this;
frm2.Load += new EventHandler(frm2_Load);
frm2.Show();
this.PerformAutoScale();


مرسی خیلی خیلی :قلب:

قسمت آخرم که همون قسمت بالایی بود؟؟؟!!!:چشمک:

Kubuntu
یک شنبه 22 خرداد 1390, 09:39 صبح
اگه منظورت اون باتن فرم پدره که تو باتن فرم فرزند گذاشتم!:لبخند: نه
شما بزارش تو load فرم فرزند!:بامزه:
یا هر سری که کارت با کنترله تموم شد dispose اش کن!:چشمک: کجا؟! کجای فرم فرزند؟
من هدفم نشون دادن طریقه استفاده از فرم پدر بود:لبخندساده: سپاس
الگوریتم استفادشو که نخواسته بودی

تازشم! فکر نکنم منظور نونیم اینجور آبجکت ساختن باشه!:متفکر: ( چیزیو تو لوپ نزاشتم!؟ ) آخه button فرم دو رو که می زنی همینطوری فرم ایجاد میکنه. (من بلد نیستم میشه کدهاتون رو توضیح بدید)

حالا راهکار :
من این به نظرم میرسه که شما اون کنترلی که میخوای استفاده کنی رو آرگومان یه تابع کنی! که وقتی کار تابع تموم شد خود به خود از بین بره و فضاش آزاد بشه! منم می خوام که کمترین فضا رو اشغال کنی و تا حد امکان public نشه.
ینی مثلا اینجوری :

examplefunction((Button)this.MdiParent.Controls[0]);
private void examplefunction(Button btn)
{
...........
}
منظور از کنترل صفر Controls[0] در اینجا چیه؟!
چجوری button فرم پدر رو به فرزند ارسال کنم در تابع تون؟

noname1st
یک شنبه 22 خرداد 1390, 09:42 صبح
اگه خواستی حرفه ای عمل کنی و Public نکنی باید از دستور Invoke برای صدا زدن توابعت استفاده کنی

Kubuntu
یک شنبه 22 خرداد 1390, 09:47 صبح
بچه ها!!
من دارم یه نرم افزار حسابداری می نویسم! واسه همین برای بالا رفتن سرعت نیاز به بهترین راهکار دارم.
فکر نمی کنم سامان و noname1st (http://barnamenevis.org/member.php?98251-noname1st) جون ایده تون برای کار من بهترین باشه.[/URL]
برای [URL="http://barnamenevis.org/member.php?38205-haghft"]haghft (http://barnamenevis.org/member.php?98251-noname1st) جون رو که هنوز کامل ندیدم. فکر میکنید مناسب ترین راه حله؟!

Kubuntu
یک شنبه 22 خرداد 1390, 09:48 صبح
اگه خواستی حرفه ای عمل کنی و Public نکنی باید از دستور Invoke برای صدا زدن توابعت استفاده کنی
به چه صورت؟

Kubuntu
یک شنبه 22 خرداد 1390, 09:57 صبح
این یه نمونه برای ارتباط و رد و بدل اطلاعات بین انواع دو فرم است.برای کار شما هم نمونه داره.

راه حل شما با استفاده از office Automation Model ؟
گرچه کدهاتون رو نمی فهمم و باید از نت سرچ کنم هرکدوم چیکار می کنه. میشه بفرمایید که برای حسابداری که سنگینه، این راه حل شما خوبه یا نه؟!

سپاس

Kubuntu
یک شنبه 22 خرداد 1390, 10:15 صبح
بهترین راه حل: به تاپیک زیر، پست 20 توجه کنید!

http://barnamenevis.org/showthread.php?225703-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7%DB%8C-%D9%81%D8%B1%D9%85-%D8%A7%D8%B5%D9%84%DB%8C-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-%D8%A7%D8%B5%D9%88%D9%84%DB%8C/page2

noname1st
یک شنبه 22 خرداد 1390, 10:26 صبح
به چه صورت؟
ObjFrm.GetType().GetMethod("Name Method").Invoke(ObjFrm,Null)

noname1st
یک شنبه 22 خرداد 1390, 10:28 صبح
در صورت داشتن Property در متد به این صورت
Object obj[]={prop1,prop2,.....};
ObjFrm.GetType().GetMethod("Name Method").Invoke(ObjFrm,obj)

Kubuntu
یک شنبه 22 خرداد 1390, 10:33 صبح
تشکر noname1st (http://barnamenevis.org/member.php?98251-noname1st) جان! از اینکه وقتت رو بمن دادی اما پیشنهاد می کنم از راه حلی که در اون تاپیک گفته شده شما هم استفاده کنید در برنامه هاتون.

noname1st
یک شنبه 22 خرداد 1390, 10:34 صبح
تشکر noname1st (http://barnamenevis.org/member.php?98251-noname1st) جان! از اینکه وقتت رو بمن دادی اما پیشنهاد می کنم از راه حلی که در اون تاپیک گفته شده شما هم استفاده کنید در برنامه هاتون.
ok
هر جور صلاح
خواهش

noname1st
یک شنبه 22 خرداد 1390, 10:40 صبح
بهترین راه حل: به تاپیک زیر، پست 20 توجه کنید!

http://barnamenevis.org/showthread.php?225703-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7%DB%8C-%D9%81%D8%B1%D9%85-%D8%A7%D8%B5%D9%84%DB%8C-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-%D8%A7%D8%B5%D9%88%D9%84%DB%8C/page2

شما روش رو خوندی ببینی چی میگه و میگه از چه روشی استفاده کنی؟؟؟

Kubuntu
یک شنبه 22 خرداد 1390, 10:45 صبح
میگه از روش modeling system باید استفاده کنید. راستش منم تازه با این روش آشنا شدم، تو نت دارم دنبال اطلاعات بیشتر ازش می گردم آخه خیلی به درد برنامه من می خوره.

saman6384
یک شنبه 22 خرداد 1390, 10:48 صبح
controls یه آرایس که کنترلهای داخل هر فرم یا کنترل رو نگهداری میکنه!

نمونه کدی که گذاشتم دقیقا واسه استفاده از باتن بود دیگه

.................................................. ..............................

ولی در آخر هر چی مدیره سایتو عمر گفته! :لبخند::چشمک:

saman6384
یک شنبه 22 خرداد 1390, 10:51 صبح
کوبونتو جان اگه لینک جالبی پیدا کردی بزار مام استفاده کنیم :چشمک:

Kubuntu
یک شنبه 22 خرداد 1390, 11:01 صبح
کوبونتو جان اگه لینک جالبی پیدا کردی بزار مام استفاده کنیم :چشمک:
بفرمایید سامان جان!
http://barnamenevis.org/showthread.php?224704-%DA%AF%D9%81%D8%AA%DA%AF%D9%88%DB%8C-%D9%81%D9%86%DB%8C-%D8%B4%D9%85%D8%A7%D8%B1%D9%87-%DB%8C%DA%A9-%D8%A7%D8%B5%D9%88%D9%84-%D9%88-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C

http://barnamenevis.org/showthread.php?271352-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-User-amp-Pass-%D9%81%D9%82%D8%B7-%DB%8C%DA%A9-%D8%A8%D8%A7%D8%B1

haghft
یک شنبه 22 خرداد 1390, 11:34 صبح
من که از روش Delegate استفاده کردم تا حالا مشکلی نداشتم خیلی خوب جواب داده و از باقی روشهام ساده تره.