PDA

View Full Version : ساخت usercontrol



Masoomeh.H
پنج شنبه 24 دی 1394, 10:33 صبح
سلام دوستان
من می خوام یه یوزرکنترل بسازم که توش یه پیکچرباکس داشته باشه وکه وقتی توی برنامه دیگه استفاده می کنم تنظیمات این پیکچرباکس توسط یوزر انجام بشه. یعنی طول و عرض و ایمیجش رو یوزر بتونه بهش دسترسی داشته باشه و تغییر بده.
تا بحال خودم یوزر کنترل نساختم توی برنامه نویس هم که سرچ می کنم ارور کانکشن می ده. لطفا کمک کنید

محمد رضا فاتحی
پنج شنبه 24 دی 1394, 11:02 صبح
سلام...اگه منظورتون از دسترسی به صورت کد نویسی باشه باید موقع ساخت یوزرکنترل خاصیت Modifier کنترل مورد نظرتون مثلا PictureBox رو برابر public قرار بدید و وقتی طراحی تموم شد با این کد سایزش رو تغییر بدید و بقیه خاصیت ها...

userControl11.pictureBox1.Size=new Size(10,120);

Masoomeh.H
پنج شنبه 24 دی 1394, 11:09 صبح
سلام...اگه منظورتون از دسترسی به صورت کد نویسی باشه باید موقع ساخت یوزرکنترل خاصیت Modifier کنترل مورد نظرتون مثلا PictureBox رو برابر public قرار بدید و وقتی طراحی تموم شد با این کد سایزش رو تغییر بدید و بقیه خاصیت ها...

userControl11.pictureBox1.Size=new Size(10,120);
سلام ممنون از پاسختون.
منظورم اینه که می خوام چندتا متغیر توی این یوزر کنترل تعریف کنم که یوزر بتونه اون ها رو تغییر بده و بهش دسترسی داشته باشهک

محمد رضا فاتحی
پنج شنبه 24 دی 1394, 11:21 صبح
مشکلی نداره...شما متغیر های مورد نیازتون رو بصورت public تعریف کنید...و مثل کد بالا که خدمتتون عرض کردم استفاده کنید

Masoomeh.H
پنج شنبه 24 دی 1394, 11:28 صبح
مشکلی نداره...شما متغیر های مورد نیازتون رو بصورت public تعریف کنید...و مثل کد بالا که خدمتتون عرض کردم استفاده کنید
خوب من هم همین کار رو کردم ولی به فرض سایزی که من تعیین می کنم تاثیری توی سایز پیکچرباکسم نداره. یعنی سایز پیکچر باکس تغییر نمی کنه

محمد رضا فاتحی
پنج شنبه 24 دی 1394, 11:31 صبح
یه جایی اشتباه کردید...تغییر می کنه

Masoomeh.H
پنج شنبه 24 دی 1394, 11:36 صبح
یه جایی اشتباه کردید...تغییر می کنه
من توی یوزر کنترل از روش زیر برای تعریف متغیر استفاده می کنم

public int width;

public int Width
{
get { return width; }
set { width = value; }
}
public int height;


public int Height
{
get { return height; }
set { height = value; }


}

محمد رضا فاتحی
پنج شنبه 24 دی 1394, 11:45 صبح
اینو یه نگاه بکنید...

Masoomeh.H
پنج شنبه 24 دی 1394, 11:55 صبح
اینو یه نگاه بکنید...
خوب ببینید من می خوام داخل این پیکچرباکس بنویسم و شکل رسم کنم. این متغیری هم که تعریف کردم برای همینه. با این که من این متغیر رو توی فرم اصلی مقدار دهی می کنم ولی توی یوزرکنترلم مقدار دهی نمی شه. چطوری می تونم متغیرهامو مقدار دهی کنم؟؟؟؟

Mahmoud Zaad
پنج شنبه 24 دی 1394, 13:01 عصر
سلام
شما دیگه به متغیر private نیاز ندارید و مستقیما در همون property سایز رو تغییر بدید:

public int PicWidth {

get { return pictureBox1.Width; }

set { pictureBox1.Width = value; }

}

Masoomeh.H
جمعه 25 دی 1394, 08:23 صبح
سلام
شما دیگه به متغیر private نیاز ندارید و مستقیما در همون property سایز رو تغییر بدید:

public int PicWidth {

get { return pictureBox1.Width; }

set { pictureBox1.Width = value; }

}


می شه یه نمونه یوزر کنترل با set , get واسه من بزارید که مقدار متغیرهاشو از فرم اصلی بگیره؟؟؟؟

Mahmoud Zaad
جمعه 25 دی 1394, 10:48 صبح
این نمونه رو ببینید:

black_shadow
جمعه 25 دی 1394, 10:53 صبح
سلام
شما دیگه به متغیر private نیاز ندارید و مستقیما در همون property سایز رو تغییر بدید:

