PDA

View Full Version : طریقه ی ساخت کامپوننت در #C



rezakhafan4u
دوشنبه 13 آبان 1387, 23:12 عصر
سلام دوستان
خسته نباشید
من یک پروژه دارم مینویسم که برای بعضی قسمتهای اون نیاز دارم یک کنترل یا کامپوننت جدید درست کنم
مثلا صفحه دیجیتال یا یک progress bar به شکل دما سنج
کسی میتونه کمک کنه یا یه ebook آموزشی در این رابطه معرفی کنه؟!!؟؟
با تشکر

yaghoob22
سه شنبه 14 آبان 1387, 08:44 صبح
به نام برنامه نویس دل های برنامه نویس
شمام خسته نباشید.
من تازه دارم سی شارپ کار میکن ولی تا حدودی با این سوالت سروکار داشتم.
من از این طریق استفاده میکنم.مثلا کنترل جدید اسمش p هست پس:

progressbar p=new progressbar();

بعد از اینکه نوشتی میتونی از p در هرجا استفاده کنی البته باید بصورت سراسری تعریف کنی.منکه کارم با این راه افتاده.

:لبخندساده:

Felony
سه شنبه 14 آبان 1387, 15:08 عصر
progressbar p=new progressbar();

از کدت پیداست که شما از یه کامپوننت موجود یدونه کپی ساختی و دقیقا خصوصیات اون رو به ارث بردی در حقیقت انگار یه ProcessBar رو فرمت بزاری و نامش رو قرار بدی P ...
ایشون نحوه ی ساخت یک کامپوننت رو خواستن یعنی مثلا خودت یه processBar درست کنی و براش متد و ... تعریف کنی و 100 % با یه کد 1 خطی همچین کاری رو نمیشه انجام داد و این کار توسط بحث های پیشرفته ی برنامه نویسی (کلاس و ... ) انجام میشه ...

yaghoob22
سه شنبه 14 آبان 1387, 15:43 عصر
سلام دوست عزیز
منم منظورم همینا بود
من که نگفتم همین یه خط کافیه......:ناراحت:
من منظورم این بود که برا دسترسی باید اینو بنویسی بعد بقیه کارا رو انجام بدی
:لبخندساده:

jaza_sa
چهارشنبه 15 آبان 1387, 09:58 صبح
سلام دوستان
خسته نباشید
من یک پروژه دارم مینویسم که برای بعضی قسمتهای اون نیاز دارم یک کنترل یا کامپوننت جدید درست کنم
مثلا صفحه دیجیتال یا یک progress bar به شکل دما سنج
کسی میتونه کمک کنه یا یه ebook آموزشی در این رابطه معرفی کنه؟!!؟؟
با تشکر
شما نیاز یه یک Composite Control دارید
در این ضمینه شروع به تحقیق کنید :چشمک:
برای شروع ، فکر میکنم این منبع بتونه کمکتون کنه
http://msdn.microsoft.com/en-us/library/a6h7e207.aspx

موفق باشید

rezakhafan4u
چهارشنبه 15 آبان 1387, 11:29 صبح
آقا از شما دوستان که به فکر ما هستید خیلی ممنون :قلب::قلب::قلب:
من شروع کردم به خوندن msdn ولی فکر نکنم به این زودیا موفق بشم... :ناراحت: :افسرده: :عصبانی++:
ضمن این، لطفا اگه کسی یکس از سه کامپوننت زیر رو تو اینترنت دیده یا تو یه مجموعه نرم افزاری دیده بهم آدرس یا لینکشو بده:
1- یک progress bar بصورت عمودی و به شکل دماسنج ...
2- یک صفحه ی دیجیتالی مثل صفحه ی ماشین حساب یا صفحه ی ساعت دیجیتال که یک عدد رو بگیره و نمایش بده ...
3- یک نمایشگر عقربه ای که بشه مثلا یک چیزی مثل اهم متر های عقربه ای رو پیاده سازی کرد ( البته با درجه های خاص خودمون ) ...

