PDA

View Full Version : آموزش: طریقه کار با کامپوننت ها و ابزار سی شارپ



Mohandes2009
جمعه 11 تیر 1389, 18:47 عصر
سلام دوستان این بحث را راه انداختم تا یه تحولی در سایت بشه:لبخند:


همه دست در دست هم بدیم و برنامه نویس خویش را کنیم آباد:لبخند:



هرکه هر ابزاری در سی شارپ بلده بیاد با عکس تمام ویژگی هاش را توضیح بده

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


حالا نظرتون چیه؟ اگه پایه هستید بسم الله:چشمک:

Mohandes2009
جمعه 11 تیر 1389, 18:49 عصر
کنترلImageList

خب اولین کنترلی که معرفی می کنم کنترل ImageList هست.

این کنترل همانند کنترل زمان سنج در زمان اجرا قابل رؤیت نیست به همین دلیل در زیرفرم ظاهر می شود.

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

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

تصاویر یک ImageList در مجموعه Image ان کنترل ذخیره می شود.


برای اضافه نمودن تصاویر به این کنترل بر روی خاصیت Imgae کلیک کرده ودر کادر باز شده با کلیک بر روی Add تصاویر خود را اضافه نمایید.

بصورت پیش فرض سایز تصاویر را 16*16 می کند اما شما می توانید این سایز رو تغییر بدید.


قدرت این کنترل در واقع هنگامی نمایان میشه که با کنترل هایی که می توانند به تصاویر ذخیره شده دسترسی پیدا کنند همراه شود.


البته همه ی کنترل های ازImageList پشتیبانی نمی کنند.

Mohandes2009
شنبه 12 تیر 1389, 08:11 صبح
کنترل ListView

از این کنترل می توان جهت ایجاد لیستهای ساده ، شبکه های نقاط چندستونی و سینی شمایل ها استفاده کرد.

قسمت سمت راست explorer یک ListView هست.

گزینه های اصلی که برای تغییرشکل ظاهری ListView در اختیار دارید عبارتنداز : Large Icon،small Icon،List، Details و title. این گزینه ها در ویژگی view این کنترل قرار دارد.

و عملکرد این گزینه ها همچون عملکرد view در اکسپلورر هست.

برای شروع یک کنترل ازListView در فرم قرار بدید.

خاصیت smallImageList را برابر کنترل ImageList ایی که قبلاً ساختید مقدار دهی کنید.

و خاصیت viewرا مثلاً برابر Deitals کنید.

ListView اجازه ی الحاق به دو ImageList رو می ده : یکی برای شمایل 32*32 پیکسلی و دیگری برای تصاویر کوچک ؛ یعنی LargeImageList وsmallImageList .

اگه خاصیت view رو برابر LargeIcon کنید تصاویر خاصیت LargeImageList رو نمایش میده وگرنه تصاویر خاصیت smallImageList .

وقتی خاصیت view رو برابر Deitals قرار می دید یک عنوان خالی در بالای این کنترل قرار می گیره . محتویات این عنوان بوسیله ستون های تعریف شده در مجموعه columns تعیین می شند.

بر روی خاصیت columns کلیک کرده و فیلدهای موردنظر خودتون رو اضافه کنید.

برای اضافه کردن عناصر به ListView از ویژگی items استفاده می کنیم.
بر روی items کلیک کرده و عناصر خودتون رو اضافه کنید و ویژگی text هر عنصر رو مقدار بدید . با استفاده از خاصیت ImageIndex تصویر موردنظرتون رو هم انتخاب می کنید.

اگر در خاصیت column بیشتر از یک ستون رو انتخاب کرده باشید در این قسمت مقدار اولین ستون در خاصیت text تعیین میشه و مقدار بقیه ستون هادر خاصیت subItem.



مدیریت ListView بااستفاده از کد:

بصورت پیش فرض خاصیت Multselect برابر true هست لذا ListView بجای ویژگی selectdItem از مجموعه selectdItems پیشتیبانی می کند.

برای کسب اطلاعات در مورد یک عنصر انتخاب شده به اندیس آن رجوع می کنیم.

مثلاً:




if (lvMyListView.SelectedItems.Count > 0)


label1.Text = lvMyListView.SelectedItems[0].Text



