PDA

View Full Version : ترفندهای برنامه نویسی در #C



arash1718
پنج شنبه 11 بهمن 1386, 18:19 عصر
هر کسی که مدتی برنامه نویسی کرده باشه حتماً ترفند هایی رو برای خودش پیدا کرده تا بتونه کدهای جمع و جورتر و خلاصه تری با کارایی بالاتر را تولید کنه و یا با استفاده از امکانات محیط برنامه نویسی به منظور سهولت کد نویسی و یا تولید کد های خودکار به کار خودش سرعت و دقت بیشتری بده.

ممنون میشم تجربیات خودتون رو ارائه کنید.

arash1718
پنج شنبه 11 بهمن 1386, 18:25 عصر
برای مثال همون طور که خودتون بهتر می دونید به جای


WindowsApplication1.Form1 form = new Form1();
form.Show();
میشه نوشت


new Form1().Show();

arash1718
پنج شنبه 11 بهمن 1386, 18:43 عصر
اگر چند TextBox داشته باشیم در فرم میتوان جای


textBox1.Text = "text";
textBox2.Text = "text";
textBox3.Text = "text";
textBox4.Text = "text";
textBox5.Text = "text";

نوشت


foreach (TextBox x in this.Controls)
x.Text = "text";


یا حتی جای


textBox1.Text = "1";
textBox2.Text = "2";
textBox3.Text = "3";
textBox4.Text = "4";
textBox5.Text = "5”;

داریم


foreach (TextBox x in this.Controls)
x.Text = x.Name[x.Name.Length-1].ToString();

arash1718
پنج شنبه 11 بهمن 1386, 22:46 عصر
حتما تا حالا با توابع Event ها که شبیه هم هستند و الکی صفحه رو شلوغ می کنن بر خورد کردین ، میشه بعضیاشونو اینجوری خلاصه کرد:
فرض کنیم توابعی برای هندل کردن رویدادهایی داریم که تقریبا مشابه اند مثل زیر


private void button1_Click(object sender, EventArgs e)
{
Form1 form = new Form1();
form.Show();
}

private void button2_Click(object sender, EventArgs e)
{
Form1 form = new Form1();
form.Show();
}


جای این دو می توان تابعی برای یکی ایجاد کرد و تابع رویداد دیگری را به آن لینک داد و به این شکل نوشت


private void button1_Click(object sender, EventArgs e)
{
switch (((Button)sender).Name)
{
case "button1":
new Form1().Show();
break;
case "button2":
new Form2().Show();
break;
}
}



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

hamid2006zaman
جمعه 12 بهمن 1386, 11:00 صبح
واقعا عالیه.کاش همینطور ادامه بدید.

e-shahshahani
جمعه 12 بهمن 1386, 13:50 عصر
بعضی وقت ها این ترفند ها سلیقه ای است، یا مثلا خوانایی برنامه را کم می کند یا سرعت را کم یا زیاد می کند.
کلا مواظب ترفند هاتون باشید. البته این چند تایی که تا اینجا گفتید خوبه! دستتون درد نکنه.

manitack
جمعه 12 بهمن 1386, 15:07 عصر
Boole To Int

bool i = true;
int j = i ? 1 : 0;

razavi_university
جمعه 12 بهمن 1386, 20:30 عصر
ممکنه توی فرمتون تعداد زیادی TextBox باشه و بخوایید هر بار که اون فوکوس میشه متن داخلش انتخاب بشه تا اگه کاربر بخواد اون رو عوض کنه نیازی به Del و BackSpace نداشته باشه
میشه برای هر TextBox یه Event نوشت و اون کار رو انجام بدید
حالا اگه تعداد textBox ها زیاد باشه برای هر کنترل یک Event:اشتباه:
میشه برای همه اونهایک Event نوشت تا اینکار رو برای همه اونها انجام بده :
اول باید همه TextBox هایی رو که می خوایید انتخاب کنین بعد یه Event براشون بزارین تا همشون از یه Event استفاده کنند بعد این کد رو داخل اون Event می گذارید


private void textBox1_Enter(object sender, EventArgs e)
{
TextBox txtbx = (TextBox)sender;
txtbx.text.selectall();
}

arash1718
جمعه 12 بهمن 1386, 21:32 عصر
به جای تابع زیر


string CheckIfEqual(int i, int j)
{
if (i == j)
{
return "Equal";
}
else
{
return "Not Equal";
}
}


میتوان نوشت


string CheckIfEqual2(int i, int j)
{
return (i == j) ? "Equal" : "Not Equal";

}

arash1718
جمعه 12 بهمن 1386, 22:41 عصر
به جای


if ((boolean1 && !boolean2) || (!boolean1 && boolean2))
{
// Do Something
}
داریم


if (boolean1 ^ boolean2)
{
// Do Something
}

Mahdi.Kiani
جمعه 12 بهمن 1386, 23:40 عصر
TextBox txtbx = (TextBox)sender;



معادل با



TextBox txtbx = sender as TextBox;


که اتفاقا من دیدم بیشتر از این دومی استفاده می شه. شاید به خاطر این که بعضیا از casting خیلی خوششون نمیاد. به خاطر خاطره بدی که از boxing و unboxing دارن :چشمک:

