PDA

View Full Version : اجرای رویداد کلیک user control وقتی که روی کنترل های داخل آن کلیک می شود



negar.rafie
چهارشنبه 28 تیر 1391, 12:17 عصر
سلام دو دوستان
من می خوام یه user control درست کنم که یه لیبیل و یه picturebax داخلش باشه و وقتی که این user contro
را وارد فرم برنامه می کنیم بتوانیم متن لیبل و عکس picturebax را عوض کنیم
برای تغییر متن لیبل مشکلی ندارم و در قسمت ساخت user contro کد یر را وارد می کنم و وتی در برنامه خاصیت تکست user contro را عوض می کنم متن لیبل عوض میشه



[

Browsable(true)]

[

DesignerSerializationVisibility(DesignerSerializat ionVisibility.Visible)]



public override string Text

{



get { return labelX1.Text; }



set { labelX1.Text = value; }

}

حالا برای picturebax باید چه کار کنم که یه خاصیت برای تغییر عکس اون به قسمت properties
user control اضافه بشه

ASKaffash
چهارشنبه 28 تیر 1391, 12:36 عصر
سلام
با فرض بودن یک PictureBox روی UserControl اینطوری عمل کنید :


public partial classUserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public Image Image
{
set { this.pictureBox1.Image =value; }
get { returnthis.pictureBox1.Image; }
}
}

negar.rafie
چهارشنبه 28 تیر 1391, 13:18 عصر
خیلی ممنون
حالا یه سوال دیگه
وقتی user controlرا روی فرم میاریم و می خوایم در رویداد کلیک ان کدی بنویسیم باید حتما در زمان اجرا روی صفحه user control کلیک بشه تا کد اجرا بشه حالا چه کار کنیم که اگر روی لیبل یا picturebax هم کلیک شد کدی که در رویداد کلیک user control نوشتیم اجرا بشه؟

negar.rafie
چهارشنبه 28 تیر 1391, 16:24 عصر
???????????????????????????????

Mahmoud.Afrad
چهارشنبه 28 تیر 1391, 18:46 عصر
خوب لیبل یا پیکچر باکس هم رویداد کلیک دارند دیگه. در یوزرکنترل روی لیبل دابل کلیک کن و ...

negar.rafie
چهارشنبه 28 تیر 1391, 19:36 عصر
نه دوست عزیز منظور من را متوجه نشدید
مثلا ما اگر user control را روی فرم خود گذاشتم و در رویداد کلیک ان کدی نوشتیم که مثلا رنگ فرم عوض شود وقتی برنامه را اجرا کنیم برای تغییر رنگ حتما باید روی صفحه user control کلیک شود و اگر روی لیبل کلیک شود کد اجرا نمیشود

Y_Safaiee
چهارشنبه 28 تیر 1391, 19:46 عصر
با سلام خدمت شما دوست عزیز

راههای زیادی داره اما راحت ترین کارش اینه که تو کد کلیک لیبلتون کد کلیک یوزر کنترل رو صدا کنید

مثلا :



private void button1_Click_1(object sender, EventArgs e)
{
MessageBox.Show("Hello World");
}
private void label1_Click(object sender, EventArgs e)
{
button1_Click_1(sender, e);
}


دربالا button نقش یوزر کنترل و عکستونو داره و لیبلم رو فرم گذاشتین.

اگه لیبلم مدنظرم داخل یوزرکنترل ساخته شده هست میتونین دوتاشو با هم بگیرید و یک کد یکتا برای دوتاش ایجاد کنید,یعنی 1کد بنویسید و هم روی عکس کار کنه هم روی لیبل

موفق باشین
بایت بایت

negar.rafie
چهارشنبه 28 تیر 1391, 20:35 عصر
ببینید دوستان فرض کنید فرض کنید ما روی فرم خود 100تا از اینها را قرار دادیم حالا برای صدا زدن کد هر یک از user ها در زمان طراحی user control باید 100 بار این کار را بکنم؟
اگر بخوایم نمیشه چون در زمان طراحی usercontrol نام ان مثلا eser است و لی وقتی وارد فرم پروژه خود می کنیم میشود user1,user2,. . . . . .

gwbasic
چهارشنبه 28 تیر 1391, 21:31 عصر
دوستمون youuness جواب شما رو دادن. من حدس می زنم که شما بیشتر دنبال تمرین و کنکاش هستین بنابراین این موضوع رو ادامه می دم نیاز شما در اصل همون بحث Event Bubbling هست یعنی اینکه وقتی رویداد کلیک label اتفاق می افته این رویداد همانجا متوقف نشه و رویداد کلیک Container اون یعنی UserControl هم اتفاق بیافته. متاسفانه Winform ها این امکان رو ندارند ولی در WPF‌ این اتفاق می افته بنابراین شما باید خودتون این موضوع رو در WinForm شبیه سازی کنید.

public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
OnClick(e);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
OnClick(e);
}


حالا فرض کنید دوتا از این userControl1‌رو روی فرم گذاشتیم برای رویداد کلیک هر دو این متد رو صدا بزنیم

private void userControl11_Click(object sender, EventArgs e)
{
BackColor = Color.Blue;
}}

negar.rafie
چهارشنبه 28 تیر 1391, 21:38 عصر
خیلی ممنون جناب gwbasic (http://barnamenevis.org/member.php?25140-gwbasic) منظورم دقیقا همین بود

ASKaffash
شنبه 31 تیر 1391, 06:58 صبح
سلام
خیلی راحت :
درون UserControl :


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