PDA

View Full Version : سوال: ارسال مقدار از UserControl به Form



pedram.11
دوشنبه 27 شهریور 1391, 11:54 صبح
سلام
من میخوام از یه UserControl یه مقداری رو به صورت string به Form اصلی ارسال کنم و فرم هم اونو به عنوان Log ذخیره کنه، خودم تصمیم گرفتم TextBox قرار بدم و از رویداد TextChanged این مقدارو توی Form دیافت کنم، راهی بهتر دارید که خود string ارسال بشه؟
ممنون

ali_habibi1384
دوشنبه 27 شهریور 1391, 15:17 عصر
يك پراپرتي واسه فرمتون تعريف كنيد :
public string PropetiName {get;set;}

barnamenevisforme
دوشنبه 27 شهریور 1391, 15:35 عصر
سلام
این واسه منم سوال بود.
البته به یه روش دیگه حلش کردم.
ولی با تعریف یه خصوصیت جدید برای usercontrol و تغییر اون خصوصیت در فرم،فرم چطور متوجه تغییر خصوصیت بشه؟

Mahmoud.Afrad
دوشنبه 27 شهریور 1391, 15:36 عصر
در تکمیل صحبت آقای ali_habibi1384 (http://barnamenevis.org/member.php?48789-ali_habibi1384)
بعد از تعریف پراپرتی در فرم طبق پست قبل، میتونید به اینصورت پراپرتی فرم رو مقداردهی کنید:
//using System.Linq;

Form1 frm1 = Application.OpenForms.OfType<Form1>().SingleOrDefault();
if (frm1 != null)
{
frm1.PropetiName = "رشته مورد نظر";
}
Form1 نام کلاس فرمی هست که پراپرتی رو توش تعریف کردید.

pedram.11
دوشنبه 27 شهریور 1391, 18:08 عصر
خیلی ممنون از جوابتون اما اینی که شما فرمودید مشکلمو حل نکرد، من میخوام از UserControl به فرم اصلی در طول اجرای برنامه مقدار ارسال بشه و کی و کجاش معلوم نیس، چیزی مثل Log کردنه؛ همونطور که گفتم من توی UserControl یک textBox به صورت Public تعریف کردم و رویداد TextChange رو توی فرم اصلی تعریف کردم؛ حالا اگه یه زمانی بخوام مقداری ارسال بشه مقدار text توی textBox رو تغییر میدم و اینطوری میشه مقدار رو از توی event فرم دریافت کرد،حالا من میخوام به جای این کارا که textBox تعریف کنم فقط یه متن ارسال بشه. برای این راه حلی هست؟

ehsan7007
دوشنبه 27 شهریور 1391, 18:24 عصر
اگر برنامتون حجمش پایینه ، خب اون تکست باکس رو کپی کنید دیگه!

Mahmoud.Afrad
دوشنبه 27 شهریور 1391, 18:31 عصر
توی فرم اصلی چجوری لاگ میکنی؟ اگر با یک تابع این کارو انجام میدی میتونی همین تابع(متد) را public کنی. بعد با همون کدی که من گذاشتم متد رو فراخوانی کنی:

مثلا توی فرم اصلی داری
public void log(string st)
{
// ...
}

هر جا خواستی log کنی اینجوری استفاده کن
Form1 frm1 = Application.OpenForms.OfType<Form1>().SingleOrDefault();
if (frm != null)
{
frm.log("رشته مورد نظر");
}

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

pedram.11
دوشنبه 27 شهریور 1391, 18:55 عصر
Form1 frm1 = Application.OpenForms.OfType<Form1>().SingleOrDefault();
if (frm != null)
{
frm.log("رشته مورد نظر");
}



این دستور توی UserControl قرار داده میشه؟ کار خط اولی چیه؟ کنترل به صورت پویا اضافه میشه و فرمی وجود نداره که بخوایم معرفی کنیم
یکم در مورد دستور اولتون توضیح میدید ؟

pedram.11
دوشنبه 27 شهریور 1391, 19:04 عصر
مشکلم حل شد
میگم شاید یکی یه روزی مثه من به این مشکل برخورد...
گفتم میخوام از طریق UserControl یه مقداریو به فرم اصلی ارسال کنم و چیزی مثل Log کردن اطلاعاته، فرض میکنیم میخوایم از UserControl یه متنیو به ListBox که توی فرم اصلی هست اضافه کنیم، برای اینکار توی UserControl؛ لیست باکسی که توی فرم اصلی هست رو به این صورت تعریف میکنیم:

ListBox LogList;
private void UserControl1_Load(object sender, EventArgs e)
{
LogList = (ListBox)ParentForm.Controls["listBox1"];
}

حالا توی UserControl هرجایی که بخوایم میتونیم listBox که توی فرم اصلی(والد) هست رو دسکاری کنیم

private void AddLog(string msg)
{
LogList.Items.Add(msg);
}

البته این چیزی ود که خودم نوشتم اساتید اگه مشکلی میبینید یا روش بهتری دارید از گفتنش دریغ نکنید و مارو بی بهره نذارید، ممنون


آقای mafaman2003 لطفا در مورد کدی که گفتم یه توضیحی هم بدید ممنون میشم