mamali_programer
شنبه 13 بهمن 1386, 11:21 صبح
ممنون از راهنمایی تون

Behrouz_Rad
شنبه 13 بهمن 1386, 12:45 عصر
که اتفاقا من دیدم بیشتر از این دومی استفاده می شه. شاید به خاطر این که بعضیا از casting خیلی خوششون نمیاد. به خاطر خاطره بدی که از boxing و unboxing دارن

کار درستی می کنند!
دستوراتی که در یک زبان برنامه نویسی وجود داره بر اساس عشق و حال برنامه نویس عمل نمی کنند و قاعده، قانون و کاربرد خاص خودشون رو دارند.
در #C دو نوع Casting وجود داره و در VB.NET سه نوع.
شکل ساده ی Casting در #C که به شکل type) object) نوشته میشه، در صورتی که موفق نشه object رو به type تبدیل کنه و سعی در استفاده از شیء برگشت داده شده داشته باشید باعث بروز خطا میشه.
به همین دلیل پیشنهاد میشه که همیشه از کلمه ی کلیدی as استفاده بشه تا با بررسی شی برگشت داده شده با مقدار null، صحت یا عدم صحت Casting بررسی بشه.

موفق باشید.

پ.ن: در VB.NET از تابع TryCast بدین منظور استفاده میشه.

Mahdi.Kiani
شنبه 13 بهمن 1386, 12:48 عصر
کار درستی می کنند!


من هم نگفتم اشتباه می کنند. و به همین دلیل هم بود که اون کد را نوشتم. جناب راد

Behrouz_Rad
شنبه 13 بهمن 1386, 12:54 عصر
وقتی کدی رو بهتر تشخیص میدی، بهتره دلیل تشخیصتم بگی.
در اون پست دلیل فنی ذکر نکردی و فقط گفتی "خوششون نمیاد"!!!

موفق باشی.

Mahdi.Kiani
شنبه 13 بهمن 1386, 13:23 عصر
وقتی کدی رو بهتر تشخیص میدی، بهتره دلیل تشخیصتم بگی.
در اون پست دلیل فنی ذکر نکردی و فقط گفتی "خوششون نمیاد"!!!

موفق باشی.

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

iranigirl1364
شنبه 13 بهمن 1386, 17:50 عصر
با سلام:
واقعا از این مطالب لذت بردم!
لطفا مطالب بیشتری از این قبیل قرار بدهید!
با تشکر و احترام فراوان

arash1718
شنبه 13 بهمن 1386, 21:08 عصر
{ خواهش می کنم از بحثای فرعی جلوگیری کنید تا تایپیک شلوغ نشه }

اگه بخواهیید قسمتی از کدتون رو برای مدتی از کد اصلی خارج کنید چه کار می کنید؟
از // استفاده میکنید؟ یا از /* */ ؟ اگه تعداد خطوط مورد نظر زیاد باشن چی کار می کنید؟ برای هر خط // می گذارید؟
خوب اجازه بدید این جور کارای پیش پا افتاده رو .NET براتون انجام بده:

کافیه خطوط مورد نظر را انتخاب کنید و بعد Ctrl رو نگه دارید و E و C رو همزمان بفشارید!
برای برگشتش هم Ctrl + (E,U)

اگر کار با کیبرد براتون سخته این کارایی که می گم رو انجام بدید:
View > ToolBars > Text Editor
که باعث میشه یه ToolBarبه بالای صفحه اضافه بشه که این امکانی که گفتم از اینجایی که در فایل زمیمه مشخص کردم قابل دسترسی می باشد.

http://barnamenevis.org/forum/attachment.php?attachmentid=14289&d=1201975799
در مورد بقیه امکانات این قسمت هم اگه یه مقدار باهش کار کنید متوجه می شید خودتون ولی اگه خواستید توضیح می دم بازم.

PC2st
شنبه 13 بهمن 1386, 22:01 عصر
برای نامگذاری متغیرها (object ها) بهتر است نام انتخابی بهمراه نوع داده نوشته شود، مثلا:


DateTime rapidDateTime;
TextBox userNameTextBox;
Label userNameLabel;
ComboBox userNameComboBox;

همچنین اگر دقت کنید وقتی که از wizard برای افزودن گزینه های Menu روی فرم استفاده میکنید، VS به همین طریق گزینه های Menu را نامگذاری میکند مثلا با نام fileToolStripMenu و بهرحال باعث خوانایی کدها می گردد.

razavi_university
شنبه 13 بهمن 1386, 23:36 عصر
برای نامگذاری متغیرها (object ها) بهتر است نام انتخابی بهمراه نوع داده نوشته شود، مثلا:


DateTime rapidDateTime;
TextBox userNameTextBox;
Label userNameLabel;
ComboBox userNameComboBox;
همچنین اگر دقت کنید وقتی که از wizard برای افزودن گزینه های Menu روی فرم استفاده میکنید، VS به همین طریق گزینه های Menu را نامگذاری میکند مثلا با نام fileToolStripMenu و بهرحال باعث خوانایی کدها می گردد.

به نظر من بهتره اول نوعش بیاد بعد اسمش یعنی


TextBox TextBoxuserName;