خط اول می گه اگر سطری انتخاب شده بود ودر خط دوم اولین عنصر انتخاب شده در ListView رو در لیبل1 نمایش میده.

اضافه کردن :


lvMyListView.Items.Add("Mobina alizade");




این مدل اضافه کردن فقط به ستون اول مقدار میده اما اگه شمادر حالت deitals باشید و چندتاستون تعریف کرده باشید از طریق زیر اد کردن رو انجام بدید:





ListViewItem objListView;

objListView =lvMyListView.Items.Add("Homa abasi", 2);


objListView.SubItems.Add("Mashhad");



objListView.SubItems.Add("Khorasan");






مثلا فرض کردم که در حالت Deitals هستم و سه ستون دارم یکی نام ، شهر، استان.
سطر دوم متن ستون اولم رو تعیین میکنه و شماره 2 به معنی این هست که از ImageList خاصیت smallImageList تصویر دوم رو به این رکورد اضافه کن. و در دوسطربعدی هم مقدار دو ستون بعدی معین می شند.



حذف:

lvMyListView.Items.Remove(lvMyListView.SelectedIte ms[0]);

یعنی اولین سطری که انتخاب شده رو حذف کن.




lvMyListView.Items.RemoveAt(0);


یعنی اولین سطر listview رو حذف کن.


lvMyListView.Items.Clear();

یعنی کل سطرهای listview رو حذف کن.


:لبخندساده:موفق باشید نظرتون را هم بگید و خودتون هم چیزی بلدید دست به کار بشید لطفااااااً

amir-yeketaz
شنبه 12 تیر 1389, 08:49 صبح
کار خیلی خوبی کردی ... چون فکر میکنم که کار با کنترل ها مشکل خیلی ها باشه ...
فقط یه چیزی :
اگه این آموزش هایی رو که میذاری با یه سمپل بذاری به نظرم خیلی بهتره ...

Mohandes2009
شنبه 12 تیر 1389, 13:09 عصر
کار خیلی خوبی کردی ... چون فکر میکنم که کار با کنترل ها مشکل خیلی ها باشه ...
فقط یه چیزی :
اگه این آموزش هایی رو که میذاری با یه سمپل بذاری به نظرم خیلی بهتره ...
چشم حتماً در اسرع وقت میزارم :چشمک:

Mohandes2009
شنبه 12 تیر 1389, 16:57 عصر
سلام
چون عنوان تاپیک درباره کامپوننت هاست این سوال رو میپرسم.

من از gridview بسته Telerik 2009 استفاده کردم و متاسفانه نتونستم خواصی مثل
AlternatingRowsDefaultCellStyle
DefaultCellStyle
و ...
رو توش پیدا کنم.
اگه با کامپوننت های Telerik هم کار کردید، ممنون میشم آموزشهایی درباره ابزارهای پرکاربرد Telerik و خواص مهم اونها برامون بزارید. :لبخند:

سپاسگزارم.
اگه سرچ کنی حتما آموزشش هست تو نت

در ضمن اسم کاملشا بنویس:چشمک:

Mohandes2009
یک شنبه 27 تیر 1389, 08:33 صبح
جابجایی بین سطر ها در ListView


با کد زیر با دو تا کلید به نام های Up و Down بین سطرهای یک ListView در حالت دیتیل حرکت کنید :





private void btnUp_Click(object sender, EventArgs e)
{
try
{
if (lstResourcesSelected.SelectedItems.Count > 0)
{
ListViewItem selected = lstResourcesSelected.SelectedItems[0];
int indx = selected.Index;
int totl = lstResourcesSelected.Items.Count;

if (indx == 0)
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(totl - 1, selected);
}
else
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(indx - 1, selected);
}
}
else
{

MessageBox.Show("!éلهں «ل© êي©§ ëâ© ©ں ں뢦ں کëی§ ي §ي ں©ى ¢éں¬ ëêںیی§",
"ں뢦ں ™ی¢ê", MessageBoxButtons.OK, MessageBoxIcon.Stop);
);
}
}
catch (Exception ex)
{

}
}