در ضمن اگر ebook یا آموزشی غیر از msdn نیز پیدا کردید یه لینک بزارید... :چشمک:

خیلی خیلی ممنون :خجالت: :لبخند:

یا حق

MOSARISHEHRY
دوشنبه 02 آبان 1390, 18:15 عصر
باسلام خدمت اخوی خودم ؟؟؟؟؟؟؟
شما جهت ساختن یک کامپوننت باید یک پروژه جدید بگیرد وازWindowsFormsControlLibrary1 استفاده کنی مثلاَبرای ساختن یک کنترل تکس باکس که هنگامی که موس بر روی آن کلیک می کنه رنگش تغییر کنه ووقتی که فوکوس از دست می دهد رنگ آن به رنگ اول بر گردد با ید کد مربوطه رو در رویداد
,mouseenter-MouseLeave

یک تکس باکس بنویسید وپروژه رو اجرا بدید واز DLL ساخته شده در پروژه های بعدی بجای یک تکس باکس از این استفاده ببری وحال کنی
امید که این موارد بیشتر کیچت نکرده باشه!!!!!!!!!!!!!

این هم کدش :


private void textBox1_MouseEnter(object sender, EventArgs e)

{

((

TextBox)sender).BackColor = Color.Yellow;

}



private void textBox1_MouseLeave(object sender, EventArgs e)