یه جورایی کاراتره
مثلا وقتی تویه ContexMenu دنبال یه نوع متغیر می گردیم مثلا TextBox می گردیم همه اونها پشت سرهم دیده میشند و پیدا کردنشون راحتره
و میشه به جای اسم کامل متغیر از یه مخفف استفاده کرد مثلا TxtBx
البته این نظر شخصیه
مواردی از این چند برمی گرده به روش نامگذاری مجارستانی که نمونه‌ای از اون رو آقای هاشمیان توی کتابشون آوردن

razavi_university
شنبه 13 بهمن 1386, 23:50 عصر
ممکنه در زمانی که کد می نویسید تورفتگی های پیشفرضی که محیط ادیتور ایجاد می کنه بهم بریزه و مک یا زیاد بشه
حالا اگه بخواییم با Space و Del درستشون کنیم که:عصبانی++:
میشه اینکارو به ادیتور سپرد
1- اول کل کد را انتخاب می کنیم Ctrl+A
2- بعد Ctrl+K
3- در آخر Ctrl+F

arash1718
دوشنبه 15 بهمن 1386, 19:52 عصر
اگه دوست دارید یه نفر for , foreach , try , while , … را براتون بنویسه تا شما داخلش بتونید کد بزنید و یا کد انتخابی شمارو داخل آن بذاره باشید .NET بهترین انتخاب خواهد بود!
کد مورد نظر خود را انتخاب کنید و Sururond With … رو بزنید! حالا دیگه انتخاب با شماست!

sepide1
چهارشنبه 17 بهمن 1386, 22:31 عصر
اینم کد برای اینکه textbox های روی فرم از حالت readonly خارج شوند بیشتر بدرد edit می خوره

privatevoid button1_Click(object sender, EventArgs e)
{
foreach (Control co in Controls)
{
if (co.GetType().ToString() == "System.Windows.Forms.TextBox")
((TextBox)co).ReadOnly = false;

}
}

البته برای اینکه enable یا visible کنید هم میتونید استفاده کنید

l_bahid_l
چهارشنبه 17 بهمن 1386, 22:48 عصر
حتما تا حالا با توابع Event ها که شبیه هم هستند و الکی صفحه رو شلوغ می کنن بر خورد کردین ، میشه بعضیاشونو اینجوری خلاصه کرد:
فرض کنیم توابعی برای هندل کردن رویدادهایی داریم که تقریبا مشابه اند مثل زیر


private void button1_Click(object sender, EventArgs e)




{

Form1 form = new Form1();

form.Show();
}





private void button2_Click(object sender, EventArgs e)

{
Form1 form = new Form1();
form.Show();
}








جای این دو می توان تابعی برای یکی ایجاد کرد و تابع رویداد دیگری را به آن لینک داد و به این شکل نوشت







private void button1_Click(object sender, EventArgs e)











{





switch (((Button)sender).Name)





{





case "button1":





new Form1().Show();





break;





case "button2":





new Form2().Show();





break;





}





}









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




اولا خیلی خوشحالم که چنین چیزی هست
دوما او ن دوستای که از این مطلب تشکر کردید میشه به منم بگید چطوری از این کد استفاده کردید آخه من همین کد را میزنم ولی فقط برای یکی از فرم هام صادقه

newgoldenman
پنج شنبه 18 بهمن 1386, 07:47 صبح
ممکنه در زمانی که کد می نویسید تورفتگی های پیشفرضی که محیط ادیتور ایجاد می کنه بهم بریزه و مک یا زیاد بشه
حالا اگه بخواییم با Space و Del درستشون کنیم که:عصبانی++:
میشه اینکارو به ادیتور سپرد
1- اول کل کد را انتخاب می کنیم Ctrl+A
2- بعد Ctrl+K
3- در آخر Ctrl+F



ممنون دوست عزیز. میشه بگین این کار رو اگه بخوایم از منو ها یا از دکمه ها استفاده کنیم، چیجوریه؟!

arash1718
پنج شنبه 18 بهمن 1386, 13:58 عصر
ممکنه در زمانی که کد می نویسید تورفتگی های پیشفرضی که محیط ادیتور ایجاد می کنه بهم بریزه و مک یا زیاد بشه
حالا اگه بخواییم با Space و Del درستشون کنیم که:عصبانی++:
میشه اینکارو به ادیتور سپرد
1- اول کل کد را انتخاب می کنیم Ctrl+A
2- بعد Ctrl+K
3- در آخر Ctrl+F


با تشکر از شما اما راه راحت تری هم هست : Ctrl+E,D
که با این روش کل document مرتب میشه و نیازی به Ctrl + A یا انتخاب همه نیست!
از Edit هم قابل دسترسی است :

Edit > Advanced > Format Document

arash1718
پنج شنبه 18 بهمن 1386, 14:23 عصر
تمام Shortcut Key ها برای تایپ و ادیت متن کد.
منبع : MSDN

