PDA

View Full Version : آیا از رویداد ها استفاده کنم؟



vahid2112
شنبه 30 دی 1391, 16:44 عصر
سلام
یه یوزر کنترل ساختم، تو یه فرم به تعداد دلخواه و با توجه به دیتابیس از این کنترل اضافه میشه
حالا میخام وقتی روی هرکدوم از یوزرکنترل ها که کلیک میکنم تو یه تکست باکس که تو فرم گذاشتمش نوشته ای اضافه بشه
چطور این کار رو باید بکنم؟
آیا از رویداد ها استفاده کنم؟

vahid2112
شنبه 30 دی 1391, 17:49 عصر
راه حل چیه
کسی کمک نمیکنه؟
چیکار کنم بهتره؟:متفکر:

vahid2112
شنبه 30 دی 1391, 18:24 عصر
مشکل اینجاست که نمیدونم باید چیکار کنم
یعنی تو این سایت مقتدر با این همه کاربر کسی بلد نیست؟

the king
شنبه 30 دی 1391, 18:36 عصر
طبیعتا کلیک روی کنترل و فعال شدنش یک رویداده و شما هر راهی که برای فهمیدن فوری این مورد بکار ببرید مستقیم یا غیر مستقیم
به وسیله رویداد انجام میشه. فرضا می توانید یک روتین کلیک عمومی برای این نیاز تون بسازید و بعد هر زمانی که یک شیء جدید از User Control تون
می سازید، شیء اون مورد جدید رو هم به این روتین کلیک پیوند بزنید. فرضا :

UserControl1 x = new UserControl1();
this.Controls.Add(x);
x.Click += new EventHandler(YourClick);



private void YourClick(object sender, EventArgs e)
{
textBox1.Text += "?";
}

vahid2112
شنبه 30 دی 1391, 18:49 عصر
ممنونم
ولی مشکل اینجاست که تعداد یوزر کنترلها بستگی به دیتابیس داره و با مقداری که از دیتابیس خونده میشه تعدادی از اونها به فرم اضافه میشه
آیا در این صورت هم مشکللی نیست؟

vahid2112
شنبه 30 دی 1391, 19:17 عصر
UserControl1 x = new UserControl1();
this.Controls.Add(x);
x.Click += new EventHandler(YourClick);



private void YourClick(object sender, EventArgs e)
{
textBox1.Text += "?";
}
[/QUOTE]



این طور فقط برای یوزر کنترلی که هیچ محتوایی نداره جواب میده اما اگر محتوایی داشته باشه ،
مثلا یوزر کنترلم تشکیل شده باشه از تعدادی کنترل که سطح یوزرکنترل رو کاملا پر کرده باشند،
جواب نمیده!

علتش چیه؟
میشه راهنمایی کنید؟

the king
شنبه 30 دی 1391, 20:08 عصر
این طور فقط برای یوزر کنترلی که هیچ محتوایی نداره جواب میده اما اگر محتوایی داشته باشه ،
مثلا یوزر کنترلم تشکیل شده باشه از تعدادی کنترل که سطح یوزرکنترل رو کاملا پر کرده باشند،
جواب نمیده!

علتش چیه؟
میشه راهنمایی کنید؟

دلیل اش اینه که وقتی روی یک کنترل فرزند کلیک بشه، ربطی به والد اش نداره و کنترل والد اش (User Control شما) از این مساله با خبر نمیشه.
پیشنهاد می کنم که داخل اون User Control تون کدی اضافه کنید که فرزند ها اش والد شون رو از مساله Click با خبر کنند :


public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}

protected override void OnControlAdded(ControlEventArgs e)
{
base.OnControlAdded(e);
e.Control.Click += new EventHandler(Control_Click);
}

void Control_Click(object sender, EventArgs e)
{
this.OnClick(e);
}
}


منظورم اون دو متد OnControlAdded و Control_Click است.

vahid2112
شنبه 30 دی 1391, 20:28 عصر
خیلی خیلی ممنون
باز یه مشکلی دارم
چیزی که تا اینجا شما گفتین یه تکست میشه بهش داد
حالا اگه یوزر کنترلم یه property داشته باشه از نوع string و من بخوام با کلیک روی کنترل تکست باکسم از اون مقدار پر بشه چیکار باید بکنم؟
ممنون میشم راهنماییم کنید.:لبخندساده:

vahid2112
شنبه 30 دی 1391, 20:51 عصر
فکر کنم یه خورده سخت شد!!!!
نه؟
:متعجب::متعجب::متعجب:

the king
شنبه 30 دی 1391, 21:14 عصر
خیلی خیلی ممنون
باز یه مشکلی دارم
چیزی که تا اینجا شما گفتین یه تکست میشه بهش داد
حالا اگه یوزر کنترلم یه property داشته باشه از نوع string و من بخوام با کلیک روی کنترل تکست باکسم از اون مقدار پر بشه چیکار باید بکنم؟
ممنون میشم راهنماییم کنید.:لبخندساده:

نه مشکل نیست، sender همون کنترل مورد نظره، فقط باید نوع داده اش رو تغییر بدید تا کامپایلر قبول کنه :

private void YourClick(object sender, EventArgs e)
{
textBox1.Text += (sender as UserControl1).Name;
}



private void YourClick(object sender, EventArgs e)
{
textBox1.Text += (sender as Control).Text;
}



private void YourClick(object sender, EventArgs e)
{
textBox1.Text += (sender as Control).Controls["textBox1"].Text;
}

vahid2112
شنبه 30 دی 1391, 22:49 عصر
کاملا مشکلم برطرف شد
ممنون از شما the king عزیز