PDA

View Full Version : خصوصیات و متد های کنترل ایجاد شده توسط کاربر (UserControl)



asghar2008
جمعه 15 دی 1391, 21:02 عصر
سلام
دوستان من یه Usercontrol ایجاد کردم. (عکس زیر) متشکل از Button و Combobox
چند تا سوال داشتم .ممنون میشم راهنمایی کنید.


97860

97861




چطور می توانم در برنامه خود به رخداد Click دکمه داخل Usercontrol دسترسی داشته باشم؟
و هم چنین به خاصیت collection کمبو باکس usercontrol خودم ؟


در کل میخوام به خصوصیات هر دو (button , Combobox) که به صورت کنترل ،تعریف شده خودم هستند دسترسی داشته باشم.

ممنون.

plus
جمعه 15 دی 1391, 22:06 عصر
راه سادش اینه که خصوصیت Modfiers مربوط به اون کنترل ها رو از داخل UserControl، برابر public قرار بدین البته راه بهترش اینه که فقط برای اون رویداد ها و مشخصه ها ومتد های مورد نیازتون، تک تک، برای UserControl، رویداد، مشخصه و متد جدا بنویسید.
مثلا میتونید رویداد Click جدیدی برای UserControl تعریف کنید و توی رویداد کلیک دکمه، اون رویداد رو Raise کنید. و یا مثلا برای اون Collection یک مشخصه جدید واسه UserControl بنویسید:

public ComoboBox.ObjectCollection Items
{
get { return comboBox1.Items; }
}

asghar2008
جمعه 15 دی 1391, 22:48 عصر
ممنون دوست گرامی

ببخشید من اولین کنترلی است که دارم طراحی کنم ونمیدونم این کدارو کجا بنویسم؟ موقع طراحی usercontrol ؟

و خاصیت modifiers مقادیر Public,private ,friend,protected ,... داره .

plus
جمعه 15 دی 1391, 22:51 عصر
اگه میخوای از Modifiers استفاده کنید اون رو public کنید.اون کد ها رو باید در کلاس مربوط به user control بگذارید.

zarrinnegar
جمعه 15 دی 1391, 22:56 عصر
همون طور که دوستمون گفتن باید خاصیت Modifiers اونها رو روی Public قرار بدی و بعد از اینکه ذخیره کردی هر وقت کنترل رو روی فرم انداختی میتونی بهش اینطوری دسترسی داشته باشی

Usercontrol1.Button1.Text="Ok";
usercontrol1.Combobox1........

asghar2008
جمعه 15 دی 1391, 23:12 عصر
ممنون از دوستان

درست شد. اما با این کار کلیه خصوصیات Combobox و Button رو ارث بری میکنه.و این خوب نیست.

میشه با کد نویسی به ویژگی زیر در usercontrol دسترسی داشت؟

در Button:
خصوصیات text , name.,size , font
رویداد : Click و Doubleclick

و در Combobox:
خاصیت Itemو Datasource

فقط یک موردش راهنمایی کنید.

دسترسی به رویداد کلیک button خیلی مهمه ولی نمیتونم بهش دسترسی داشته باشم. چطوری میشه دسترسی داشت؟

plus
جمعه 15 دی 1391, 23:23 عصر
با این، UserControl شما یک رویداد به اسم ButtonClick پیدا میکنه و دو Property جدید.

public partial class UserControl1 : UserControl
{
public event EventHandler ButtonClick;

public UserControl1()
{
InitializeComponent();
}

public ComoboBox.ObjectCollection Items
{
get { return comboBox1.Items; }
}

[DefaultValue("")]
public string ButtonText
{
get { return button1.Text; }
set { button1.Text = value; }
}

private void button1_Click(object sender, EventArgs e)
{
if (ButtonClick != null)
{
ButtonClick(this, e);
}
}

}

zarrinnegar
جمعه 15 دی 1391, 23:24 عصر
داخل فرم یک پروسیجر میسازی که ساختارش با کلیک دکمه یکی باشه

Private void myclick (object sender , EventArgs e)
{

my code
.
.

}


بعدش میایی توی لود فرم این متد رو به کلیک دکمه کنترلت اضافه میکنی


Usercontrol1.Button1.Click += myclick;


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

asghar2008
شنبه 16 دی 1391, 02:43 صبح
با این، UserControl شما یک رویداد به اسم ButtonClick پیدا میکنه و دو Property جدید.

public partial class UserControl1 : UserControl
{
public event EventHandler ButtonClick;

public UserControl1()
{
InitializeComponent();
}

public ComoboBox.ObjectCollection Items
{
get { return comboBox1.Items; }
}

[DefaultValue("")]
public string ButtonText
{
get { return button1.Text; }
set { button1.Text = value; }
}

private void button1_Click(object sender, EventArgs e)
{
if (ButtonClick != null)
{
ButtonClick(this, e);
}
}

}


سلام

چندتا سوال داشتم :
button1 وcomboBox1 چی هستند ؟ نام همون combobox و button هستش که روی فرم Usercontrol اضافه کردیم ؟

در خط 10 :public ComoboBox.ObjectCollection Items
comobobox.objectcollection چیه؟
آیا Comobobox رو قبلا تعریف کردیم؟ اگه آره ،از چه نوعی تعریف شده؟

header فایل هایی که در اول برنامه باید اضافه بشن کدوما هستند؟

plus
شنبه 16 دی 1391, 02:50 صبح
من فرض کردم شما روی UserControlتون یک Buttonبا اسم button1 و یک ComboBox با اسم comboBox1 دارین.برای مثال مشخصه ای تعریف کردم تا از بیرون بشه به Item های ComboBox درون UserControl دسترسی داشت. ComoboBox.ObjectCollection نوع داده آیتم های کنترل ComboBox هست.ComboBox در System.Windows.Forms تعریف شده.این ها همه در System.Windows.Forms تعریف شدن نیازی به اضافه کردن چیزی نیست.

asghar2008
شنبه 16 دی 1391, 03:59 صبح
سلام

واقعا خسته نباشید میگم آقای Plus و Zarrinnegar عزیز:لبخندساده::تشویق:

بالاخره با کمک شما موفق شدم. مرسی

HAMRAHSOFT.IR
شنبه 23 دی 1391, 10:16 صبح
سلام بخشید دوستان میشه یک UserControl ساخت بعد داخل اون مثل شکل 98288دکمه روش قرار داد وبعد در تمان برنامه و فرم ها ازش استفاده کرد؟

اگه میشه امکان داره یک نمونه برام بزارید