نوشته شده توسط
Mahmoud.Afrad
یک کد مثال از چیزی که ساختید بزارید و بگید چه انتظاری دارید.
هر چند فکر میکنم پست اول کاملا واضح هستش ولی سعی می کنم مشکلم رو به صورت کامل شرح بدم. از UC1 یا همان User Control 1، فقط به عنوان ابزاری برای ویرایش، حذف یا ذخیره داده ها استفاده می کنم که اسم اون رو ToolBox گذاشتم که یکی از دکمه های آن، دکمه تایید برای ذخیره سازی داده ها هستش که در شکل Save Button نامگذاری شده است. از این ابزار در ابزاری دیگه ای مانند uc2 یا حتی در فرم های اصلی برنامه به صورت مستقل استفاده می کنم. در uc2 فیلدهایی برای ورود داده ها توسط کاربران تعبیه شده که می توان از اون در قسمت های مختلف برنامه استفاده کرد. حال uc1 رو داخل uc2 قرار دادم که عملکرد uc2 رو با اون کنترل کنه (ویرایش، حذف و به روز رسانی). حال uc2 عملا از یه سری کنترل مانند تکس باکس و دکمه تشکیل شده (برای ورود داده ها) و یک جعبه ابزار که خودش یک uc هستش که اسمش رو گذاشتیم uc1. از uc2 در قسمت های مختلف برنامه استفاده می کنم. حالا میخوام وقتی کاربر روی دکمه Save کلیک میکنه اول اعتبار سنجی داده های ورودی انجام بشه. میخوام این اعتبار سنجی در uc2 انجام بشه و مجبور نباشم هر جا که از این uc2 استفاده می کنم بخوام کدها رو تکرار کنم. و بعد از اعتبار سنجی، عملیات اصلی Save فراخوانی بشه. برای Save داده ها از Delegate به شرح کد های زیر استفاده کرده ام.
در User Control 1 یا همون Toolbox:
public Delegate SaveDelegate;
private void SaveButton_Click(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
SaveDelegate.DynamicInvoke();
}
توجه داشته باشید، چون در بعضی از فرم های برنامه از uc1 به صورت مستقل استفاده کرده ام، استفاده از کد فوق در این user control الزامی است.
به منظور اعتبار سنجی در User Control 2 نمیدونم چی بنویسم!!!
//I need some code to validate fields in user control 2
در Main Form که از UC2 استفاده کرده ام. برای فراخوانی رویداد SaveButton_Click به صورت زیر کد نوشته ام:
public delegate void SaveDelegate();
private event SaveDelegate saveEvent;
public MainForm()
{
InitializeComponent();
saveEvent += new SaveDelegate(Save);
UserControl2.toolboxUserControl1.SaveDelegate = saveEvent;
}
private void Save()
{
//Do something
}