Mahdi.Kiani
پنج شنبه 18 بهمن 1386, 14:32 عصر
></p><table width="100%" border="1" cellpadding="1" cellspacing="1" bordercolor="#CC0000" bgcolor="#FFFFCC">
<tr>
<th>
Command Name </th>
<th>
Shortcut Keys </th>
<th>
Description </th>
</tr><tr>
<td>
<p class="style2">Edit.BreakLine</p> </td>
<td>
<p class="style2">ENTER </p>
<p class="style2">—or—</p>
<p class="style2">SHIFT + ENTER</p> </td>
<td>
<p class="style2">Inserts a new line.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.CharTranspose</p> </td>
<td>
<p class="style2">CTRL + T</p> </td>
<td>
<p class="style2">Swaps the characters on either side of the insertion point. For example, AC|BD becomes AB|CD. Available only in text editors.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ClearBookmarks</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + L</p> </td>
<td>
<p class="style2">Removes all unnamed bookmarks in the current document.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.CollapseToDefinitions</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + O</p> </td>
<td>
<p class="style2">Automatically determines logical boundaries for creating regions in code, such as procedures, and then hides them.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.CommentSelection</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + C</p> </td>
<td>
<p class="style2">Marks the current line of code as a comment, using the correct comment syntax for the programming language.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.CompleteWord</p> </td>
<td>
<p class="style2">ALT + RIGHT ARROW</p>
<p class="style2">—or—</p>
<p class="style2">CTRL + SPACEBAR</p> </td>
<td>
<p class="style2">Displays Word Completion based on the current language.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.DeleteBackwards</p> </td>
<td>
<p class="style2">BACKSPACE </p>
<p class="style2">—or—</p>
<p class="style2">SHIFT + BACKSPACE</p> </td>
<td>
<p class="style2">Deletes one character to the left of the cursor.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.DeleteHorizontalWhitespace</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + \</p> </td>
<td>
<p class="style2">Collapses white space in the selection, or deletes white space adjacent to the cursor if there is no selection.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.FormatDocument</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + D</p> </td>
<td>
<p class="style2">Applies the indenting and space formatting for the language as specified on the Formatting pane of the language in the Text Editor section of the Options dialog box.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.FormatSelection</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + F</p> </td>
<td>
<p class="style2">Correctly indents the selected lines of code based on the surrounding lines of code.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.HideSelection</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + H</p> </td>
<td>
<p class="style2">Hides the selected text. A signal icon marks the location of the hidden text in the file.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.InsertTab</p> </td>
<td>
<p class="style2">TAB</p> </td>
<td>
<p class="style2">Indents the line of text a specified number of spaces.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.LineCut</p> </td>
<td>
<p class="style2">CTRL + L</p> </td>
<td>
<p class="style2">Cuts all selected lines, or the current line if nothing has been selected, to the Clipboard.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.LineDelete</p> </td>
<td>
<p class="style2">CTRL + SHIFT + L</p> </td>
<td>
<p class="style2">Deletes all selected lines, or the current line if no selection has been made.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.LineOpenAbove</p> </td>
<td>
<p class="style2">CTRL + ENTER</p> </td>
<td>
<p class="style2">Inserts a blank line above the insertion point.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.LineOpenBelow</p> </td>
<td>
<p class="style2">CTRL + SHIFT + ENTER</p> </td>
<td>
<p class="style2">Inserts a blank line below the insertion point.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.LineTranspose</p> </td>
<td>
<p class="style2">SHIFT + ALT + T</p> </td>
<td>
<p class="style2">Moves the line containing the insertion point below the next line.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ListMembers</p> </td>
<td>
<p class="style2">CTRL + J</p> </td>
<td>
<p class="style2">Lists members of the current class for statement completion when editing code.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.MakeLowercase</p> </td>
<td>
<p class="style2">CTRL + U</p> </td>
<td>
<p class="style2">Changes the selected text to lowercase characters.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.MakeUppercase</p> </td>
<td>
<p class="style2">CTRL + SHIFT + U</p> </td>
<td>
<p class="style2">Changes the selected text to uppercase characters.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.OverTypeMode</p> </td>
<td>
<p class="style2">INSERT</p> </td>
<td>
<p class="style2">Toggles between insert and overtype insertion modes. Available only when working in text editors.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ParameterInfo</p> </td>
<td>
<p class="style2">CTRL + SHIFT + SPACEBAR</p> </td>
<td>
<p class="style2">Displays a tool tip that contains information for the current parameter, based on the current language. Available only in Source view of the HTML Designer.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.StopHidingCurrent</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + U</p> </td>
<td>
<p class="style2">Removes the outlining information for the currently selected region.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.StopOutlining</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + P</p> </td>
<td>
<p class="style2">Removes all outlining information from the entire document.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.SwapAnchor</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + A</p> </td>
<td>
<p class="style2">Swaps the anchor and end points of the current selection.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.TabLeft</p> </td>
<td>
<p class="style2">SHIFT + TAB</p> </td>
<td>
<p class="style2">Moves selected lines to the left one tab stop.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ToggleAllOutlining</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + L</p> </td>
<td>
<p class="style2">Toggles all previously marked hidden text sections between hidden and display states.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ToggleBookmark</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + K</p> </td>
<td>
<p class="style2">Sets or removes a bookmark at the current line.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ToggleOutliningExpansion</p> </td>
<td>
<p class="style2">CTRL + M, CTRL + M</p> </td>
<td>
<p class="style2">Toggles the currently selected hidden text section between the hidden and display state.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ToggleTaskListShortcut</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + H</p> </td>
<td>
<p class="style2">Sets or removes a shortcut at the current line.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ToggleWordWrap</p> </td>
<td>
<p class="style2">CTRL +E, CTRL + W</p> </td>
<td>
<p class="style2">Enables or disables word wrap in an editor.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.UncommentSelection</p> </td>
<td>
<p class="style2">CTRL + K, CTRL + U</p> </td>
<td>
<p class="style2">Removes the comment syntax from the current line of code.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.ViewWhiteSpace</p> </td>
<td>
<p class="style2">CTRL + R, CTRL + W</p> </td>
<td>
<p class="style2">Shows or hides spaces and tab marks.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.WordDeleteToEnd</p> </td>
<td>
<p class="style2">CTRL + DELETE</p> </td>
<td>
<p class="style2">Deletes the word to the right of the insertion point.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.WordDeleteToStart</p> </td>
<td>
<p class="style2">CTRL + BACKSPACE</p> </td>
<td>
<p class="style2">Deletes the word to the left of the insertion point.</p> </td>
</tr><tr>
<td>
<p class="style2">Edit.WordTranspose</p> </td>
<td>
<p class="style2">CTRL + SHIFT + T</p> </td>
<td>
<p class="style2">Transposes the words on either side of the insertion point. For example, |End Sub would be changed to read Sub End|.</p> </td>
</tr></table><p><

