PDA

View Full Version : کنترل رویداد button یک dll در برنامه اصلی



iman-63
یک شنبه 14 تیر 1394, 16:22 عصر
باسلام.
بنده با #C یک dll نوشتم که در آن از چند button و textbox استفاده شده.
چند متغیر عمومی هم ساختم که مقادیر رو در اون می ریزم.
چطور می شه از رویداد button های درون dll در فرم اصلی استفاده کرد؟
مثلاً می خوام زمانی که روی button درون dll کلیک می شه بتونم در فرم اصلی استفاده کنم.
باتشکر.

davidrobert
یک شنبه 14 تیر 1394, 17:45 عصر
یک سوال شما فایلdll که ساختید در فرم ساختید یا در user control اگه در فرم ساختید اسارت نباید اجزا بده به فرم اضافه کنید یعنی شما دارید فرم رو به فرم میدید یعنی قرار دهی فرم روی فرم و دوم اگه از user control استفاده میکنید مطمئن هم باشید خیلی از ویژگی های ابزار شما از کار افتاده و برنامه شما دوچار مشکل زیاد میشه.

shahryari
یک شنبه 14 تیر 1394, 18:49 عصر
یک سوال شما فایلdll که ساختید در فرم ساختید یا در user control اگه در فرم ساختید اسارت نباید اجزا بده به فرم اضافه کنید یعنی شما دارید فرم رو به فرم میدید یعنی قرار دهی فرم روی فرم و دوم اگه از user control استفاده میکنید مطمئن هم باشید خیلی از ویژگی های ابزار شما از کار افتاده و برنامه شما دوچار مشکل زیاد میشه.

منکه اصلا متوجه نشدم .....

درجواب سوال باید بگم اگه رویدادهای مورد نظرتون رو در دی ال ال پابلیک تعریف کنید ، میتونید در برنامتون اون رویداد ها رو call بکنید

iman-63
یک شنبه 14 تیر 1394, 21:12 عصر
درجواب سوال باید بگم اگه رویدادهای مورد نظرتون رو در دی ال ال پابلیک تعریف کنید ، میتونید در برنامتون اون رویداد ها رو call بکنید

در user control ساخته شده. نواع event هم public تعریف شده. اما نی دونم چطوری باید توی فرم تعریف کنم و صداش بزنم.

Mahmoud.Afrad
یک شنبه 14 تیر 1394, 21:52 عصر
اگر رویدادهای لازم رو با سطح دسترسی مناسب در یوزر کنترل تعریف کردید کافیه بعد از اضافه کردن یوزرکنترل به فرم از طریق پنجره Events و یا از طریق کد، رویدادگردان موردنظر رو ایجاد کنید.

Javad_raouf
دوشنبه 15 تیر 1394, 13:33 عصر
همونطور که دوستان گفتن اگر خود کنترل Button رو به صورت Public تعریف کنید از طریق کد می تونید به رویداد کلیکش هم دسترسی داشته، به این صورت
private void Form1_Load(object sender, EventArgs e)
{
UserControl1 uc = new UserControl1();
uc.button1.Click += button1_Click;
}


private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}

اما اگر نمی خوای Modifire کنترل Button رو به حالت Public بزاری می تونی توی UseControl اینجوری بنویسی:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public event EventHandler Button1Click = null;
private void UserControl1_Load(object sender, EventArgs e)
{
button1.Click += button1_Click;
}


void button1_Click(object sender, EventArgs e)
{
if (Button1Click != null)
Button1Click(sender, e);
}
}
این کد در واقع یک Event سفارشی می سازه و شما برای استفاده می تونی اینجوری بنویسی:
private void Form1_Load(object sender, EventArgs e)
{
UserControl1 uc = new UserControl1();
uc.Button1Click += uc_Button1Click;
}


void uc_Button1Click(object sender, EventArgs e)
{
MessageBox.Show("Test");
}
روش دوم دو تا مزیت داره:
1. استفاده کننده از یوزر کنترل نمی تونه خصوصیات Button1 رو دستکاری کنه
2. رویداد Button1Click یک رویداد رسمی برای UserControl1 است و در محیط Designer هم می تونی ازش استفاده کنی یعنی توی لیست رویداد های یوزر کنترلت نشون داده میشه

iman-63
دوشنبه 15 تیر 1394, 18:23 عصر
ممنون از پاسخ سریعتون.
به نتیجه رسید.
با تشکر