{

((



}

:بامزه::بامزه::بامزه::بامزه:: لب::قلب::افسرده::لبخند:

MohammadGh2011
دوشنبه 02 آبان 1390, 18:41 عصر
سلام عليکم دوستان
1-فرمت(پسوند)ي که کامپوننت رو ساختيم تو سي شارپ چيه؟
2-براي مثال من يک پروژه از نوع WindowsFormsControlLibrary1 باز ميکنم و کامپوننتم رو طراحي و ميسازم.حالا بايد چه طوري اون کامپوننت رو ذخيره کنم؟
3-چه طور از اون کامپوننتي که ساختم بايد تو WindowsFormsApplication استفاده کنم؟
ببخشيد دوستان که سوالاتم مبتديه چون من تاحالا تو سي شارپ کامپوننت نساختم:افسرده:.

موفق باشيد

nunegandom
دوشنبه 02 آبان 1390, 19:06 عصر
سلام، یه آموزش چند خطی:
برای ساخت کامپوننت یک classlibrary میسازید (پسوند dll)
بعد از نوع چیزی که میخواهید بسازید ارث بری میکنید.(مثلا از textbox برای ارث بری میکنید)
و رفرنس های مورد نیازش رو اضافه میکنید.
داخل کلاستون از کلمه this استفاده میکنید.(مثلا this.color.folan)
برای ساخت پروپرتی که تویه محیط گرافیکی نمایش داده میشه میتونید اینجوری عمل کنید:
;bool myBooll اولین حرف رو کوچیک بنویسید!
بعد روی myBool راست کلیک کنید و از گزینه Refactor گزینه Encapsulate کلیک میکنید.
تمام!
برای اینکه مثله گزینه items در پروپرتیتون داشته باشیدباید از string[] استفاده کنید.

ذخیره کردنش هم با build میتونید اون رو تولید کنید!
برای استفاده کردن از کامپوننت، باید اون رو add refrence کنید.(فایل dll)

nunegandom
دوشنبه 02 آبان 1390, 21:17 عصر
همونطور ک گفتم: add refrence

ali_habibi1384
سه شنبه 03 آبان 1390, 01:58 صبح
من يك نمونه واسط توضيح ميدم در اين نمونه من ميخوام يك پراپرتي بنام FocusBackColor به تكست باكس اضافه كنم كه كاربر بتواند آنرا مقدار دهي كند تا در هنگام ورود(enter) و خروج (validate) اين مقدارها در بك كالر تكست باكس مقدار دهي شود:
براي شروع كافيست يك پروژه جديد بسازيد و سپس يك كلاس جديد بسازيد.
حالا كد زير را در آن كلاس كپي كنيد پروژه را ذخيره كنيد و از آن يكبار Build بگيريد (Ctrl+Shift+B)
حالا به فرم برنامه برگرديد در نوار ابزار ابزاري بنام txtpronet اضافه شده است.
ميتوانيد آنرا روي فرم بگذاريد و از آن استفاده كنيد.
چنانچه قصد داريد اين ابزار بصورت فايل مجزا و بصورت dll باشد كافيست فرم را حذف كنيد و از فايل program.cs خط Application.run را حذف كنيد سپس به properties پروژه رفته و نوع آنرا به ClassLibrary تغيير نام دهيد .حالا يكبار بيلد بگيريد (Ctrl+Shift+B) .فايل dll ساخته شده را از شاخه Relase برداريد.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TextBoxtest
{
//نام كنترلي كه ميخواي درستش كني و نوعي كه داري ازش ارث بري ميكني رو ميذاري
public partial class TxtProNet : System.Windows.Forms.TextBox
{
//تعريف متغيرهاي خصوصي كلاس براي استفاده از آنها در موارد نياز
private System.Drawing.Color FBC = Color.Yellow;
private System.Drawing.Color LFBC;
//نام پراپرتي كه مي خواهيم به كلاس اضافه كنيم
public System.Drawing.Color FocusBackColor
{
//هنگام خواندن مقداري كه قرار است به ما نشان دهد برميگردانيم
get
{
return FBC;
}
//مقداري كه موقع مقدار دهي از كاربر دريافت ميشود را در پراپرتي اعمال ميكنيم
set
{
FBC = value;
}
}
//رويدادهايي كه براي تغيير پراپرتي نياز داريم به اين صورت تعريف ميكنيم
protected override void OnEnter(EventArgs e)
{
LFBC = this.BackColor;
//اين خط را براي آن ميگذاريم كه خود رويداد اصلي خراب نشود
base.OnEnter(e);
}
protected override void OnValidated(EventArgs e)
{
this.BackColor = LFBC;
base.OnValidated(e);
}
}
}

emperor_vb6
شنبه 26 آذر 1390, 22:56 عصر
من يك نمونه واسط توضيح ميدم در اين نمونه من ميخوام يك پراپرتي بنام FocusBackColor به تكست باكس اضافه كنم كه كاربر بتواند آنرا مقدار دهي كند تا در هنگام ورود(enter) و خروج (validate) اين مقدارها در بك كالر تكست باكس مقدار دهي شود:
براي شروع كافيست يك پروژه جديد بسازيد و سپس يك كلاس جديد بسازيد.
حالا كد زير را در آن كلاس كپي كنيد پروژه را ذخيره كنيد و از آن يكبار Build بگيريد (Ctrl+Shift+B)
حالا به فرم برنامه برگرديد در نوار ابزار ابزاري بنام txtpronet اضافه شده است.
ميتوانيد آنرا روي فرم بگذاريد و از آن استفاده كنيد.
چنانچه قصد داريد اين ابزار بصورت فايل مجزا و بصورت dll باشد كافيست فرم را حذف كنيد و از فايل program.cs خط Application.run را حذف كنيد سپس به properties پروژه رفته و نوع آنرا به ClassLibrary تغيير نام دهيد .حالا يكبار بيلد بگيريد (Ctrl+Shift+B) .فايل dll ساخته شده را از شاخه Relase برداريد.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TextBoxtest
{
//نام كنترلي كه ميخواي درستش كني و نوعي كه داري ازش ارث بري ميكني رو ميذاري
public partial class TxtProNet : System.Windows.Forms.TextBox
{
//تعريف متغيرهاي خصوصي كلاس براي استفاده از آنها در موارد نياز
private System.Drawing.Color FBC = Color.Yellow;
private System.Drawing.Color LFBC;
//نام پراپرتي كه مي خواهيم به كلاس اضافه كنيم
public System.Drawing.Color FocusBackColor
{
//هنگام خواندن مقداري كه قرار است به ما نشان دهد برميگردانيم
get
{
return FBC;
}
//مقداري كه موقع مقدار دهي از كاربر دريافت ميشود را در پراپرتي اعمال ميكنيم
set
{
FBC = value;
}
}
//رويدادهايي كه براي تغيير پراپرتي نياز داريم به اين صورت تعريف ميكنيم
protected override void OnEnter(EventArgs e)
{
LFBC = this.BackColor;
//اين خط را براي آن ميگذاريم كه خود رويداد اصلي خراب نشود
base.OnEnter(e);
}
protected override void OnValidated(EventArgs e)
{
this.BackColor = LFBC;
base.OnValidated(e);
}
}
}


ميشه بيشتر توضيح بديد؟

nokia1200
شنبه 25 آذر 1391, 18:09 عصر
من يك نمونه واسط توضيح ميدم در اين نمونه من ميخوام يك پراپرتي بنام FocusBackColor به تكست باكس اضافه كنم كه كاربر بتواند آنرا مقدار دهي كند تا در هنگام ورود(enter) و خروج (validate) اين مقدارها در بك كالر تكست باكس مقدار دهي شود:
براي شروع كافيست يك پروژه جديد بسازيد و سپس يك كلاس جديد بسازيد.
حالا كد زير را در آن كلاس كپي كنيد پروژه را ذخيره كنيد و از آن يكبار Build بگيريد (Ctrl+Shift+B)
حالا به فرم برنامه برگرديد در نوار ابزار ابزاري بنام txtpronet اضافه شده است.
ميتوانيد آنرا روي فرم بگذاريد و از آن استفاده كنيد.
چنانچه قصد داريد اين ابزار بصورت فايل مجزا و بصورت dll باشد كافيست فرم را حذف كنيد و از فايل program.cs خط Application.run را حذف كنيد سپس به properties پروژه رفته و نوع آنرا به ClassLibrary تغيير نام دهيد .حالا يكبار بيلد بگيريد (Ctrl+Shift+B) .فايل dll ساخته شده را از شاخه Relase برداريد.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TextBoxtest
{
//نام كنترلي كه ميخواي درستش كني و نوعي كه داري ازش ارث بري ميكني رو ميذاري
public partial class TxtProNet : System.Windows.Forms.TextBox
{
//تعريف متغيرهاي خصوصي كلاس براي استفاده از آنها در موارد نياز
private System.Drawing.Color FBC = Color.Yellow;
private System.Drawing.Color LFBC;
//نام پراپرتي كه مي خواهيم به كلاس اضافه كنيم
public System.Drawing.Color FocusBackColor
{
//هنگام خواندن مقداري كه قرار است به ما نشان دهد برميگردانيم
get
{
return FBC;
}
//مقداري كه موقع مقدار دهي از كاربر دريافت ميشود را در پراپرتي اعمال ميكنيم
set
{
FBC = value;
}
}
//رويدادهايي كه براي تغيير پراپرتي نياز داريم به اين صورت تعريف ميكنيم
protected override void OnEnter(EventArgs e)
{
LFBC = this.BackColor;
//اين خط را براي آن ميگذاريم كه خود رويداد اصلي خراب نشود
base.OnEnter(e);
}
protected override void OnValidated(EventArgs e)
{
this.BackColor = LFBC;
base.OnValidated(e);
}
}
}


سلام دوست گرامی من همین کد رو عینا کپی کردم برنامه هم خطا نداد ولی رنگ تکست که تغییر نمیکنه چرا ؟ میشه یک کمی توضیح بدید ممنون میشویم

rasol_afkham
دوشنبه 30 اردیبهشت 1392, 16:35 عصر
سلام دوستان
خسته نباشید
من یک پروژه دارم مینویسم که برای بعضی قسمتهای اون نیاز دارم یک کنترل یا کامپوننت جدید درست کنم
مثلا صفحه دیجیتال یا یک progress bar به شکل دما سنج
کسی میتونه کمک کنه یا یه ebook آموزشی در این رابطه معرفی کنه؟!!؟؟
با تشکر

سلام دوست عزیز
در آدرسی که در زیر نوشته ام می تونیند یک ایبوک خوب درباره آموزش ساخت کامپوننت در سی شارپ، دانلود کنید.
http://www.sadracsharp.blogfa.com/post/52

mousa1992
دوشنبه 30 اردیبهشت 1392, 20:49 عصر
104453

ProgressBar عمودی و با قابلیت تغییر رنگ

موفق
http://barnamenevis.org/images/misc/pencil.png

mehran788
سه شنبه 17 دی 1392, 22:13 عصر
باسلام خدمت اخوی خودم ؟؟؟؟؟؟؟
شما جهت ساختن یک کامپوننت باید یک پروژه جدید بگیرد وازWindowsFormsControlLibrary1 استفاده کنی مثلاَبرای ساختن یک کنترل تکس باکس که هنگامی که موس بر روی آن کلیک می کنه رنگش تغییر کنه ووقتی که فوکوس از دست می دهد رنگ آن به رنگ اول بر گردد با ید کد مربوطه رو در رویداد
,mouseenter-MouseLeave

یک تکس باکس بنویسید وپروژه رو اجرا بدید واز DLL ساخته شده در پروژه های بعدی بجای یک تکس باکس از این استفاده ببری وحال کنی
امید که این موارد بیشتر کیچت نکرده باشه!!!!!!!!!!!!!

این هم کدش :


private void textBox1_MouseEnter(object sender, EventArgs e)

{

((

TextBox)sender).BackColor = Color.Yellow;

}



private void textBox1_MouseLeave(object sender, EventArgs e)

{

((



}

:بامزه::بامزه::بامزه::بامزه:: لب::قلب::افسرده::لبخند:


با سلام و خسته نباشید.
من وقتی یک پروژه جدید تو سی شارپ باز می کنم هر چی نگاه کردم گزینه Windows Forms Controll Library رو نتونستم پیدا کنم. ویژوال استودیو رو هم کامل نصب کردم. مشکل از کجا می تونه باشه؟
ممنون میشم راهنماییم کنین

momimomi
سه شنبه 17 دی 1392, 22:37 عصر
سلام
اینم عکسش
115027

Davidd
چهارشنبه 18 دی 1392, 14:44 عصر
خيلي كار سختي نيست. اين چيزايي كه دوستان توضيح دادند بيشتر customize كردن يك كنترل مثلا textbox بود. براي كار شما كه چند كنترل باهم بايد تركيب بشند ميتوني از User Control استفاده كني. روي اسم پروژه در Solution Explorer كليك راست كن و Add User Control بزن تا يك usercontrol اضافه بشه. روي usercontrol ميتوني كنترل هاي كه ميخاي اضافه كني مثلا progressbar و يك textbox.
براي دسترسي و مقدار دادن به progressbar هم يك پروپرتي تعريف ميكني :

Public int Value
{
set {
progressbar1.value=value;
textbox1.text=value.tostring();
}
get{
return progressbar1.value;}



پروژه كه يكبار كامپايل بشه اين usercontrol به بالاي toolbox اضافه ميشه و ميتوني ازش استفاده كني.
فرض كنيم يه دونه با اسم usercontrol1 به فرم اضافه كردي با دستور usercontrol1.Value=10; هر دوي progressbar و textbox مقدار 10 ميگيرند.

momimomi
چهارشنبه 18 دی 1392, 21:09 عصر
سلام
این لینک را ببین
http://barnamenevis.org/showthread.php?390481-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-DataPicker-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%85%D9%86%D8%A7%D8%B3%D8%A8%D8%AA%D9%87%D8%A7%D B%8C-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D8%B4%D9%85%D8%B3%DB%8C-%D9%88-%D9%82%D9%85%D8%B1%DB%8C-(%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%A8%D8%A7-%D8%B3%D9%88%D8%B1%D8%B3)