بدون شرح !!!!:متفکر:

arash1718
پنج شنبه 18 بهمن 1386, 15:08 عصر
تمام Shortcut Key ها برای تایپ سریع تر با کیبرد کد.
منبع : MSDN

arash1718
پنج شنبه 18 بهمن 1386, 15:10 عصر
تمام Shortcut Key ها برای Debugging کد.
منبع : MSDN

arash1718
پنج شنبه 18 بهمن 1386, 15:15 عصر
تمام Shortcut Key ها برای Search And Replace کد.
منبع : MSDN

mahtab_18
جمعه 19 بهمن 1386, 00:06 صبح
ترفندی برای فارسی کردن صفحه کلید




using System.Globalization;
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(CultureInfo.CreateSpecif icCulture("fa-IR"));

mohammad272005
جمعه 19 بهمن 1386, 05:34 صبح
نمی دونم با C# 3.0 چقدر آشنایی دارید. ولی شاید این کد بابی بشه برای ورود افراد تازه‏وارد (مثل خودم) به این زبان قشنگ:

class Program
{
staticvoid Main(string[] args)
{
Enumerable.Range(100, 10).Perform(Console.WriteLine);
}
}
static class Extensions
{
internal static void Perform<TSource>(this IEnumerable<TSource> source, Action<TSource> actor)
{
foreach (var item in source)
{
actor(item);
}
}
}

یه کلاس تو NET. هست به نام Enumerable که تعداد زیادی Extention Method (نگران نباشید) واسه استفاده از IEnumerable و <IEnumerable<T توش تعریف شده (یه جورایی اساس LINQ هم هست.) ولی من فعلا از این کلاس برای تولید 10تا عدد از 100 استفاده کردم.
Enumerable.Range(100, 10)خب تا همینجا صبر کنید. بریم سراغ کلاس Extensions که اصل کاریه:
توی C# 3.0 یه مفهوم جدید بنام Extension Method به وجود اومده که به نظر من فوق‏العاده‏ست. بیاین یه کم روش focus کنیم (واسه همین گفتم نگران نباشید.) قبلا ما اگه می‏خواستیم واسه یه کلاس خاص که از قبل وجود داشت (مثل Int32) یه متد بنویسیم (مثل Int32ToHex) باید یه کلاس مثل utility می نوشیم و الخ. خب این خییییلی هم خوب نبود چون وقتی تعداد این کلاسای utility زیاد می شد، دیگه بخاطر آوردن اینکه کدوم متد تو کدوم کلاس بود زیادم آسون نبود. البته هنوزم می تونیم اینکارو بکنیم. ولی حالا یه راه آسونتر هم هست به نام Extension Method که با کمک اون میشه متدتونو یه جورایی تزریق کنید تو دل کلاس مورد نظر:
int a = 10;
string b = a.ToHex(); وای خدای من!!!!
...

mohammad272005
جمعه 19 بهمن 1386, 06:01 صبح
کجا بودیم؟ آهان بله تزریق متد توی کلاسی که میتونه مال ما نباشه. اینکار تحت این شرایط امکانپذیره:
1- کلاسی که حاوی Extension Method هست باید static باشه.

static class AClassName...
2- (خب به طبع مورد 1) متد تزریقی هم باید static باشه