private void btnDown_Click(object sender, EventArgs e)
{
try
{
if (lstResourcesSelected.SelectedItems.Count > 0)
{
ListViewItem selected = lstResourcesSelected.SelectedItems[0];
int indx = selected.Index;
int totl = lstResourcesSelected.Items.Count;

if (indx == totl - 1)
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(0, selected);
}
else
{
lstResourcesSelected.Items.Remove(selected);
lstResourcesSelected.Items.Insert(indx + 1, selected);
}
}
else
{

MessageBox.Show("!éلهں «ل© êي©§ ëâ© ©ں ں뢦ں کëی§ ي §ي ں©ى ¢éں¬ ëêںیی§",
"ں뢦ں ™ی¢ê", MessageBoxButtons.OK, MessageBoxIcon.Stop);
);
}
}
catch (Exception ex)
{
}



}

Mohandes2009
یک شنبه 27 تیر 1389, 08:36 صبح
حذف در لیست ویو (ListView) جواب سوال من در بحث : http://barnamenevis.org/forum/showthread.php?t=233499


پاسخ s.khoshfekran :




for (int i = 0; i < lv.Items.Count; i++)
{
if (lv.Items[i].Checked)
{
lv.Items[i].Remove()
}
}



پاسخ voodoo01 :




private void button1_Click(object sender, EventArgs e)
{

foreach (ListViewItem roww in listView1.Items)
{
if (roww.Checked == true)
roww.Remove();
}


}

Mohandes2009
پنج شنبه 04 شهریور 1389, 13:27 عصر
اضافه کردن کنترل در حال اجرا !
Add Control in run time
شما با قرار دادن این دستور در یک رویداد می توانید در حین اجرا کنترلی را به فرم خود اضافه کنید


Label lbl = new Label();

Point p = new Point(120 , 120 );
lbl.Location = p;
lbl.Text = "new Txt";
Control[] cont = new Control[] { lbl };
Controls.AddRange(cont);


--------------------
در این مثال طریقه استفاده از کنترل TreeView به طور کاملا ساده و روان شرح داده شده است .
برای استفاده های عملی تر باید این فرایند در حلقه های تودرتو و بر حسب نیاز پیاده سازی شود.
نکته : این روش فقط در C# ( سی شارپ ) کاربرد دارد و برای استفاده در Asp.net باید تغییرات کوچکی را اعمال کنید.




//Clear Old Node's
treeView1.Nodes.Clear();

//Creat New Root Node
TreeNode tn = new TreeNode("new Node1");

//Creat Chid Node's
tn.Nodes.Add("Node1 Node1");
tn.Nodes.Add("Node1 Node2");
tn.Nodes.Add("Node1 Node3");

//Add Child Node's To TreeView
treeView1.Nodes.Add(tn);

//Creat New Root Node
TreeNode tn2 = new TreeNode("new Node2");

//Creat Chid Node's
tn2.Nodes.Add("Node2 Node1");
tn2.Nodes.Add("Node2 Node2");

//Creat New RootNode of Tn2
TreeNode tn3 = new TreeNode("Node2 Node3");

//Add Child's node to Node2 Node3
tn3.Nodes.Add("Node2 Node3 Node1");
tn3.Nodes.Add("Node2 Node3 Node2");

//Add New Root Node to Tn2
tn2.Nodes.Add(tn3);

//Add New Node To TreeView
treeView1.Nodes.Add(tn2);

Mohandes2009
پنج شنبه 04 شهریور 1389, 13:35 عصر
مثالی از لیست باکس