public int PicWidth {

get { return pictureBox1.Width; }

set { pictureBox1.Width = value; }

}



داداش میشه توضح بدین که set چرا مقدار value گرفته؟
آیا باید همیشه این مقدارو بدیم؟
اصلا این مقدار چیکار میکنه؟
باز شرمنده که تو یه تاپیک دیگه سوال پرسیدم از صاحب تاپیک معذرت میخوام

Mahmoud Zaad
جمعه 25 دی 1394, 11:07 صبح
داداش میشه توضح بدین که set چرا مقدار value گرفته؟
آیا باید همیشه این مقدارو بدیم؟
اصلا این مقدار چیکار میکنه؟
باز شرمنده که تو یه تاپیک دیگه سوال پرسیدم از صاحب تاپیک معذرت میخوام

ببینید شما عرض یک پیکچرباکس رو در نظر بگیرید. دو تا کار میشه با این عرض انجام داد 1- بخونیم ببینیم عرضش چنده. 2- عرضش رو عوض کنیم. خب این "بخونیم ببینیم عرضش چنده" میشه get و "عرضش رو عوض کنیم" میشه set. پس اون set برای این مقدار گرفته که بتونیم عرض پیکچر باکس رو عوض کنیم.

آیا باید همیشه این مقدار رو بدیم؟ نه لزوما. وقتی نیازی ندارید که عرض رو تغییر بدید نیازی هم به این قسمت نیست یعنی اون خط رو میشه کامنت کرد. یه چیزی داریم به اسم ReadOnly یا فقط خواندنی، منظور همینه یعنی فقط میشه بخونی، نمیشه روش بنویسی و تغییرش بدی.
حتی میشه get رو کامنت کرد و فقط set رو تنظیم کرد.

Masoomeh.H
جمعه 25 دی 1394, 11:44 صبح
ببینید شما عرض یک پیکچرباکس رو در نظر بگیرید. دو تا کار میشه با این عرض انجام داد 1- بخونیم ببینیم عرضش چنده. 2- عرضش رو عوض کنیم. خب این "بخونیم ببینیم عرضش چنده" میشه get و "عرضش رو عوض کنیم" میشه set. پس اون set برای این مقدار گرفته که بتونیم عرض پیکچر باکس رو عوض کنیم.

آیا باید همیشه این مقدار رو بدیم؟ نه لزوما. وقتی نیازی ندارید که عرض رو تغییر بدید نیازی هم به این قسمت نیست یعنی اون خط رو میشه کامنت کرد. یه چیزی داریم به اسم ReadOnly یا فقط خواندنی، منظور همینه یعنی فقط میشه بخونی، نمیشه روش بنویسی و تغییرش بدی.
حتی میشه get رو کامنت کرد و فقط set رو تنظیم کرد.

خوب من از همین روش استفاده کردم و لی با این طول و عرضی که من می دم پیکچرباکس رو رسم نمی کنه. در اصل با همون مقداری رسم می کنه که روی یوزرکنترل هست.
138413138413

Mahmoud Zaad
جمعه 25 دی 1394, 12:07 عصر
من امتحان کردم مشکلی نداشت ولی شما از کجا میخواید مقدار دهی کنید اون تکست باکس و تابع picture که نوشتید چیه؟ اگه از داخل همون تکست باکس میخواید مقدار دهی کنید که به پراپرتی نیاز ندارید و توی textChanged یا validated تکست باکس میشه اندازه رو نوشت.

Masoomeh.H
جمعه 25 دی 1394, 12:21 عصر
من امتحان کردم مشکلی نداشت ولی شما از کجا میخواید مقدار دهی کنید اون تکست باکس و تابع picture که نوشتید چیه؟ اگه از داخل همون تکست باکس میخواید مقدار دهی کنید که به پراپرتی نیاز ندارید و توی textChanged یا validated تکست باکس میشه اندازه رو نوشت.
نه می خوام از طریق کد مقدار دهی کنم. اون تکس باکس هم گذاشته بودم برای تست. اون تابع پیکچر هم برای اینه که وقتی اندازه ها ست شد بتونم توش تغییراتی رو روی پیکچر باکس بدم.

Mahmoud Zaad
جمعه 25 دی 1394, 12:28 عصر
شما همین دو تا پراپرتی که می نویسم رو بنویسید بقیه رو پاک کنید:

public int PicWidth {


get { return pictureBox1.Width; }

set { pictureBox1.Width = value; }

}

public int PicHeight {


get { return pictureBox1.Height; }


set { pictureBox1.Height= value; }


}



حالا پروژه رو build کنید و مثلاً در یک باتن بنویسید:

UserControl1.PicWidth=200;
UserControl1.PicHeight=250;