public static void AMethod(...
3- نوع (type) اولین پارامتر متد، باید همون کلاس «هدف» باشه

public static void AMethod(...Int32 num
4- برای اینکه به CLR بگیم این یه Extension Method هست باید قبل از پارامتر اول از کلمه کلیدی this استفاده کنیم:

public static void AMethod(this Int32 num
آقا تمومه. حالا کدتونو کاملا عادی بنویسین و توی یه کلاس دیگه از کلاس هدف instance بگیرید. حالا میتونید متدتونو تو لیست memberهاش ببینینو حالشو ببرین.
(خدایش به شرط چاقو گفتم تنها شرطش اینه که VS 2008 داشته باشین)
....

mohammad272005
جمعه 19 بهمن 1386, 06:11 صبح
حالا برگردیم به برنامه خودمون. گفتیم که
بریم سراغ کلاس Extensions که اصل کاریه
حتما متدهای Generic رو میشناسید. من یه متد generic نوشتم که یه IEnumerable می گیره و تک تک اعضاش رو پاس میده به delegateی که actior نام داره. حالا این delegate می تونه هر چیزی که همsignature با <Action<TSource باشه، باشه مثل مثال ما که آدرس Console.WriteLine توش ذخیره شده. با یه حساب سرانگشتی معلوم میشه که تک تک اعضای source که همون اعداد ما باشن به actor که همون Console.WriteLine باشه پاس داده میشه. بقیش هم که تابلوه.
مشکلی باشه در خدمتم.

arash1718
جمعه 26 بهمن 1386, 00:11 صبح
عبارات منظم ( قسمت اول )
اگر بخواهید رشته ای که کاربر وارد کرده را بسنجید که آیا با معیارهای شما همحوانی دارد یا خیر چه کار می کنید؟ مثلا فرض کنید میخواهید بسنجید که این رشته شماره تلفن هست یا خیر؟ با آدرس Email هست یا اشتباهی درش وجود داره؟
کسانی که با Regular Expression آشنایی ندارند احتمالاً با توجه به پیش فرضی که از زبان های سطح پایین تر مثل C یا Pascal دارند سعی میکنند که رشته را به صورت آرایه ای از کارکترها فرض کنند و هر کارکتر را با شرایطی بسنجند !
حال فرض کنید حالتی رو که Email Address ورودی آنها باشد ...
- Email Address نباید با عدد شروع شود.
- در Email Address شما نباید دو تا . پشت سر هم بیاید ( به همین شکل برای + و - و ‘ )
- و شرایط دیگری برای @ یا . و ...
خوب اگه در زبانی سطح بالایی مجور باشید برای هر کاکتر این شروط را یکی یکی بنویسید اسم اون زبان رو دیگه زبان سطح بالا نمیشه گذاشت !
همه ی اون شروط Email Address را در یک خط می توان خلاصه کرد که یه جواب True یا False به ما بدهد :


System.Text.RegularExpressions.Regex.Match( inputString , “\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*”).Success;
در باره کار با Reg Ex بیشتر صحبت خواهیم کرد !

arash1718
جمعه 26 بهمن 1386, 15:35 عصر
عبارات منظم ( قسمت دوم )
سعی می کنم با چند مثال توضیح بدم :
فرض کنید رشته ای داریم که میخواهیم بدانیم در آن کلمه "arash" به کار رفته یا خیر و اگر به کار رفته بود پیغام دهد! این کار به را حتی با دستور زیر قابل اجراست :


using System.Text.RegularExpressions;
if (Regex.Match(TextBox1.Text, "arash").Success)
{
MessageBox.Show("arash was found");
}

حال نمونه کد برای یافتن تعداد تطبیق های رشته مورد نظر :


MessageBox.Show(Regex.Matches(TextBox1.Text, "arash").Count.ToString());

یا اگر بخواهیم قیمت هایی که در رشته وجود داشته را بیابیم :


Regex.Matches(richTextBox1.Text, @"\d+$");


که آرایه ای از Match ها بر میگرداند که مقدار آنها برای مثال 235$ با 250000$ می باشد و در آن :
\d نماینده یک عدد دلخواه و + بعد آن نشان میدهد که این عدد یکبار یا بیشتر میتواند تکرار شود.
چند نماد دیگر :
- w\ یک کارکتر کلمه ای
- s\ یک فاصله حالی
- D\ هر کارکتر غیر رقمی
- W\ هر کارکتر غیر کلمه ای
- S\ هر کارکتر غیر فاصله ای
- + یک یا بیستر بار تکرار
- * صفر یا بیستر بار تکرار
- ؟ یک یا صفر بار تکرار
- ...
توضیحات بیشتر در اینجا:

http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx

arash1718
جمعه 26 بهمن 1386, 20:27 عصر
عبارات منظم ( قسمت سوم )


چند Regular Expression معروف :
ایمیل :


\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
آدرس وب (URL) :


http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

Zip code :


\d{5}(-\d{4})?

US Phone Num :


((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}

P.R.C Postal Code :


\d{6}

Mahdi.Kiani
جمعه 26 بهمن 1386, 21:50 عصر
با تشکر از آرش خان
در ادامه بحث عبارات منظم چند تا لینک معرفی میکنم که مفید هستند
http://www.regular-expressions.info/dotnet.html

http://msdn2.microsoft.com/en-us/library/ms228595.aspx

http://msdn2.microsoft.com/en-us/library/yab2dx62.aspx

http://msdn2.microsoft.com/en-us/library/az24scfc(VS.71).aspx

http://msdn2.microsoft.com/en-us/library/1400241x.aspx

توجه :
یک کتاب مرجع سریع برای عبارات منظم هم دارم که هم حجمش فوق العاده کمه و هم چندین زبان از جمله سی شارپ، پایتون، پرل ، جاوا و ... را نیز شامل میشه .. این کتاب برای دوستانی که می خوان با عبارات منظم خیلی سریع اشنا بشن و از اونا در برنامه هاشون استفاده کنند خیلی مناسبه.. چون یک مرجع خیلی سریع هست..
برای دریافت کتاب که حجمی در حدود 200 کیلو بایت داره !!!از طریق ایمیل من اقدام کنید..چون می دونید که نمیشه اینجا اپ کرد
موفق باشید

arash1718
جمعه 26 بهمن 1386, 22:25 عصر
با تشکر از آرش خان
در ادامه بحث عبارات منظم چند تا لینک معرفی میکنم که مفید هستند
http://www.regular-expressions.info/dotnet.html

http://msdn2.microsoft.com/en-us/library/ms228595.aspx

http://msdn2.microsoft.com/en-us/library/yab2dx62.aspx

http://msdn2.microsoft.com/en-us/library/az24scfc(VS.71).aspx (http://msdn2.microsoft.com/en-us/library/az24scfc%28VS.71%29.aspx)

http://msdn2.microsoft.com/en-us/library/1400241x.aspx

توجه :
یک کتاب مرجع سریع برای عبارات منظم هم دارم که هم حجمش فوق العاده کمه و هم چندین زبان از جمله سی شارپ، پایتون، پرل ، جاوا و ... را نیز شامل میشه .. این کتاب برای دوستانی که می خوان با عبارات منظم خیلی سریع اشنا بشن و از اونا در برنامه هاشون استفاده کنند خیلی مناسبه.. چون یک مرجع خیلی سریع هست..
برای دریافت کتاب که حجمی در حدود 200 کیلو بایت داره !!!از طریق ایمیل من اقدام کنید..چون می دونید که نمیشه اینجا اپ کرد
موفق باشید

ممنون از لینک های مفیدتون اما چرا نمیشه کتاب رو بگذارید؟

Mahdi.Kiani
جمعه 26 بهمن 1386, 22:42 عصر
ممنون از لینک های مفیدتون اما چرا نمیشه کتاب رو بگذارید؟

آرش جان به دلیل اینکه نمیشه در فروم فعالیت های غیر قانونی (اععم از warez) انجام داد.. چون پست مربوطه ضرب العجلی پاک میشه...

ارش جان اگر در این مورد باز هم سوالی داشتین لطفا با پیغام خصوصی بگین که تاپیک خوبتون از بحث خودش منحرف نشه
موفق باشید

mamali_programer
شنبه 27 بهمن 1386, 08:15 صبح
سلام به همه دوستان

این کد برای خاموش کردن کامپیوتر استفاده میشه



Process p = newProcess();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
StreamWriter sw = p.StandardInput;
sw.WriteLine("shutdown -s");
sw.Close();
p.Close();

Mahdi.Kiani
شنبه 27 بهمن 1386, 18:00 عصر
معادل نام های نوع های داده ای (Data Type ها) در زبان C# و VB









VB C# CLR

Short short System.Int16
Integer int System.Int32
Long long System.Int64
UShort ushort System.UInt16
UInteger uint System.UInt32
ULong ulong System.UInt64
String string System.String
Single float System.Single
Char char System.Char
SByte sbyte System.SByte
Byte byte System.Byte





نوع هایی که با عنوان CLR معرفی شده اند، در واقع CTS Type ها نام دارند. CTS مخفف Comon Type System می باشد

Mahdi.Kiani
شنبه 27 بهمن 1386, 18:17 عصر
چنانچه نیاز مند بودید که متغیری، یا property یا متدی تعریف کنید که نام اون جزء کلمات کلیدی بود، می توانید با @ در ابتدا نام مورد نظر، مشکل را حل کنید

به عنوان مثال

برای متد ها




// Compile Error
public void this(string s)
{
MessageBox.Show(s);
}

**********************

// Good

public void @this(string s)
{
MessageBox.Show(s);
}




برای متغیر ها




// Compile Error

private int this=10;

****************
//Good
private int @this=10;






برای property ها



// Compile Error

private int int;

public int Int
{
get { return int; }
set { int = value; }
}

// Good

private int @int;

public int Int
{
get { return @int; }
set { @int = value; }
}



کاربرد دیگر @ در مسیر ها می باشد.
همانطور که می دانید درون رشته ها، کاراکتر ( \ ) ، جزء کاراکتر های کنترلی می باشد. پس اگر شما بخواهید مسیری را مثلا
F:\kiani در متغیری ذخیره کنید، باید بنویسید





string Path = "F:\\kiani";


یعنی به ازاء هر \ دو تا \ باید بذارید. که این موضوع در مسیر های طولانی باعث دردسر خواهد شد. که می توانید این مشکل را با گذاشتن @ به صورت زیر مرتفع نمایید




string Path = @"F:\kiani";



درواقع کامپایلر از وجود @ متوجه می شود که تمامی \ های داخل رشته، جزئی از رشته می باشند و ان ها را به عنوان کاراکتر کنترلی چک نمی کند

mohammad272005
پنج شنبه 09 اسفند 1386, 03:07 صبح
کد زیر که با C# 3.0 نوشتم حرفای زیادی واسه گفتن داره. شاید جالب باشه. سوالی بودم تو همین تاپیک در خدمتم.


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace ConsoleApplication89
{
classProgram
{
staticvoid Main(string[] args)
{
//Collection Intialization
Collection<Person> PersonCollection = newCollection<Person>
{
//Type Initialization
newPerson(){ Name = "Name0", Age = 10 },
newPerson(){ Name = "Name1", Age = 11 },
newPerson(){ Name = "Name2", Age = 12 },
newPerson(){ Name = "Name4", Age = 14 },
newPerson(){ Name = "Name5", Age = 15 },
};
//LINQ
(from person in PersonCollection
where person.Age > 12 //Lambda Expression
select person).Perform(person => person.Write());
Console.ReadKey();
}
}
classPerson
{
//auto-implemented property
publicstring Name
{
get;
set;
}
publicint Age
{
get;
set;
}
publicoverridestring ToString()
{
returnstring.Format("Name = {0},\tAge = {1}", this.Name, this.Age);
}
}
staticclassExtensions
{
//Extension Method
internalstaticvoid Perform<TSource>(thisIEnumerable<TSource> sources, Action<TSource> actor)
{
foreach (var item in sources)
{
actor(item);
}
}
internalstaticvoid Write(thisobject obj)
{
Console.WriteLine(obj);
}
}
}

razavi_university
جمعه 10 اسفند 1386, 01:23 صبح
کد زیر که با C# 3.0 نوشتم حرفای زیادی واسه گفتن داره. شاید جالب باشه. سوالی بودم تو همین تاپیک در خدمتم.

{
//Collection Intialization
Collection<Person> PersonCollection = newCollection<Person>
.
.
.
//Extension Method
internalstaticvoid Perform<TSource>(thisIEnumerable<TSource> }

di\\
لطف میکنی در مورد این مثالت یکم توضیح بدی که چیکار می‌کنه
من که هر چی نگاش کردم چیز زیادی نفهمیدم:عصبانی++:

hassan razavi
جمعه 10 اسفند 1386, 06:56 صبح
مثالی از کاربرد و طرز پیاده سازی LINQ هستش. در واقع از یک جنریک لیست Query گرفتند.

Amir Oveisi
جمعه 10 اسفند 1386, 19:55 عصر
در مورد این مثالت یکم توضیح بدی که چیکار می‌کنه

http://msdn2.microsoft.com/en-us/library/bb546142.aspx

csharp2008
سه شنبه 10 شهریور 1388, 11:46 صبح
من یه مقاله از Code Project رو ترجمه و بازنویسی کدم ، این هم آدرسش برای دانلود :


http://tjs87.files.wordpress.com/2009/08/ctips.pdf

misoft.ir
یک شنبه 05 مهر 1388, 07:08 صبح
سلام
دوستانی که خوب بلدند این تاپیک رو ادامه بدهند
کمک و آموزش به دیگران ثواب داره!

behnam124
یک شنبه 05 مهر 1388, 19:10 عصر
برای اینکه سرعت تایپ کدهامون زیاد بشه
این کارو میشه انجام داد

مثلا میخوایم یه حلقه for رو سریع بنویسیم فقط کافیه بعد انتخاب for بلافاصله 2 بار کلیدtab بزنیم

خود محیط سی شارپ غالبشو واسمون مینویسه

اگه بد توضیح دادم
خودتون حتما امتحان کنید
که خیلی ترفند جالبی

Parham.D
دوشنبه 06 مهر 1388, 07:58 صبح
در #C وقتی پروژه‏ای را باز میکنیم، تعداد زیادی فضای نام Using شده. در طول برنامه هم ممکن است خودمان این کار را انجام دهیم. اما در طول کار با پروژه و در زمان اتمام آن شاید به همه این فضاهای نام نیاز نباشد. حالا این پسر خوب (یا شاید هم دختر!!) یعنی VS برامون یک ترفند داره تا با کمک اون این فضاهای نام را مرتب و اضافه‏ها را حذف کنیم.

در بخش کد نویسی فرم یا کلاسها، هر جا که دلتان خواست راست کلیک کنید. از منوی باز شده زیر منوی Organize Using را باز کنید. سه گزینه دارید. Remove Unused Using, Sort Using, Remove and Sort. فکر کنم نیازی به توضیح این سه مورد نباشد . . . .

موفق باشید.

ali.akhbary
دوشنبه 06 مهر 1388, 21:15 عصر
در بخش کد نویسی فرم یا کلاسها، هر جا که دلتان خواست راست کلیک کنید. از منوی باز شده زیر منوی Organize Using را باز کنید. سه گزینه دارید. Remove Unused Using, Sort Using, Remove and Sort. فکر کنم نیازی به توضیح این سه مورد نباشد . . . .

اين مال vs2008 است. تو vs2005 نيست؟

mahdi_7610
دوشنبه 06 مهر 1388, 22:49 عصر
هر جا خواستيد يه دستور مثل حلقه for يا foreach يا چند تا دستور ديگه را سريع بنويسيد کافيه توي اون قسمت راست کليک کنيد و گزينه Insert Snippet را بزنيد و از ليست باز شده گزينه مورد نظر را انتخاب کنيد :لبخند:

يه روش هم استفاده از Tab بود که در بالا بهش اشاره شد .