Mohandes2009
سه شنبه 09 شهریور 1389, 18:23 عصر
ایجاد کنترل‌های سفارشی در سی شارپ
راه‌های گوناکونی برای ایجاد یک کنترل سفارشی در سی شارپ وجود دارد که می‌توانیم برای هر کاربرد خاص از یک کلاس پایه خاص مشتق کنیم . به عنوان مثال اگر مایلید کنترلی طراحی کنید که همانند سایر کنترل‌های دات نت روی محیط فرم شما قرار گیرند مانند یک تکست باکس یا یک کمبو باکس و...، می توانید از کلاس پایه UserControl، کلاس کنترل مورد نظرتان را مشتق کنید. ممکن است مایل باشید کنترلی همانند کنترل تایمر طراحی کنید که روی محیط فرم قرار نگیرد، فقط به پروژه شما اضافه شود و برای استفاده از آن در داخل کد برنامه کار مورد نظرتان را انجام دهید، برای این منظور باید کلاس کنترل مورد نظرتان را از کلاس پایه Component مشتق کنید. هر یک از دو روش فوق ریزه‌کاری ها و ویژگی‌های بسیار زیادی دارند که هر کدام کاربردهای خاص خودشان را دارند.
در ادامه یکی از آنها را با هم بررسی می نماییم؛ به عنوان مثال هنگامی‌که قصد داشته باشید کامپوننتی ایجاد نمایید که دارای ویژگی‌های خاصی باشد و کنترل‌های موجود در دات نت فریم‌ورک پاسخگوی نیاز شما نبودند می‌توانید به طریقی که در ادامه بیان می‌شود یک کنترل سفارشی شده که در سی‌شارپ با نام User Control شناخته می شود ایجاد کرده و ویژگی‌های خاصی را که نیاز دارید به آن اعمال کنید.

http://imgdl.ir/images/469434.jpg
بعد از اینکه کنترل مورد نظر ایجاد شد فایل نهایی در یک فایل که اسمبلی نامیده می شود در قالب یک فایل dll در اختیار شما قرار می‌گیرد. می‌توانید از آن در برنامه های مختلف خود استفاده کرده و ویژگی‌های و مقادیری را برای آن تنظیم نمایید. برای ایجاد یک کنترل سفارشی به صورت زیر عمل کنید:
از منوی File گزینه New Projectا انتخاب و از قسمت چپ پنجره ظاهر شده گزینه Visual C# را انتخاب نمایید، سپس در پنل سمت راست گزینه Windows Forms Control Library را انتخاب نمایید و در قسمت Name یک نام برای کنترل خود وارد نمایید. پروژه مورد نظر شما ایجاد می‌شود که می‌توانید در آن به طراحی کنترل مورد نظر خود بپردازید. وقتی پروژه شما ایجاد شد در Solution Explorer فایل مربوط به کنترل شما با نام UserControl1 نمایش داده می‌شود که می‌توانید آن را به نام دلخواه خود تغییر دهید. اگر بر روی آن دابل کلیک نمایید قسمت طراحی آن در پنل سمت چپ نمایش داده می‌شود. اگر روی محیط کنترل در پنل طراحی کلیک راست و view code را کلیک نمایید به قسمت Code Editor مربوط به کنترل وارد می‌شوید. مشاهده می‌کنید که کنترل مورد نظر شما به صورت پیش فرض از کلاس UserControl به ارث رفته است. مراحلی که در بالا ذکر شد را به صورت تصویری در ادامه مشاهده می نمایید:
در شکل فوق قسمت طراحی کنترل مورد نظر خودتان را مشاهده می نمایید. که می‌توانید از ToolBox سمت راست هر کنترلی که می خواهید نحوه عملکرد آن را برای خودتان سفارشی نمایید (Custom)، را روی آن قرار دهید . سپس با کلیک راست بر روی فرم و انخاب گزینه View Code به قسمت کد نویسی کنترل و عناصری که روی آن قرار می‌دهید، هدایت می‌شوید. خوب در ادامه سعی می‌کنیم با یک مثال کاربردی بیشتر با مفاهیم فوق آشنا شویم. همگی شما با کلاس TextBox آشنایی دارید که برای دریافت یک متن از کاربر به کار می‌رود . می‌دانیم که در یک شی از این کلاس هر کاراکتری را کاربر می‌تواند وارد نماید. در بعضی شرایط نیاز پیدا می‌کنید که تکست باکس داشته باشید که فقط کاربر بتواند در آن عدد وارد نماید و تکست باکس مورد نظر هیچ حرفی را قبول نکند و یا تکست باکسی داشته باشید که کاربر بتواند فقط در آن حرف وارد نماید و هیچ کاراکتر عددی را قبول نکند و یا تکست باکسی داشته باشید که به محض اینکه فوکوس گرفت و یا قصد وارد کردن مقدار در آن را داشتیم؛ کنترل ما تراز متنش از راست به چپ باشد و متنی که در تکست باکس وارد می‌کنیم به صورت فارسی باشد.
http://imgdl.ir/images/45843422.jpg
در ادامه به عنوان یک مثال، نحوه ایجاد یک کنترل تکست باکس که متن را به صورت فارسی دریافت می‌نماید بررسی می‌کنیم .یک پروژه از نوع Windows Forms Control Library به صورتی که در بالا بیان شد ایجاد نمایید .در Solution Explorer نام user control1 را به ّFarsiTextBox تغییر دهید .و روی آن دابل کلیک کنید تا در پنل سمت چپ فرم طراحی آن نمایش داده شود. یک تکست باکس ازToolBox به کنترل اضافه نمایید و به قسمت کد برنامه بروید و در آنجا کد زیر را وارد نمایید :




private void textBox1_Enter(object sender, EventArgs e)
{
foreach (InputLanguage il in InputLanguage.InstalledInputLanguages)
{
if(il.LayoutName == "Farsi")
InputLanguage.CurrentInputLanguage = il;
}
}



من کد کامل برای طراحی مثال بالا رو قرار می دهم تا با نحوه کار کاملا آشنا شوید .کد زیردر فایل FarsiTextBox.cs قرار دارد .


using System.Windows.Forms;
namespace numeric
{
public partial class FarsiTextBox : UserControl
{
public new string Text
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}

public FarsiTextBox()
{
InitializeComponent();
}

private void textBox1_Enter(object sender, EventArgs e)
{
foreach (InputLanguage il InputLanguage.InstalledInputLanguages)
{
if( il.LayoutName == "Farsi")
InputLanguage.CurrentInputLanguage = il;
}
}
}


بعد از وارد کردن کدهای فوق با زدن کلیدF6 پروژه شما Build شده و کنترل مورد نظرتان ساخته می‌شود و اگر یک پروژه از نوع Windows Form Application به Solution فعلی اضافه نمایید، کنترلی که در مرحله قبل ساختید در ToolBox نمایش داده می‌شود که می‌توانید آن را به فرم برنامه خود اضافه کرده و از آن استفاده کنید. همچنین کنترلی که ایجاد کردید در مرحله قبل در قالب یک فایل dll در فولدر خروجی برنامه شما قرار گرفته است که می‌توانید آن فایل را در هر برنامه ای استفاده نمایید .

Mohandes2009
یک شنبه 11 مهر 1389, 12:52 عصر
باز گرداندن داده رمز نگاری شده

کد برگرداندن داده رمز نگاری شده با الگوریتم قابل بازگشت رو براتون بگذارم اگه مشکلی در رابطه با کد داشتین می تونید در نظرات مطرح کنید

** قبل از استفاده فضای نام System.Security.Cryptography را اضافه کنید **
روش رومز نگاری با استفاده از همین الگوریتم رو در پستهای قدیمی تر گذاشتم.



public static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV)
{
MemoryStream ms = new MemoryStream();
Rijndael alg = Rijndael.Create();
alg.Key = Key;
alg.IV = IV;
CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(cipherData, 0, cipherData.Length);
cs.Close();
byte[] decryptedData = ms.ToArray();
return decryptedData;
}

Hamid Reza Rahimi
سه شنبه 30 آذر 1389, 19:42 عصر
سلام مطالب خيلي عاليه پس چرا ادامه نميدين

kh1363
جمعه 18 فروردین 1391, 14:18 عصر
ممنونم خیلی بدردم خورد:تشویق:

moslem68
چهارشنبه 04 مرداد 1391, 19:44 عصر
بسیار عالی بود

alvandlinux
پنج شنبه 26 مرداد 1391, 21:25 عصر
سلام Mohandes2009 (http://barnamenevis.org/member.php?119784-Mohandes2009) عزیز
میشه این دو خط رو بیشتر توضیح بدی؟
Control[] cont = new Control[] { lbl };Controls.AddRange(cont);

siavash525
یک شنبه 27 اسفند 1391, 08:51 صبح
دوستمنادامه بدید لطفن . دوستان دیگههم اگه می خوان همکاری پروژه ای داشته باشیم MseT151 یاهو هستم

kasranobahar
پنج شنبه 25 تیر 1394, 20:08 عصر
مطالب بسیار عالی