PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : 1001 نکته در سی شارپ



uody
26th March 2011, 11:53 AM
حاشیه دار کردن کنترل TextBox با یک رنگ دلخواه

در کلاس TextBox خود (و یا سایر کنترلهای دلخواه : کامبوباکس، لیست باکس و ...) بنویسید :


private static int WM_NCPAINT = 0x0085;
private static int WM_ERASEBKGND = 0x0014;
private static int WM_PAINT = 0x000F;

[DllImport("user32.dll")]
static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgnclip, uint fdwOptions);

[DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hwnd, IntPtr hDC);

protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT || m.Msg == WM_ERASEBKGND || m.Msg == WM_PAINT)
{
IntPtr hdc = GetDCEx(m.HWnd, (IntPtr)1, 1 | 0x0020);

if (hdc != IntPtr.Zero)
{
Graphics graphics = Graphics.FromHdc(hdc);
Color borderColor = Color.Blue;
Rectangle rectangle = new Rectangle(0, 0, this.Width, this.Height);
ControlPaint.DrawBorder(graphics, rectangle, borderColor, ButtonBorderStyle.Solid);
m.Result = (IntPtr)1;
ReleaseDC(m.HWnd, hdc);
}
}
}

توجه داشته باشید که انجام اینکار صرفا بوسیله override کردن رویداد paint و رسم یک مستطیل امکانپذیر نیست.

uody
26th March 2011, 11:56 AM
محو شدن تدریجی یک فرم با تغییر دادن خاصیت Opacity


private void button1_Click(object sender, EventArgs e)
{
this.Opacity = 1;
for (int i = 0; i < 100; i++)
{
<font color="RoyalBlue">this</font>.Opacity -= 0.01;
Application.DoEvents();
}
}

this به آبجکت فعلی از فرم اشاره دارد.

uody
26th March 2011, 11:57 AM
انتقال آیتمهای یک آرایه از اعداد به یک لیست باکس


int[] numbers = { 12, 23, 34, 45, 56, 67 };
Object[] oNumbers = new Object[numbers.Length];
numbers.CopyTo(oNumbers, 0);
listBox1.Items.AddRange(oNumbers);

uody
26th March 2011, 11:59 AM
پیاده سازی حالت ساده ی الگوی سینگلتون در یک کلاس



sealed class SingletonClass
{
// Static members are lazily initialized.
// .NET guarantees thread safety for static initialization
private static readonly SingletonClass instance =
new SingletonClass();

// Note: constructor is private.
private SingletonClass(){}

public static SingletonClass GetInstance()
{
return instance;
}
}

uody
26th March 2011, 12:02 PM
رسم یک چندضلعی توپر روی یک فرم


private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
// Create pen.
Pen blackPen = new Pen(Color.Black, 3);
// Create points that define polygon.
Point point1 = new Point(30, 50);
Point point2 = new Point(100, 25);
Point point3 = new Point(200, 5);
Point point4 = new Point(250, 50);
Point point5 = new Point(270, 100);
Point point6 = new Point(250, 250);
Point[] curvePoints = {point1, point2, point3, point4, point5, point6};
// Draw polygon to screen.
g.DrawPolygon(blackPen, curvePoints);
// Fill polygon
g.FillPolygon(Brushes.Red, curvePoints);
}

uody
26th March 2011, 12:04 PM
کشیدن نقاشی با توابع ساده گرافیکی و ذخیره خروجی در یک فایل


public void Draw2File ()
{
Bitmap bmp = new Bitmap (500, 400);
Graphics gr = Graphics.FromImage (bmp);
Rectangle rect = new Rectangle (20, 20, 450, 350);
gr.DrawRectangle (Pens.Red, rect);
gr.FillRectangle(Brushes.Pink, rect);
gr.DrawString ("Salam", new Font ("Arial", 10), Brushes.Red, 50, 50);
gr.DrawArc (Pens.Red, 30, 30, 60, 60, 0, 180);
gr.DrawEllipse(new Pen(Color.Yellow, 3), new Rectangle(200, 100, 200, 200));
bmp.Save ("C:\\1.bmp");
bmp.Dispose ();
gr.Dispose ();
}

منبع : http://www.dofactory.com/Patterns/PatternSingleton.aspx

uody
26th March 2011, 12:07 PM
بدست آوردن لیست نمونه های SQL Server موجود در شبکه



using System.Data.Sql;


private void ShowSQLServerInstances()
{
SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
dataGridView1.DataSource = (table);
}

uody
26th March 2011, 12:09 PM
افزودن و حذف کردن یک برنامه به StartUp ویندوز از طریق کلیدهای رجیستری


using Microsoft.Win32;


private void AddStartUpKey(string _name, string _path)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros oft\Windows\CurrentVersion\Run", true);
key.SetValue(_name, _path);
}

private void RemoveStartUpKey(string _name)
{
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"Software\Micros oft\Windows\CurrentVersion\Run", true);
key.DeleteValue(_name, false);
}

uody
26th March 2011, 12:11 PM
Hibernate و Standby کردن کامپیوتر


// Hibernate
Application.SetSuspendState(PowerState.Hibernate, true, true);

// Standby
Application.SetSuspendState(PowerState.Suspend, true, true);

uody
26th March 2011, 12:12 PM
قفل کردن کامپیوتر از طریق کدنویسی


[DllImport("user32.dll")]
public static extern void LockWorkStation()

// Lock workstation
LockWorkStation();

uody
26th March 2011, 12:14 PM
شفاف کردن پشت زمینه ی کنترلها

ایجاد شفافیت کامل پشت زمینه ی یک کنترل :


control.BackColor = Color.Transparent;

تعیین میزان شفافیت یک کنترل:


control.BackColor = Color.FromArgb(trancparency, control.BackColor);

در کد بالا مقدار trancparency از 0 (برای کاملا شفاف) تا 255 (کاملا کدر) قابل تغییر است.

مثال : یک Label با شفافیت 50%


label1.BackColor = Color.FromArgb(127, label1.BackColor);

uody
26th March 2011, 12:17 PM
Shutdown، Restartو Logoff کردن یک کامپیوتر بوسیله کد


[DllImport("user32.dll")]
public static extern int ExitWindow***(int uFlags, int dwReason);

// Log Off
ExitWindow***(0, 0);

// Reboot
ExitWindow***(2, 0);

// Shutdown
ExitWindow***(1, 0);

// Force LogOff
ExitWindow***(4, 0);

و یا:


// Log Off
System.Diagnostics.Process.Start("ShutDown", "/l");

// Reboot
System.Diagnostics.Process.Start("ShutDown", "/r");

// Shutdown
System.Diagnostics.Process.Start("ShutDown", "/s");

uody
26th March 2011, 12:21 PM
بستن یک پروسه در حال اجرا

مثال : بستن notepd

using System.Diagnostics;

foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName.ToLower() == "notepad")
p.Kill();
}

و یا:

System.Diagnostics.Process.Start("TaskKill", "/f /im Notepad.exe /t");

uody
26th March 2011, 12:47 PM
Ping کردن یک کامپیوتر تحت شبکه


using System.Net.NetworkInformation;


private void button2_Click(object sender, EventArgs e)
{
string remoteMachineNameOrIP = "127.0.0.1";
int timeOut = 5;
Ping ping = new Ping();
// Pinging remote maching
PingReply reply = ping.Send(remoteMachineNameOrIP, timeOut);
// Displaying the result
StringBuilder sb = new StringBuilder();
sb.Append("Address:" + reply.Address.ToString());
sb.Append("\nStatus:" + reply.Status.ToString());
sb.Append("\nRoundtripTime:" + reply.RoundtripTime.ToString());
MessageBox.Show(sb.ToString(), "Ping Result: " + remoteMachineNameOrIP);
}

uody
26th March 2011, 12:54 PM
بدست آوردن مسیر دایرکتوری جاری برنامه


MessageBox.Show(AppDomain.CurrentDomain.BaseDirect ory);

یا:


MessageBox.Show(System.IO.Directory.GetCurrentDire ctory());



یا:


MessageBox.Show(Application.StartupPath);

یا:


MessageBox.Show(System.IO.Path.GetDirectoryName(Ap plication.ExecutablePath));

uody
26th March 2011, 02:50 PM
برگرداندن تعدادی مشخص و اتفاقی از رکوردها بوسیله کوئری

مثال : برگرداندن 10 رکورد تصادفی از جدول myTable

SELECT TOP 10 id,title
FROM myTable
ORDER BY NEWID()

uody
26th March 2011, 02:53 PM
پاک کردن خاصیت Text گروهی از کنترلهای مشخص

کاربرد : زمانی که نمیتوان از یک الگوریتم بازگشتی استفاده کرد؛ برای مثال کنترلها در Container های متفاوتی هستند و تنها تعداد خاصی از آنها باید Clear شوند.


public void ClearControls(params Control[] ctls)
{
foreach (Control ct in ctls)
ct.Text = "";
}

private void button1_Click(object sender, EventArgs e)
{
ClearControls(textBox1, textBox2, comboBox1);
}

uody
26th March 2011, 02:56 PM
عوض کردن نشانگر ماوس (cursor) روی یک کنترل

استفاده از کرسرهای پیشفرض محیط :


button1.Cursor = Cursors.Hand;

لود کردن یک کرسر سفارشی از فایل :


button1.Cursor = new Cursor(@"C:\WINDOWS\Cursors\hibeam.cur");

uody
26th March 2011, 02:58 PM
پاک کردن خاصیت Text کنترلهای موجود در یک Container بصورت بازگشتی


public void ClearControls(Control _parent)
{
if (!_parent.HasChildren)
_parent.Text = "";
foreach (Control ct in _parent.Controls)
ClearControls(ct);
}

private void button1_Click(object sender, EventArgs e)
{
ClearControls(this);
}

uody
26th March 2011, 03:02 PM
بدست آوردن آخرین Identity اضافه شده به جدول


INSERT INTO Sales.Customer ([TerritoryID],[CustomerType]) VALUES (8,'S')
GO
<b><font size="2">SELECT SCOPE_IDENTITY()</font></b>

uody
26th March 2011, 03:08 PM
using کردن یک namespace


وقتی نام کلاسی رو می نویسین و می دونین که باید ازش using کنین کافیه که بعد تایپ کردن اسمش Alt + Shift + F10 و بعد Enter رو بزنین خودش براتون using رو اضافه می کنه!

ساختن یک Connection با استفاده از ConnectionString موجود در فایل Configuration

برای خواندن ConnectionString ی که در فایل app.config قرار داده شده کافیه و ایجاد یک SqlConnection کافیه کد زیر را تایپ کنین:


SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["myConnection"].ConnectionString);

uody
26th March 2011, 03:16 PM
Encryptکردن ConnectionString ها موجود در فایل app.Config

برای Encrypt کردن قسمت ConnectionStrings فایل web.config یا app.Config از کد زیر استفاده می کنیم:

App.Config


Configuration config = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
config.ConnectionStrings.SectionInformation.ForceS ave = true;
config.ConnectionStrings.SectionInformation.Protec tSection("RsaProtectedConfigurationProvider");
config.Save();

Web.Config


Configuration config = WebConfigurationManager.OpenWebConfiguration("myWe bSite");
config.ConnectionStrings.SectionInformation.ForceS ave = true;
config.ConnectionStrings.SectionInformation.Protec tSection("RsaProtectedConfigurationProvider");
config.Save();

uody
26th March 2011, 03:18 PM
Decrypt کردن ConnectionString ها موجود در فایل app.Config

برای Decrypt کردن محتویات ConnectionString داخل فایل های Config از کد های زیر استفاده می کنیم:

برای App.Config


Configuration config = ConfigurationManager.OpenExeConfiguration(Configur ationUserLevel.None);
config.ConnectionStrings.SectionInformation.ForceS ave = true;
config.ConnectionStrings.SectionInformation.Unprot ectSection();
config.Save();

برای Web.Config


Configuration config = WebConfigurationManager.OpenWebConfiguration("myWe bSite");
config.ConnectionStrings.SectionInformation.ForceS ave = true;
config.ConnectionStrings.SectionInformation.Unprot ectSection();
config.Save();

uody
26th March 2011, 03:25 PM
معرفی چند snippet متداول جهت سرعت بخشیدن به کدنویسی

آشنایی با Snippet ها باعث سرعت شما در محیط کدنویسی میشود. برای استفاده کافیست بلافاصله بعد از نوشتن آنها (و بدون ایجاد فاصله) دوبار دکمه Tab را فشار دهید. (توضیحات بیشتر)
در ادامه با چند اسنیپت متداول آشنا خواهید شد :

ایجاد یک ناحیه :‌

#region

ایجاد MessageBox :

mbox

ایجاد Constructor برای کلاس :

ctor

ایجاد متود Main :

svm

برای ایجاد کلاسها، ایندکسر، استراکچر، ...

class, enum, struct, indexer

برای ایجاد انواع حلقه ها :

for
forr
foreach
while
do


ایجاد پراپرتی :

prop
propg

دستورات شرطی :

if
else
switch


وش دیگر افزودن :‌ روی یک قسمت خالی در محیط کدنویسی Right Click و سپس گزینه Insert Snippet رو انتخاب نمایید.
چنانچه کدی (مثلا 10 خط) نوشتید که میخواهید درون یک بلاک (حلقه، شرط و ...) قرار بگیره تمامی خطوط آن را Select و پس از Right Click گزینه Surround with رو انتخاب نمایید.

uody
26th March 2011, 03:29 PM
ایجاد فرمهایی با اشکال غیرمستطیلی

ایجاد یک فرم دایره ای شکل :


private void Form1_Load(object sender, EventArgs e)
{
this.Height = 350;
this.Width = 350;
//Creating circle path
System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
path.AddEllipse(0, 0, 300, 300);
//Creating the region from the circle path
this.Region = new Region(path);
this.Show();
}

uody
26th March 2011, 03:33 PM
قطع کردن اتصال اینترنت دایل آپ از طریق دستورات خط فرمان


System.Diagnostics.Process.Start("rasdial", "/disconnect");

uody
26th March 2011, 03:35 PM
تغییر زبان پیشفرض ویندوز بصورت داینامیک در برنامه


public struct LanguageHelper
{
public static void SetLanguage2English()
{
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("en-US"));
}

public static void SetLanguage2Farsi()
{
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("fa-IR"));
}
}

uody
26th March 2011, 03:41 PM
ایجاد طیف رنگ (Gradient) بعنوان پشت زمینه ی کنترلها


using System.Drawing.Drawing2D;
using System.Drawing;

public void PaintGradient(Control _control, LinearGradientMode _direction, Color _gradientColorStart, Color _gradientColorEnd)
{
LinearGradientBrush gradBrush;
gradBrush = new LinearGradientBrush(new Rectangle(0, 0, _control.Width, _control.Height), _gradientColorStart, _gradientColorEnd, _direction);
Bitmap bmp = new Bitmap(_control.Width, _control.Height);
Graphics g = Graphics.FromImage(bmp);
g.FillRectangle(gradBrush, new Rectangle(0, 0, _control.Width, _control.Height));
_control.BackgroundImage = bmp;
_control.BackgroundImageLayout = ImageLayout.Stretch;
}

حال این متود رو در رخداد Paint کنترلهای دلخواه (فرم، دکمه، پنل ...) بنویسید :


private void Form1_Paint(object sender, PaintEventArgs e)
{
PaintGradient(this, LinearGradientMode.Vertical, Color.RoyalBlue, Color.DarkBlue);
}

خصوصا ظاهر بهتر و مناسبتری برای دکمه های شما ایجاد میکند.

uody
26th March 2011, 03:47 PM
چگونه از یک فرم تنها یک عدد بتواند باز شود ؟ (توسط Generic Singleton)

با استفاده از پیاده سازی ژنریک الگوی سینگلتون :


public class SingletonProvider<T> where T : new()
{
SingletonProvider() { }

public static T Instance
{
get
{
return SingletonCreator.Instance;
}
}

class SingletonCreator
{
static SingletonCreator(){}
private static T instance;
public static T Instance
{
get
{
System.Windows.Forms.Form frm = instance as System.Windows.Forms.Form;
if (instance == null || frm.IsDisposed==true)
instance = new T();
return instance;
}
}
}
}

و برای استفاده :


BoatForm boat = SingletonProvider<BoatForm>.Instance;

uody
26th March 2011, 03:54 PM
طریقه تغییر دادن خاصیت FontStyle یک کنترل در زمان اجرا


private void Form1_Load(object sender, EventArgs e)
{
textBox1.Font = new Font(textBox1.Font, FontStyle.Bold | FontStyle.Italic | FontStyle.Underline);
}

uody
26th March 2011, 03:56 PM
بدست آوردن مسیر فولدرهای ویژه

برای مثال :

string path = Environment.GetFolderPath(Environment.SpecialFolde r.ProgramFiles);

سایر مسیرها قابل دستیابی با این روش :

Desktop, MyDocuments, System, ...

uody
26th March 2011, 03:58 PM
خواندن و نوشتن فایل به صورت unicode با استفاده از richTextBox


// read text file
richTextBox1.LoadFile(@"C:\Log.txt", RichTextBoxStreamType.UnicodePlainText);
// save text file
richTextBox1.SaveFile(@"C:\Log.txt", RichTextBoxStreamType.UnicodePlainText);

uody
26th March 2011, 04:00 PM
جابجا کردن فرم با کلیک بر روی هر قسمت از آن - با استفاده از توابع api


using System.Runtime.InteropServices;

[DllImport("user32.dll")]
static extern int ReleaseCapture();
[DllImport("user32.dll", EntryPoint = "SendMessageA")]
static extern int SendMessage(int hwnd, int wMsg, int wParam, object lParam);
private const int WM_NCLBUTTONDOWN = 161;

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle.ToInt32(), WM_NCLBUTTONDOWN, 2, 0);
}

uody
26th March 2011, 04:06 PM
یافتن شماره سریال و مدل تمامی هارددیسکهای موجود در یک سیستم

ابتدا System.Management رو به References پروژه بیفزایید و سپس :


using System.Management;

private void GetHDDSerialNumber()
{
ManagementObjectSearcher searcher;
string query1 = "SELECT * FROM Win32_DiskDrive";
string query2 = "SELECT * FROM Win32_PhysicalMedia";

searcher = new ManagementObjectSearcher(query1);
foreach (ManagementObject wmi_HD in searcher.Get())
if (wmi_HD["Model"] != null)
MessageBox.Show(wmi_HD["Model"].ToString());

searcher = new ManagementObjectSearcher(query2);
foreach (ManagementObject wmi_HD in searcher.Get())
if (wmi_HD["SerialNumber"] != null)
MessageBox.Show(wmi_HD["SerialNumber"].ToString());
}

uody
26th March 2011, 04:10 PM
تبدیل مقدار یک عبارت رشته ای به یک عدد صحیح

int n = Convert.ToInt32(textBox1.Text);

یا:

int n = Int32.Parse(textBox1.Text);

و چنانچه امکان خطا باشد که تقریبا همیشه هست :

int n;
Int32.TryParse(textBox1.Text, out n);

در این حالت خروجی به n تخصیص داده میشود و چنانچه مشکلی رخ دهد n برابر صفر میشود.

uody
26th March 2011, 04:33 PM
اجرا کردن یک فایل اجرایی با کدنویسی


System.Diagnostics.Process.Start("mspaint.exe");

چنانچه فایل اجرایی نیاز به آرگومان خط فرمان داشته باشد :


System.Diagnostics.Process.Start("mspaint.exe", "c:\\Test.bmp");
مثال بالا تصویر Test را در msPaint باز میکند.

uody
26th March 2011, 04:35 PM
ایجاد متن و رشته های چند سطری


string myString1 = "This is the first line of my string.\n" +
"This is the second line of my string.\n" +
"This is the third line of the string.\n";
و یا:


string myString2 = @"This is the first line of my string.
This is the second line of my string.
This is the third line of the string.";

uody
26th March 2011, 04:40 PM
روشهای Initialize کردن انواع آرایه ها

// Single-dimensional array (numbers).
int[] n1 = new int[4] {2, 4, 6, 8};
int[] n2 = new int[] {2, 4, 6, 8};
int[] n3 = {2, 4, 6, 8};

// Single-dimensional array (strings).
string[] s1 = new string[3] {"John", "Paul", "Mary"};
string[] s2 = new string[] {"John", "Paul", "Mary"};
string[] s3 = {"John", "Paul", "Mary"};

// Multidimensional array.
int[,] n4 = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
int[,] n5 = new int[,] { {1, 2}, {3, 4}, {5, 6} };
int[,] n6 = { {1, 2}, {3, 4}, {5, 6} };

// Jagged array.
int[][] n7 = new int[2][] { new int[] {2,4,6}, new int[] {1,3,5,7,9} };
int[][] n8 = new int[][] { new int[] {2,4,6}, new int[] {1,3,5,7,9} };
int[][] n9 = { new int[] {2,4,6}, new int[] {1,3,5,7,9} };

uody
26th March 2011, 05:07 PM
ایجاد تصاویر Bitmap در زمان اجرا


private Image CreateBitmap()
{
System.Drawing.Bitmap flag = new System.Drawing.Bitmap(10, 10);
for (int x = 0; x < flag.Height; ++x)
for (int y = 0; y < flag.Width; ++y)
flag.SetPixel(x, y, Color.White);
for (int x = 0; x < flag.Height; ++x)
flag.SetPixel(x, x, Color.Red);
return flag;
}

private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Image = CreateBitmap();
}

منبع : http://msdn2.microsoft.com/en-us/library/aa287582(VS.71).aspx

uody
26th March 2011, 05:09 PM
افزودن کنترل در زمان اجرا

مثال: یک تکست باکس به فرم اضافه میکند:


private void button1_Click(object sender, System.EventArgs e)
{
TextBox myText = new TextBox();
myText.Location = new Point(25,25);
this.Controls.Add (myText);
}

uody
26th March 2011, 05:11 PM
یافتن MAC آدرس کارت شبکه

ابتدا System.Management رو به References پروژه بیفزایید و سپس :


using System.Management;

private void GetMACAddress()
{
ManagementObjectSearcher searcher;
string qry = "select * FROM Win32_NetworkAdapter";
searcher = new ManagementObjectSearcher(qry);
foreach (ManagementObject wmi_HD in searcher.Get())
if (wmi_HD["MacAddress"] != null)
MessageBox.Show(wmi_HD["MacAddress"].ToString());

uody
26th March 2011, 05:20 PM
نمایش تصاویر در Windows picture and fax viewer از طریق کدنویسی


//Open with the 'Windows picture and fax viewer':
System.Diagnostics.Process.Start(@"C:\Windows\syst em32\rundll32.exe "
, @"C:\Windows\system32\shimgvw.dll,ImageView_Fullsc reen " + filename);

اینهم که آسونه اما شاید واسه دوستانی مفید باشه :


//Open with the 'Microsoft Paint':
System.Diagnostics.Process.Start(@"C:\Windows\syst em32\MSPaint.exe "
, filename);

uody
26th March 2011, 05:40 PM
وادار کردن لیست باکس به اسکرول تا یک آیتم مشخص

مثال - برای آخرین آیتم :


<font size="2"><font color="#008000">// Set the TopIndex property of the ListBox to ensure the</font></font>
<font size="2"><font color="#008000">// most recently added items are visible.</font></font>
<font size="2">listBox1.TopIndex = listBox1.Items.Count - 1;</font>
<font size="2">listBox1.SelectedIndex = listBox1.Items.Count - 1;</font>

uody
26th March 2011, 05:41 PM
جابجا کردن فرم با کلیک بر روی هر قسمت از آن - بدون استفاده از توابع api


private bool dragging;
private Point pointClicked;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
// Turn drag mode on and store the point clicked.
dragging = true;
pointClicked = new Point(e.X, e.Y);
}
else
{
dragging = false;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (dragging)
{
Point pointMoveTo;
// Find the current mouse position in screen coordinates.
pointMoveTo = this.PointToScreen(new Point(e.X, e.Y));
// Compensate for the position the control was clicked.
pointMoveTo.Offset(-pointClicked.X, -pointClicked.Y);
// Move the form.
this.Location = pointMoveTo;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
dragging = false;
}

پاسخ با نقل قول

uody
26th March 2011, 05:46 PM
انتقال مقادیر خاصیت Text دو تکست باکس از طریق Drag & Drop


private void textBox_DragDrop(object sender, DragEventArgs e)
{
TextBox txt = (TextBox)sender;
txt.Text = (string)e.Data.GetData(DataFormats.Text);
}

private void textBox_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}

private void textBox_MouseDown(object sender, MouseEventArgs e)
{
TextBox txt = (TextBox)sender;
txt.SelectAll();
txt.DoDragDrop(txt.Text, DragDropEffects.Copy);
}

private void Form1_Load(object sender, EventArgs e)
{
textBox2.DragDrop += new DragEventHandler(this.textBox_DragDrop);
textBox2.MouseDown += new MouseEventHandler(this.textBox_MouseDown);
textBox2.DragEnter += new DragEventHandler(this.textBox_DragEnter);
textBox1.DragDrop += new DragEventHandler(this.textBox_DragDrop);
textBox1.MouseDown += new MouseEventHandler(this.textBox_MouseDown);
textBox1.DragEnter += new DragEventHandler(this.textBox_DragEnter);
textBox1.AllowDrop = textBox2.AllowDrop = true;
}

uody
26th March 2011, 05:51 PM
گرفتن و تسخیر کردن (Capture) تصویر صفحه نمایش


private void button1_Click(object sender, EventArgs e)
{
this.BackgroundImage= CaptureScreen();
}

private Image CaptureScreen()
{
Bitmap screen = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
using (Graphics g = Graphics.FromImage(screen))
{
g.CopyFromScreen(0, 0, 0, 0, screen.Size);
}
return screen;
}

uody
26th March 2011, 05:57 PM
پخش کردن برخی اصوات و صداهای سیستمی تنها با یک خط!


// Play a beep with default frequency
// and duration (800 and 200, respectively)
Console.Beep();

// Play a beep with frequency as 200 and duration as 300
Console.Beep(200, 300);

و یا:


SystemSounds.Asterisk.Play();

SystemSounds.Hand.Play();

SystemSounds.Exclamation.Play();

SystemSounds.Beep.Play();

SystemSounds.Question.Play();

uody
26th March 2011, 06:02 PM
نواختن یک فایل صوتی با فرمت Wave


using System.Media;


private void Form1_Load(object sender, EventArgs e)
{
SoundPlayer player = new SoundPlayer();
string path = "C:\\windows\\media\\ding.wav";
player.SoundLocation = path; //Set the path
player.Play(); //play it
}

منبع : http://www.daniweb.com/code/snippet446.html

uody
26th March 2011, 06:04 PM
بدست آوردن لیست چاپگرهای نصب شده در یک سیستم


using System.Drawing.Printing;


private void GetInstalledPrinters()
{
foreach (string printerName in PrinterSettings.InstalledPrinters)
MessageBox.Show(printerName);
}

uody
26th March 2011, 07:03 PM
برخی اعمال متدوال روی تاریخ میلادی


// Create a TimeSpan representing 2.5 days.
TimeSpan timespan1 = new TimeSpan(2, 12, 0, 0);

// Create a TimeSpan representing 4.5 days.
TimeSpan timespan2 = new TimeSpan(4, 12, 0, 0);

// Create a TimeSpan representing 1 week.
TimeSpan oneWeek = timespan1 + timespan2;

// Create a DateTime with the current date and time.
DateTime now = DateTime.Now;

// Create a DateTime representing 1 week ago.
DateTime past = now - oneWeek;

// Create a DateTime representing 1 week in the future.
DateTime future = now + oneWeek;

مثال :‌ پیدا کردن اختلاف تعداد روزهای بین دو تاریخ :

DateTime dateFrom = DateTime.Parse("10/10/2007");
DateTime dateTo = DateTime.Parse("11/12/2007");
TimeSpan ts = dateTo - dateFrom;
int days = ts.Days;
ویا:

DateTime dtFirst = new DateTime(2007, 10, 10);
DateTime dtSecond = new DateTime(2007, 11, 12);
TimeSpan diffResult = dtSecond.Subtract(dtFirst);

uody
26th March 2011, 07:12 PM
تغییر خواص یک فایل


using System.IO;

مخفی و فقط خواندنی کردن یک فایل :


FileInfo file = new FileInfo(@"C:\test.txt");
file.Attributes = file.Attributes | FileAttributes.ReadOnly | FileAttributes.Hidden;

تغییر خاصیت (حذف حالت فقط خواندنی مثال قبل):


file.Attributes = file.Attributes & ~FileAttributes.ReadOnly;

uody
26th March 2011, 07:54 PM
محاسبه ی حجم کلی یک دایرکتوری


using System.IO;

public long CalculateDirectorySize(DirectoryInfo directory, bool includeSubdirectories)
{
long totalSize = 0;
// Examine all contained files.
FileInfo[] files = directory.GetFiles();
foreach (FileInfo file in files)
{
totalSize += file.Length;
}
// Examine all contained directories.
if (includeSubdirectories)
{
DirectoryInfo[] dirs = directory.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
totalSize += CalculateDirectorySize(dir, true);
}
}
return totalSize;
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(CalculateDirectorySize(new DirectoryInfo( @"C:\WINDOWS\System32"), true).ToString());
}

uody
26th March 2011, 07:56 PM
خواندن و نوشتن فایلهای متنی


using System.IO;

private void CreateTextFile()
{
using (FileStream fs = new FileStream("C:\\test.txt", FileMode.Create))
{
using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8))
{
w.WriteLine(124.23M);
w.WriteLine("Salaam!");
w.WriteLine('!');
}
}
}

private string ReadFromTextFile()
{
StringBuilder sb = new StringBuilder();
using (FileStream fs = new FileStream("C:\\test.txt", FileMode.Open))
{
using (StreamReader r = new StreamReader(fs, Encoding.UTF8))
{
sb.AppendLine(r.ReadLine());
sb.AppendLine(r.ReadLine());
sb.AppendLine(r.ReadLine());
}
}
return sb.ToString();
}

uody
26th March 2011, 07:57 PM
اضافه و جدا کردن نام فایل از مسیر کامل


string filename = @"..\..\myfile.txt";
string fullPath = @"c:\Temp";
string filename = Path.GetFileName(filename);
string fullPath = Path.Combine(fullPath, filename);
// (fullPath is now "c:\Temp\myfile.txt")

uody
26th March 2011, 07:59 PM
باز کردن یک سایت توسط internet explorer


<font size="2">
System.Diagnostics.</font><font size="2"><font color="#2b91af">Process</font></font><font size="2">.Start(</font><font size="2"><font color="#a31515">"iexplore.exe"</font></font><font size="2">, </font><font size="2"><font color="#a31515">"www.barnamenevis.org"</font></font><font size="2">);
</font>

و برای مثال در فایرفاکس :


<font size="2"> System.Diagnostics.</font><font size="2"><font color="#2b91af">Process</font></font><font size="2">.Start(</font><font size="2"><font color="#a31515">"C:\Program Files\Mozilla Firefox\FireFox.exe"</font></font><font size="2">, </font><font size="2"><font color="#a31515">"www.barnamenevis.org"</font></font><font size="2">);</font>

uody
26th March 2011, 08:00 PM
تبدیل نوع enum به int


<font size="2"><font color="#0000ff">public </font></font><font size="2"><font color="#0000ff">enum </font></font><font size="2"><font color="#008080">Days</font></font><font size="2"> { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };</font>
<font size="2"><font color="#0000ff">int</font></font><font size="2"> x = (</font><font size="2"><font color="#0000ff">int</font></font><font size="2">) </font><font size="2"><font color="#008080">Days</font></font><font size="2">.Mon;</font>

uody
26th March 2011, 08:01 PM
انتقال آیتمهای Enum به یک ListBox


<font size="2"><font color="#0000ff">public </font></font><font size="2"><font color="#0000ff">enum </font></font><font size="2"><font color="#008080">Days</font></font><font size="2"> { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };</font>
<font size="2">System.</font><font size="2"><font color="#008080">Type</font></font><font size="2"> t = </font><font size="2"><font color="#0000ff">typeof</font></font><font size="2">(</font><font size="2"><font color="#008080">Days</font></font><font size="2">);</font>
<font size="2"><font color="#0000ff">foreach</font></font><font size="2"> (</font><font size="2"><font color="#0000ff">string</font></font><font size="2"> s </font><font size="2"><font color="#0000ff">in </font></font><font size="2"><font color="#008080">Enum</font></font><font size="2">.GetNames(t))</font>
<font size="2">{</font>
<font size="2">listBox1.Items.Add(s);</font>
<font size="2">} </font>

uody
26th March 2011, 08:05 PM
معرفی میانبرهای متداول در کدنویسی

عادت کردن به میانبرها میتواند سرعت کدنویسی شما را افزایش دهد :


CTRL+ALT+L: View Solution Explorer. I use Auto Hide for all of my tool windows to maximize screen real estate. Whenever I need to open the Solution Explorer, it’s just a shortcut away. Related shortcuts: CTRL+ALT+X (Toolbox), F4 (Properties), CTRL+ALT+O (Output), CTRL+\, E (Error List), CTRL+\, T (Task List).
F12: Go to definition of a variable, object, or function.
SHIFT+F12: Find all references of a function or variable.
F7: Toggle between Designer and Source views.
CTRL+PgDn: Toggle between Design and Source View in HTML editor.
F10: Debug - step over. Related debugging shortcuts: F11 (debug - step into), SHIFT-F11 (debug - step out), CTRL-F10 (debug - run to cursor). F9 (toggle breakpoint).
CTRL+D or CTRL+/: Find combo (see section on Find Combo below).
CTRL+M, O: Collapse to Definitions. This is usually the first thing I do when opening up a new class.
CTRL+K, CTRL+C: Comment block. CTRL+K, CTRL-U (uncomment selected block).
CTRL+-: Go back to the previous location in the navigation history.
ALT+B, B: Build Solution. Related shortcuts: ALT+B, U (build selected Project), ALT+B, R (rebuild Solution).
CTRL+ALT+Down Arrow: Show dropdown of currently open files. Type the first few letters of the file you want to select.
CTRL+K, CTRL+D: Format code.
CTRL+L: Delete entire line.
CTRL+G: Go to line number. This is useful when you are looking at an exception stack trace and want to go to the offending line number.
SHIFT+ALT+Enter: Toggle full screen mode. This is especially useful if you have a small monitor. Since I upgraded to dual 17" monitors, I no longer needed to use full screen mode.
CTRL+K, X: Insert "surrounds with" code snippet. See Snippets tip below.
CTRL+B, T: Toggle bookmark. Related: CTRL+B, N (next bookmark), CTRL+B, P (prev bookmark).

uody
26th March 2011, 09:04 PM
بدست آوردن لیست تمامی فرمهای باز در یک برنامه
مثال :‌ تغییر رنگ پشت زمینه ی تمامی فرمهای باز در یک برنامه :

foreach (Form frm in Application.OpenForms)
frm.BackColor = Color.Fuchsia;

uody
26th March 2011, 09:05 PM
restart کردن (بستن و مجددا اجرا کردن) برنامه


private void button1_Click(object sender, EventArgs e)
{
Application.Restart();
}

uody
27th March 2011, 10:52 AM
ساده ترین راه برای جلوگیری از Not Respond شدن برنامه در حلقه های طولانی

برنامه تمامی message های درون message queue فعلی (از قبیل رخدادها و ...) را پردازش میکند.


Application.DoEvents();

مثال:
محو شدن تدریجی یک فرم با تغییر دادن خاصیت Opacity

private void button1_Click(object sender, EventArgs e)
{
this.Opacity = 1;
for (int i = 0; i < 100; i++)
{
<font color="RoyalBlue">this</font>.Opacity -= 0.01;
Application.DoEvents();
}
}

uody
27th March 2011, 10:55 AM
فقط یک نمونه از برنامه بتواند اجرا شود (با استفاده از Process)


using System.Diagnostics;
این تغییرات را در کلاس مربوط به StartUp برنامه اعمال کنید :


static class Program
{
[STAThread]
static void Main()
{
if (IsPrevInstance())
return;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
}

private static bool IsPrevInstance()
{
string processName = Process.GetCurrentProcess().ProcessName;
Process[] instances = Process.GetProcessesByName(processName);
if (instances.Length > 1)
return true;
else
return false;
}
}

mahsaj00n
27th March 2011, 11:28 AM
سلام در مورد اجزای کلاس آرایه (array)میتونید راهنماییم کنید

uody
27th March 2011, 11:55 AM
کار کردن با کلاس TimeZoneInfo

این کلاس مختص دات نت 3.5 (به بعد) است و جهت استفاده باید System.Core رو نیز به References پروژه ی خود بیافزایید.

مثال - بدست آوردن تاریخ و زمان فعلی در توکیو :


TimeZoneInfo tzSource = TimeZoneInfo.Local;
TimeZoneInfo tzDestination = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
string sourceTime = TimeZoneInfo.ConvertTime(DateTime.Now,
tzSource, tzDestination).ToShortTimeString();
MessageBox.Show(sourceTime);

uody
27th March 2011, 11:56 AM
بدست آوردن لیست تمامی ناحیه های زمانی (Time Zone)
این روش مختص دات نت 3.5 (به بعد) است.

using System.Collections.ObjectModel;
بدست آوردن Id و DisplayName نواحی :

ReadOnlyCollection<TimeZoneInfo> zones = TimeZoneInfo.GetSystemTimeZones();
foreach (TimeZoneInfo zone in zones)
{
listBox1.Items.Add(zone.Id);
listBox2.Items.Add(zone.DisplayName);
}

uody
27th March 2011, 11:59 AM
انجام عملیات متداول روی فایلها و دایرکتوریها

using System.IO;


//To create a directory
Directory.CreateDirectory(@"C:\MyNewDir");

//To move a directory
Directory.Move(@"C:\MyNewDir", @"C:\MyMovedDir");

//To delete a directory
Directory.Delete(@"C:\MyMovedDir");

//To Delete a directory recursively
Directory.Delete(@"C:\MyNewDir", true);

//To Delete a File
File.Delete(@"C:\MyFile.Txt");

//To Move a File
File.Move(@"C:\MyFile.Txt", @"C:\MyOtherDir\MyFile.Txt");

//To Copy a file
File.Copy(@"C:\MyFile.Txt", @"C:\MyOtherDir\MyFile.Txt");

//To copy to a different file name is also possible
File.Copy(@"C:\MyFile.Txt", @"C:\MyOtherDir\MyNewFileName.Txt");

//To get information about a file, like the length
//You can also get the extension, directory, LastAccessedtime,
//LastModifiedTime, wether the file exists or not, the creation date,
//attributes of the file etc, from the FileInfo class
FileInfo FI = new FileInfo(@"C:\MyFile.Txt");
Console.WriteLine("File size of MyFile.Txt: {0}", FI.Length);

//copy example
String DateTemp = DateTime.Now;
File.Copy(@"P:\PRD\Products\AHM\prod.CD\Database\d ata.mdb",
@"P:\PRD\Products\AHM\prod.CD\Database\"+ DateTemp +"-data.mdb");

منبع : http://www.eggheadcafe.com/community...in-folder.aspx

uody
27th March 2011, 12:08 PM
معنای کلمات متداولی که میشنوید
معنای کلمات متداولی که معمولا دات نت کار ها خواهند شنید. مخصو.صا تازه کار های عزیز

1 ) CLR
مخفف : Common Language RunTime

معنا :
محیط زمان اجرای برنامه های دات نت
-------------------------------------------------------------------------
2) CTS
مخفف : Common Type System
معنا : تایپ هایی هستند که در همه زبان های دات نت شناخته شده هستند و معمولا یک نام مستعار در هر زبان مجزا دارند.
مثلا System.Int32 در زبان C# همان int و در زبان VB همان Integer است.
نکته:
CTS تایپ ها برای همانهنگ سازی بین زبان های مختلف دات نتی استفاده میشه
----------------------------------------------------------------------------------------------
3) IL
مخفف : Intermediate Language
معنا : زبان واسطی که در مرحله اول کامپیا برنامه ها، تمامی کد های نوشته شده با زبان های دات نت (اعم از سی شارپ، وی بی و ..) به این زبان ترجمه می شوند. (باز هم جهت سازگاری بین زبان های مختلف در دات نت)

مثال

تکه کدی به زبان C#

public int add(int num1, int num2)
{

return num1 + num2;
}

همان تکه کد به زبان VB


Public Function add(ByVal num1 As Integer, ByVal num2 As Integer) As Integer

Return num1 + num2
End Function

تکه کد فوق به زبانIL


.method public hidebysig instance int32 add(int32 num1, int32 num2) cil managed
{
.maxstack 2
.locals init (
[0] int32 CS$1$0000)
L_0000: nop
L_0001: ldarg.1
L_0002: ldarg.2
L_0003: add
L_0004: stloc.0
L_0005: br.s L_0007
L_0007: ldloc.0
L_0008: ret
}

نکته : شما می توانید کل برنامه خود را به زبان IL بنویسید و سپس آن را اجرا کنید. ولی اصولا هیچ آدم عاقلی این کار را نمیکنه
------------------------------------------------------------------------------------------
4 ) CIL
مخفف : Common Intermediate Langiage
معنا : معالد همون IL هست.
نکته: استفاده از IL متداول تر است.
-----------------------------------------------------------------------------------------
5) VES
مخفف : Virtual Executation Systeme
معنا : معادل CLR هست
نکته: CLR متداول تر است.
---------------------------------------------------------------------------------
6) CLI
مخفف : Common Language Interface
معنا : به مجموعه CLR و CTS و CLI می گویند

uody
29th March 2011, 07:37 PM
کپی کردن فایلهای درون یک دایرکتوری (فقط فایلها)


using System.IO;

فایلها را در مسیرC:\CopiedFolder کپی میکند :


FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "Find Folder to Copy.";
if (fbd.ShowDialog() == DialogResult.OK)
{
string[] files = Directory.GetFiles(fbd.SelectedPath);
Directory.CreateDirectory(@"C:\CopiedFolder");
for (int i = 0; i < files.Length; i++)
{
string tmpFileExt = Path.GetExtension(files[i]);
string tmpFileName = Path.GetFileNameWithoutExtension(files[i]);
File.Copy(files[i], @"C:\CopiedFolder\" + tmpFileName + tmpFileExt, true);
}
}

uody
29th March 2011, 07:44 PM
کپی کامل یک دایرکتوری و تمامی زیرشاخه های آن بصورت بازگشتی


using System.IO;


void CopyDirectory(DirectoryInfo source, DirectoryInfo destination)
{
if (!destination.Exists)
destination.Create();
// Copy all files.
FileInfo[] files = source.GetFiles();
foreach (FileInfo file in files)
file.CopyTo(Path.Combine(destination.FullName, file.Name));

// Process subdirectories.
DirectoryInfo[] dirs = source.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
// Get destination directory.
string destinationDir = Path.Combine(destination.FullName,dir.Name);
// Call CopyDirectory() recursively.
CopyDirectory(dir, new DirectoryInfo(destinationDir));
}
}

uody
29th March 2011, 07:46 PM
سریالیزشین چیست ؟

Serialize :
فرآیندی برای تبدیل یک آبجکت و یا گرافی متشکل از چند آبجکت به یک حالت خطی (و جریان وار) از بایت ها برای انتقال و یا ذخیره سازی در محلی دیگر است.

Deserialize :
عمل برعکس سریالیزشین است؛ یعنی دوباره ساختن آبجکت از روی جریانی از بایتها .


انواع فرمت ها در سریالیزشین :
1- Binary : بصورت باینری سریالایز میکند. (فشرده ترین و efficient ترین حالت است)
SOAP -2 : بصورت soap سریالایز میکند. (برای ارسال در شبکه و جایی که از تحت دات نت بودن کلاینتها مطمئن نیستیم)
XML -3 : بصورت xml سریالایز میکند. (برای ارسال تحت شبکه - مزیت : خوانایی)

برخی از موارد کاربرد سریالزیشین:
1- کپی یک انشعاب از آبجکتها
2- انتقال اطلاعات در شبکه
3- نگهداری state ها و snapshot های مختلف در یک برنامه (برای موارد حساس : مثل تراکنشهای بانکی و ...)
4- پیاده سازی Deep Copy و Shallow Copy

uody
29th March 2011, 08:45 PM
استفاده از Place Holder ها در کار با رشته ها

فرض کنیم که :

int a = 3, b = 5;

حال میتونیم به جای نوشتن :

string result = a.ToString() + "+" + b.ToString() + "=" + (a + b).ToString();



بسادگی بنویسیم :

string result = string.Format("{0}+{1}={2}", a, b, a + b);
استفاده از Place Holder ها (حالت دوم) ضمن خوانایی بیشتر برنامه، معمولا کدنویسی کمتری نیز طلب میکند.

uody
29th March 2011, 09:00 PM
خواندن و نوشتن رنگ یک پیکسل به کمک توابع api


<font color="#0000ff">using</font> System.Drawing;
<font color="#0000ff">using</font> System.Runtime.InteropServices;
<font color="#0000ff">using</font> System.Windows.Forms;

[<font color="#2b91af">DllImport</font>( <font color="#a31515">"user32.dll"</font> )]
<font color="#0000ff">static</font> <font color="#0000ff">extern</font> <font color="#2b91af">IntPtr</font> GetDC( <font color="#2b91af">IntPtr</font> hWnd );
[<font color="#2b91af">DllImport</font>( <font color="#a31515">"user32.dll"</font> )]
<font color="#0000ff">static</font> <font color="#0000ff">extern</font> <font color="#0000ff">int</font> ReleaseDC( <font color="#2b91af">IntPtr</font> hWnd, <font color="#2b91af">IntPtr</font> hDC );
[<font color="#2b91af">DllImport</font>( <font color="#a31515">"gdi32.dll"</font> )]
<font color="#0000ff">static</font> <font color="#0000ff">extern</font> <font color="#0000ff">int</font> GetPixel( <font color="#2b91af">IntPtr</font> hDC, <font color="#0000ff">int</font> x, <font color="#0000ff">int</font> y );
[<font color="#2b91af">DllImport</font>( <font color="#a31515">"gdi32.dll"</font> )]
<font color="#0000ff">static</font> <font color="#0000ff">extern</font> <font color="#0000ff">int</font> SetPixel( <font color="#2b91af">IntPtr</font> hDC, <font color="#0000ff">int</font> x, <font color="#0000ff">int</font> y, <font color="#0000ff">int</font> color );

<font color="#0000ff">static</font> <font color="#0000ff">public</font> <font color="#2b91af">Color</font> GetPixel( <font color="#2b91af">Control</font> control, <font color="#0000ff">int</font> x, <font color="#0000ff">int</font> y )
{
<font color="#2b91af">Color</font> color = <font color="#2b91af">Color</font>.Empty;
<font color="#0000ff">if</font> (control != <font color="#0000ff">null</font>)
{
<font color="#2b91af">IntPtr</font> hDC = GetDC( control.Handle );
<font color="#0000ff">int</font> colorRef = GetPixel( hDC, x, y );
color = <font color="#2b91af">Color</font>.FromArgb(
(<font color="#0000ff">int</font>)(colorRef & 0x000000FF),
(<font color="#0000ff">int</font>)(colorRef & 0x0000FF00) >> 8,
(<font color="#0000ff">int</font>)(colorRef & 0x00FF0000) >> 16 );
ReleaseDC( control.Handle, hDC );
}
<font color="#0000ff">return</font> color;
}
<font color="#0000ff">static</font> <font color="#0000ff">public</font> <font color="#0000ff">void</font> SetPixel( <font color="#2b91af">Control</font> control, <font color="#0000ff">int</font> x, <font color="#0000ff">int</font> y, <font color="#2b91af">Color</font> color )
{
<font color="#0000ff">if</font> (control != <font color="#0000ff">null</font>)
{
<font color="#2b91af">IntPtr</font> hDC = GetDC( control.Handle );
<font color="#0000ff">int</font> argb = color.ToArgb();
<font color="#0000ff">int</font> colorRef =
(<font color="#0000ff">int</font>)((argb & 0x00FF0000) >> 16) |
(<font color="#0000ff">int</font>)(argb & 0x0000FF00) |
(<font color="#0000ff">int</font>)((argb & 0x000000FF) << 16);
SetPixel( hDC, x, y, colorRef );
ReleaseDC( control.Handle, hDC );
}
}

منبع : http://www.devtopics.com/c-getpixel-and-setpixel/

uody
29th March 2011, 09:03 PM
خواندن و نوشتن رنگ یک پیکسل به کمک کلاس Bitmap


using System.Drawing.Imaging;

Bitmap bmp = new Bitmap(picturebox1.Image);

//read
Color c = bmp.GetPixel(1, 1);

//write
bmp.SetPixel(2, 2, c);
مثال -

<font color="blue">private</font> <font color="blue">void</font> GetPixel_Example(PaintEventArgs e)
{

<font color="green">// Create a Bitmap object from an image file.</font>
Bitmap myBitmap = <font color="blue">new</font> Bitmap(<font color="maroon"><font color="maroon">"Grapes.jpg"</font></font>);

<font color="green">// Get the color of a pixel within myBitmap.</font>
Color pixelColor = myBitmap.GetPixel(50, 50);

<font color="green">// Fill a rectangle with pixelColor.</font>
SolidBrush pixelBrush = <font color="blue">new</font> SolidBrush(pixelColor);
e.Graphics.FillRectangle(pixelBrush, 0, 0, 100, 100);
}

uody
29th March 2011, 09:10 PM
انجام عملیات متداول در رجیستری ویندوز

using Microsoft.Win32;

// <font color="RoyalBlue"><b>Create SubKey</b></font>
Registry.LocalMachine.CreateSubKey(@"Software\Sinp in", RegistryKeyPermissionCheck.ReadWriteSubTree);

//<b><font color="RoyalBlue">Create Key and Set Value</font></b>
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"Software\Sinpin ", true);
reg.SetValue("DWord", "1", RegistryValueKind.DWord);
reg.SetValue("ExpandString", "1", RegistryValueKind.ExpandString);
reg.SetValue("QWord", "1", RegistryValueKind.QWord);
reg.SetValue("String", "1", RegistryValueKind.String);
reg.SetValue("Unknown", "1", RegistryValueKind.Unknown);

//<font color="Red"> <font color="RoyalBlue"><b>Delete Key</b></font></font>
reg.DeleteValue("DWOrd");

//<b><font color="RoyalBlue"> Delete SubKey</font></b>
Registry.LocalMachine.DeleteSubKey(@"Software\Sinp in");

// <b><font color="RoyalBlue">Read Key Value</font></b>
string val = reg.GetValue("QWord").ToString();

// <font color="RoyalBlue"><b>Retrieve All Keys</b></font>
foreach (string s in reg.GetValueNames())
MessageBox.Show(s);

uody
29th March 2011, 09:12 PM
Resize کردن یک تصویر با کدنویسی

using System.Drawing.Drawing2D;

private static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;

float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;

nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);

if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;

int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();

return (Image)b;
}

منبع : http://blog.paranoidferret.com/?p=11

uody
29th March 2011, 09:21 PM
Crop کردن یک تصویر (یک برش مستطیلی از تصویر)


private static Image cropImage(Image img, Rectangle cropArea)
{
Bitmap bmpImage = new Bitmap(img);
Bitmap bmpCrop = bmpImage.Clone(cropArea,
bmpImage.PixelFormat);
return (Image)(bmpCrop);
}

مثال از نحوه ی استفاده :


private void button1_Click(object sender, EventArgs e)
{
pictureBox2.Image = cropImage(pictureBox1.Image, new Rectangle(10,10,100,100));
}

uody
29th March 2011, 09:24 PM
تبدیل یک تصویر رنگی به معادل GrayScal آن


using System.Drawing.Imaging;

public static Bitmap MakeGrayscale(Bitmap original)
{
//create a blank bitmap the same size as original
Bitmap newBitmap =
new Bitmap(original.Width, original.Height);

//get a graphics object from the new image
Graphics g = Graphics.FromImage(newBitmap);

//create the grayscale ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix(
new float[][]{
new float[] {.3f, .3f, .3f, 0, 0},
new float[] {.59f, .59f, .59f, 0, 0},
new float[] {.11f, .11f, .11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}});

//create some image attributes
ImageAttributes attributes = new ImageAttributes();

//set the color matrix attribute
attributes.SetColorMatrix(colorMatrix);

//draw the original image on the new image
//using the grayscale color matrix
g.DrawImage(original,
new Rectangle(0, 0, original.Width, original.Height),
0, 0, original.Width, original.Height,
GraphicsUnit.Pixel, attributes);

//dispose the Graphics object
g.Dispose();
return newBitmap;
}

مثال -

private void button1_Click(object sender, EventArgs e)
{
Bitmap b = (Bitmap) pictureBox1.Image;
pictureBox2.Image = MakeGrayscale(b);
}

uody
29th March 2011, 09:32 PM
بدست آوردن مقدار یک Enum از عدد متناظر آن


<font color="#0000FF">public</font> T NumToEnum<T><font color="#000000">(</font><font color="#0000FF">int</font> number<font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">return</font> <font color="#000000">(</font>T<font color="#000000">)</font><font color="#0000FF">Enum</font>.<font color="#2B91AF">ToObject</font><font color="#000000">(</font><font color="#0000FF">typeof</font><font color="#000000">(</font>T<font color="#000000">)</font>, number<font color="#000000">)</font>;
<font color="#000000">}
</font>

مثال - با فرض داشتن :



<font color="#0000FF">public</font> <font color="#0000FF">enum</font> DaysOfWeek
<font color="#000000">{</font>
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
<font color="#000000">}</font>

میتوانیم بنویسیم :

<font color="#0000FF">int</font> day = <font color="#FF0000">3</font>;

DaysOfWeek d = NumToEnum<DaysOfWeek><font color="#000000">(</font>day<font color="#000000">)</font>;
<font color="#007F00"><i>//d is now DaysOfWeek.Thursday</i></font>

uody
30th March 2011, 12:44 AM
بدست آوردن مقدار یک Enum از رشته متنی متناظر با آن


<font color="#0000FF">public</font> <font color="#0000FF">static</font> T StringToEnum<T><font color="#000000">(</font><font color="#0000FF">string</font> name<font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">return</font> <font color="#000000">(</font>T<font color="#000000">)</font><font color="#0000FF">Enum</font>.<font color="#2B91AF">Parse</font><font color="#000000">(</font><font color="#0000FF">typeof</font><font color="#000000">(</font>T<font color="#000000">)</font>, name<font color="#000000">)</font>;
<font color="#000000">}</font>
مثال - با فرض داشتن :


<font color="#0000FF">public</font> <font color="#0000FF">enum</font> DaysOfWeek
<font color="#000000">{</font>
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
<font color="#000000">}</font>
میتوانیم بنویسیم :

DaysOfWeek d = StringToEnum<DaysOfWeek><font color="#000000">(</font><font color="#A31515">"Monday"</font><font color="#000000">)</font>;
<font color="#007F00"><i>//d is now DaysOfWeek.Monday


</i></font><font color="#0000FF">if</font><font color="#000000">(</font><font color="#0000FF">Enum</font>.<font color="#2B91AF">IsDefined</font><font color="#000000">(</font><font color="#0000FF">typeof</font><font color="#000000">(</font>DaysOfWeek<font color="#000000">)</font>, <font color="#A31515">"Katillsday"</font><font color="#000000">)</font><font color="#000000">)</font>
StringToEnum<DaysOfWeek><font color="#000000">(</font><font color="#A31515">"Katillsday"</font><font color="#000000">)</font>;

uody
30th March 2011, 01:17 AM
معرفی یک الگوی ساده از ژنریک سینگلتون

<font color="#0000FF">class</font> GenericSingleton<T> where T : <font color="#0000FF">class</font>, <font color="#0000FF">new</font><font color="#000000">(</font><font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">private</font> <font color="#0000FF">static</font> T instance;

<font color="#0000FF">public</font> <font color="#0000FF">static</font> T GetInstance<font color="#000000">(</font><font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">lock</font> <font color="#000000">(</font><font color="#0000FF">typeof</font><font color="#000000">(</font>T<font color="#000000">)</font><font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">if</font> <font color="#000000">(</font>instance == <font color="#0000FF">null</font><font color="#000000">)</font>
<font color="#000000">{</font>
instance = <font color="#0000FF">new</font> T<font color="#000000">(</font><font color="#000000">)</font>;
<font color="#000000">}</font>
<font color="#0000FF">return</font> instance;
<font color="#000000">}</font>
<font color="#000000">}</font>
<font color="#000000">}</font>

مثال از نحوه ی استفاده :

AutoFactory autoF = GenericSingleton<AutoFactory>.<font color="#2B91AF">GetInstance</font><font color="#000000">(</font><font color="#000000">)</font>;

uody
30th March 2011, 01:20 AM
چرخاندن یک تصویر با زاویه دلخواه


private Bitmap rotateImage(Bitmap b, float angle)
{
//create a new empty bitmap to hold rotated image
Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(returnBitmap);
//move rotation point to center of image
g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
//rotate
g.RotateTransform(angle);
//move image back
g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
//draw passed in image onto graphics object
g.DrawImage(b, new Point(0, 0));
return returnBitmap;
}
مثال استفاده :

private void button1_Click(object sender, EventArgs e)
{
Bitmap b = (Bitmap) pictureBox1.Image;
pictureBox2.Image = rotateImage(b, 60);
}

uody
30th March 2011, 01:50 AM
ارسال تعداد متغیر پارامتر به یک متود

با استفاده از کلمه کلیدی params مانند نمونه زیر :


<font color="#0000FF">public</font> <font color="#0000FF">int</font> Add<font color="#000000">(</font><font color="#0000FF">params</font> <font color="#0000FF">int</font><font color="#000000">[</font><font color="#000000">]</font> list<font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">int</font> sum = <font color="#FF0000">0</font>;
<font color="#0000FF">foreach</font> <font color="#000000">(</font><font color="#0000FF">int</font> i <font color="#0000FF">in</font> list<font color="#000000">)</font>
sum += i;
<font color="#0000FF">return</font> sum;
<font color="#000000">}</font>
حال میتونیم این متود را به این شکل صدا بزنیم :


<font color="#0000FF">int</font> ans1 = Add<font color="#000000">(</font><font color="#FF0000">1</font><font color="#000000">)</font>;

<font color="#0000FF">int</font> ans2 = Add<font color="#000000">(</font><font color="#FF0000">1</font>, <font color="#FF0000">2</font>, <font color="#FF0000">3</font>, <font color="#FF0000">4</font>, <font color="#FF0000">5</font>, <font color="#FF0000">6</font>, <font color="#FF0000">7</font>, <font color="#FF0000">8</font>, <font color="#FF0000">9</font>, <font color="#FF0000">10</font><font color="#000000">)</font>;

<font color="#0000FF">int</font> ans3 = Add<font color="#000000">(</font><font color="#0000FF">new</font> <font color="#0000FF">int</font><font color="#000000">[</font><font color="#000000">]</font> <font color="#000000">{</font> <font color="#FF0000">1</font>, <font color="#FF0000">2</font>, <font color="#FF0000">3</font>, <font color="#FF0000">4</font>, <font color="#FF0000">5</font>, <font color="#FF0000">6</font>, <font color="#FF0000">7</font>, <font color="#FF0000">8</font>, <font color="#FF0000">9</font>, <font color="#FF0000">10</font> <font color="#000000">}</font><font color="#000000">)</font>;

<font color="#0000FF">int</font> ans4 = Add<font color="#000000">(</font><font color="#000000">)</font>;

نکته :‌ متود میتواند چندین پارامتر دیگر غیر از پارامتر از نوع params بپذیرد اما پارامتر params حتما باید آخرین پارامتر باشد. مانند :


<font color="#0000FF">public</font> <font color="#0000FF">void</font> AddAndPrint<font color="#000000">(</font><font color="#0000FF">string</font> str, <font color="#0000FF">params</font> <font color="#0000FF">int</font><font color="#000000">[</font><font color="#000000">]</font> list<font color="#000000">)</font>
<font color="#000000">{</font>
<font color="#0000FF">int</font> sum = <font color="#FF0000">0</font>;
<font color="#0000FF">foreach</font> <font color="#000000">(</font><font color="#0000FF">int</font> i <font color="#0000FF">in</font> list<font color="#000000">)</font>
sum += i;
Console.<font color="#2B91AF">WriteLine</font><font color="#000000">(</font>str + sum<font color="#000000">)</font>;
<font color="#000000">}</font>

uody
30th March 2011, 01:55 AM
Serialize کردن باینری آبجکت در فایل

<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">IO</font>;
<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">Runtime</font>.<font color="#2b91af">Serialization</font>;
<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">Runtime</font>.<font color="#2b91af">Serialization</font>.<font color="#2b91af">Formatters</font>.<font color="#2b91af">Binary</font>;

public void SerializeObject(string filename, Object o)
{
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, o);
stream.Close();
}
منبع :‌ http://blog.paranoidferret.com/index...cts-to-a-file/

uody
30th March 2011, 01:58 AM
ایندکسرها (Indexers)

ایندکسرها نوعی از پراپرتیها هستند که به شما اجازه میدهند با اشیاء کلاس خود آرایه وار رفتار کنید.
تعریف یک ایندکسر نیز مانند تعریف یک پراپرتی است و در حالت کلی داریم :

<Modifier> <Return type> this[arguments]
{
get { }
Set { }
}
برای مثال - با فرض داشتن کلاسی مانند :

class Employee
{
private string[] name = new string[10];
<b><font color="RoyalBlue"> public string this[int index]</font></b>
{
get
{
return name[index];
}
set
{
name[index] = value;
}
}
}
میتوان نوشت :

Employee emp = new Employee();
emp[0] = "Joydip";
emp[1] = "Manashi";
emp[2] = "Jini";

نکته :
+ ایندکسرها حتما باید یک پارامتر داشته باشد.
+ ایندکسرها نمیتوانند استاتیک باشند (بعلت نیاز به this)

uody
30th March 2011, 02:00 AM
Auto Intellisense در web.config

http://www.scottgu.com/BlogPosts/webconfig/webconfig.png
نکته ای که وجود داره این است که گاهی اوقات این Intellisense دیگه کار نمی کنه. برای اینکه این مشکل حل بشه خوبه بدونین که دلیل اینه که توی فایل web.config تون در قسمت یه تکه کد اضافه شده که اونو به صورت زیر تغییر داده :

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

تنها کاری که باید انجام بدین اینه که برین و namespace مربوطه رو حذف کنین و همان configuration رو داشته باشین:

<configuration>

uody
30th March 2011, 10:58 AM
Serialize کردن object در XML

برای Serialize کردن یک object در فایل XML می تونین از این کد استفاده کنین:


XmlSerializer xmSer = new XmlSerializer(typeof(Person));
FileStream st = new FileStream("C:\\Test.xml",FileMode.OpenOrCreate);
Person p = new Person("Ali Rezaei",44);
xmSer.Serialize(st, p);
st.Close();

uody
30th March 2011, 11:21 AM
DeSerialize کردن object از XML

برای بازیابی شیء تون از یک فایل XML می تونین از این کد استفاده کنین:


XmlSerializer xmSer = new XmlSerializer(typeof(Person));
FileStream st = new FileStream("C:\\Test.xml",FileMode.Open);
Person p = xmSer.Deserialize(st) as Person;
st.Close();

uody
30th March 2011, 11:23 AM
Serialize کردن object در SOAP XML

برای Serialize کردن object تون توی فایل Soap می تونین از این کد استفاده کنین.
دقت کنین که باید System.Runtime.Serialization.Formatters.Soap رو Add Reference و using کنین.


SoapFormatter soap = new SoapFormatter();
FileStream st = new FileStream("C:\\Test.soap",FileMode.OpenOrCreate);
Person p = new Person("Ali Rezaei", 33);
soap.Serialize(st, p);
st.Close();

uody
30th March 2011, 11:24 AM
DeSerialize کردن object از SOAP XML

برای بازیابی شیء تون از یک فایل SOAP می تونین از این کد استفاده کنین:


SoapFormatter soap = new SoapFormatter();
FileStream st = new FileStream("C:\\Test.soap",FileMode.Open);
Person p = soap.Deserialize(st) as Person;
st.Close();

uody
30th March 2011, 11:25 AM
تعریف عملگر های سفارشی

class MyClass
{
private int number ;
public MyClass(int _number)
{
this.number = _number;
}
public static MyClass operator+ (MyClass c1, MyClass c2)
{
return new MyClass(c1.number + c2.number);
}
}

تعریف یک Operator overloading همیشه باید بصورت Static و Public باشد و مقدار برگشتی آن نیز نمیتواند void باشد.

uody
30th March 2011, 11:26 AM
چگونه یک کلاس را مهر وموم کنیم؟

کافی است در اعلان کلاس و بعد از Access modifier از کلمه کلیدی sealed استفاده کنیم.


<font size="2"><font color="#0000ff">public </font></font><font size="2"><font color="#0000ff">sealed </font></font><font size="2"><font color="#0000ff">class </font></font><font size="2"><font color="#008080">MyClass</font></font><font size="2">{}</font>

uody
30th March 2011, 11:33 AM
بدست آوردن شماره سریال پراسسور (CPU Id)

ابتدا System.Management رو به References پروژه بیفزایید و سپس :


using System.Management;


public string GetCPUId()
{
string cpuInfo = String.Empty;
//create an instance of the Managemnet class with the
//Win32_Processor class
ManagementClass mgmt = new ManagementClass("Win32_Processor");
//create a ManagementObjectCollection to loop through
ManagementObjectCollection objCol = mgmt.GetInstances();
//start our loop for all processors found
foreach (ManagementObject obj in objCol)
{
if (cpuInfo == String.Empty)
{
// only return cpuInfo from first CPU
cpuInfo = obj.Properties["ProcessorId"].Value.ToString();
}
}
return cpuInfo;
}

منبع : http://www.dreamincode.net/forums/in...0&#entry307855

uody
30th March 2011, 11:50 AM
DeSerialize کردن باینری آبجکت از فایل


<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">IO</font>;
<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">Runtime</font>.<font color="#2b91af">Serialization</font>;
<font color="#0000ff">using</font> <font color="#0000ff">System</font>.<font color="#2b91af">Runtime</font>.<font color="#2b91af">Serialization</font>.<font color="#2b91af">Formatters</font>.<font color="#2b91af">Binary</font>;


public object DeSerializeObject(string filename)
{
object o;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
o =
(ObjectToSerialize)bFormatter.Deserialize(stream);
stream.Close();
return o;
}

منبع :‌ http://blog.paranoidferret.com/index...cts-to-a-file/

uody
30th March 2011, 01:22 PM
بدست آوردن نام شرکت سازنده پراسسور (CPU Manufacturer)

ابتدا System.Management رو به References پروژه بیفزایید و سپس :

using System.Management;

public string GetCPUManufacturer()
{
string cpuMan = String.Empty;
//create an instance of the Managemnet class with the
//Win32_Processor class
ManagementClass mgmt = new ManagementClass("Win32_Processor");
//create a ManagementObjectCollection to loop through
ManagementObjectCollection objCol = mgmt.GetInstances();
//start our loop for all processors found
foreach (ManagementObject obj in objCol)
{
if (cpuMan == String.Empty)
{
// only return manufacturer from first CPU
cpuMan = obj.Properties["Manufacturer"].Value.ToString();
}
}
return cpuMan;
}

uody
30th March 2011, 01:24 PM
بدست آوردن میزان فضای خالی یک درایو (پارتیشن)
ابتدا System.Management رو به References پروژه بیفزایید و سپس :

using System.Management;

public double GetHDDFreeSpace(string drive)
{
//check to see if the user provided a drive letter
//if not default it to "C"
if (drive == "" || drive == null)
{
drive = "C";
}
//create our ManagementObject, passing it the drive letter to the
//DevideID using WQL
ManagementObject disk = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");
//bind our management object
disk.Get();
//return the free space amount
return Convert.ToDouble(disk["FreeSpace"]);
}

uody
30th March 2011, 04:28 PM
بدست آوردن حجم کلی یک درایو (پارتیشن)
ابتدا System.Management رو به References پروژه بیفزایید و سپس :

using System.Management;


public double getHDDSize(string drive)
{
//check to see if the user provided a drive letter
//if not default it to "C"
if (drive == "" || drive == null)
{
drive = "C";
}
//create our ManagementObject, passing it the drive letter to the
//DevideID using WQL
ManagementObject disk = new ManagementObject("Win32_LogicalDisk.DeviceID=\"" + drive + ":\"");
//bind our management object
disk.Get();
//return the HDD's initial size
return Convert.ToDouble(disk["Size"]);
}

uody
31st March 2011, 03:22 PM
چرا و کی باید از کلاس StringBuilder به جای string استفاده کنیم ؟

آبجکتهای string در دات نت immutable (غیرقابل تغییر) هستند :‌به این معنا که پس از مقدار گرفتن، دیگر قابل تغییر نیستند.

به مثال زیر دقت کنید :

string temp = "a";
temp = temp + "b";
temp += "c";
temp += "d";
در این مثال ابتدا یک آبجکت از نوع string میسازید، اما در خطوط بعدی با هر بار تغییر مقدار آن؛ آبجکتهای قدیمی فراموش و یک آبجکت جدید از نوع string - با مقدار جدید - ساخته میشود.
به این ترتیب میشه انتظار داشت که کد زیر چه سربار وحشتناکی روی منابع سیستم میتونه داشته باشه :

string s2 = new String('x', Int32.Parse(args[0]));
int loops = Int32.Parse(args[1]);

for (int j = 0; j < 10000000; j++) {
string s = "";
for (int i = loops; i > 0; --i)
s += s2;
}
بصورت کلی در حالتیکه اعمال تغییرات زیاد روی رشته ها نیاز باشد بهتر است آبجکتی از کلاس StringBuilder ساخته و با خاصیت Append آن کار کنیم.

مثال - پیاده سازی همان کد قبلی :

string s2 = new String('x', Int32.Parse(args[0]));
int loops = Int32.Parse(args[1]);

for (int j = 0; j < 10000000; j++) {
StringBuilder sb = new StringBuilder();
for (int i = loops; i > 0; --i)
sb.Append(s2);
sb.ToString();
}

منبع : http://www.heikniemi.net/hc/archives/000124.html

uody
31st March 2011, 03:24 PM
ساختن یک لیست ژنریک از اشیاء

با فرض داشتن کلاسی مانند :

public class Person
{
public Person() { }
public Person(string _firstName, string _lastName)
{
this.firstName = _firstName;
this.lastName = _lastName;
}
private string firstName;
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
private string lastName;
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
}

میتونیم بنویسیم :

List<Person> persons = new List<Person>();
persons.Add(new Person("ali", "ahmadi");
persons.Add(new Person("maryam", "hosseini");

uody
31st March 2011, 03:26 PM
ساختن لیستی از کنترلها در زمان اجرا
مثال:ساختن 10 دکمه درون یک لیست ژنریک و اختصاص آن به لیست کنترلهای یک فرم


private void Form1_Load(object sender, EventArgs e)
{
List<Button> buttons = new List<Button>();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Size = new Size(120, 22);
btn.Text = string.Format("Button{0}", i);
btn.Location = new Point(10, i * 25 + 10);
buttons.Add(btn);
}
this.Controls.AddRange(buttons.ToArray());
}

uody
31st March 2011, 03:27 PM
اختصاص دادن رویداد به کنترلهای ساخته شده در runtime

private void Form1_Load(object sender, EventArgs e)
{
List<Button> buttons = new List<Button>();
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Size = new Size(120, 22);
btn.Text = string.Format("Button{0}", i);
btn.Location = new Point(10, i * 25 + 10);
btn.Click += new EventHandler(btn_Click);
buttons.Add(btn);
}
this.Controls.AddRange(buttons.ToArray());
}

void btn_Click(object sender, EventArgs e)
{
for (int i = 0 ; i < 10 ; i++)
{
Button btn = sender as Button;
btn.Location = new Point(btn.Left + i, btn.Top);
Application.DoEvents();
}
}

uody
31st March 2011, 03:29 PM
sort کردن آبجکتهای یک کلاس با پیاده سازی اینترفیس IComparable

کلاس مورد نظر باید اینترفیس IComparable رو پیاده سازی کند. (این اینترفیس تنها یک متود CompareTo دارد)
به نحوه ی پیاده سازی متود CompareTo دقت کنید :


public class Person : IComparable
{
private string _firstname;
public string Firstname
{
get { return _firstname; }
set { _firstname = value; }
}

private string _lastname;
public string Lastname
{
get { return _lastname; }
set { _lastname = value; }
}

private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}

public Person(string firstname, string lastname, int age)
{
_firstname = firstname;
_lastname = lastname;
_age = age;
}

<b><font color="RoyalBlue"> public int CompareTo(object obj)</font></b>
<font color="RoyalBlue"><b> {</b></font>
if (obj is Person)
{
Person p2 = (Person)obj;
return _firstname.CompareTo(p2.Firstname);
}
else
throw new ArgumentException("Object is not a Person.");
<font color="RoyalBlue"><b> }</b></font>


public override string ToString()
{
return String.Format("{0} {1}, Age = {2}", _firstname,
_lastname, _age.ToString());
}
}

مثال - Sort کردن افراد از روی اسم کوچک (استفاده از کلاس بالا) :


List<Person> persons = new List<Person>();
persons.Add(new Person("Behrouz", "Rad", 30));
persons.Add(new Person("Omid", "Mottaghi Rad", 31));
persons.Add(new Person("Mehdi", "Keramati", 32));
persons.Add(new Person("Ali", "Keshavarz", 33));
persons.Add(new Person("Mohammad", "Heshemian", 34));
persons.Add(new Person("Farhad", "XXX", 35));

//Before Sorting
listBox1.Items.AddRange(persons.ToArray());

//ُSorting List
persons.Sort();

//Sorted List
listBox2.Items.AddRange(persons.ToArray());

uody
31st March 2011, 03:45 PM
فراخوانی یک متد با یک Thread‌جداگانه

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


using System.Threading;



فرض کنیم این متد رو داریم :

void DoSomething()
{
...
}


تعریف Thread جدید برای متد مورد نظر :

Thread myThread = new Thread(new ThreadStart(this.DoSomthing));



فراخوانی متد با استفاده از متد تعریف شده‌:


myThread.Start();



برای متوقف کردن Thread‌ایجاد شده :


myThread.Abort();

نکته :‌
هر Thread‌فقط میتواند با object هایی کار کند که خودش آنها را ایجاد کرده است. مثلا اگر در متد DoSomething‌شما بخواهید با یک label که روی فرم است کار کنید cross-thread exception رخ خواهد داد چون آن label بوسیله Thread‌اصلی برنامه ایجاد شده است.

uody
31st March 2011, 03:47 PM
نوشتن یک Event برای تعدادی کنترل و انجام کار مشابه بر روی انها

ممکنه توی فرمتون تعداد زیادی TextBox باشه و بخوایید هر بار که اون فوکوس میشه متن داخلش انتخاب بشه تا اگه کاربر بخواد اون رو عوض کنه نیازی به Del و BackSpace نداشته باشه (و یا اعمال دیگر )
میشه برای هر TextBox یه Event نوشت و اون کار رو انجام بدید
حالا اگه تعداد textBox ها زیاد باشه برای هر کنترل یک Event
میشه برای همه اونهایک Event نوشت تا اینکار رو برای همه اونها انجام بده :
اول باید همه TextBox هایی رو که می خوایید انتخاب کنین بعد یه Event براشون بزارین تا همشون از یه Event استفاده کنند بعد این کد رو داخل اون Event می گذارید


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

uody
31st March 2011, 03:54 PM
اصلاح تورفتگی های پیشفرض محیط ادیتور

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

میشه با این کلید ها هم انجام داد Ctrl+E,D
با این روش کل کد مرتب میشه
از Edit هم قابل دسترسی است :

Edit > Advanced > Format Document

uody
31st March 2011, 03:55 PM
به دست آوردن مقدار یک Enum از عدد متناظر آن


<font size="2"><font color="#0000ff">public </font></font><font size="2"><font color="#0000ff">enum </font></font><font size="2"><font color="#2b91af">Days</font></font><font size="2"> { Sat = 1, Sun, Mon, Tue, Wed, Thu, Fri };</font>
<font size="2"><font color="#0000ff">string</font></font><font size="2"> s= </font><font size="2"><font color="#2b91af">Enum</font></font><font size="2">.GetName(</font><font size="2"><font color="#0000ff">typeof</font></font><font size="2">(</font><font size="2"><font color="#2b91af">Days</font></font><font size="2">),4);</font>

uody
31st March 2011, 03:56 PM
فقط یک نمونه از برنامه بتواند اجرا شود (با استفاده از Mutex)

using System.Threading;
متود Main از کلاس StartUp پروژه رو به این شکل تغییر بدید :

[STAThread]
static void Main()
{
bool ok;
Mutex m = new Mutex(true, "YourNameHere", out ok);
if (! ok)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1()); // or whatever was there
GC.KeepAlive(m); // important!
}

uody
6th April 2011, 08:30 AM
کار با اشیاء بوسیله ی نام آنها (با کمک از Reflection)

مثال - نمایش یک فرم با دانستن نام آن :
(این مثال کاربردهای زیادی میتواند داشته باشد، فرض کنید که نام فرمهای مورد نیاز برای کاربردی خاص رو در یک جدول دیتابیس ذخیره کرده اید)

using System.Reflection;


private void button1_Click(object sender, EventArgs e)
{
Assembly myAssembly = Assembly.GetExecutingAssembly();
Form myForm =
myAssembly.CreateInstance("<b>WindowsFormsApplication1.Form2</b>") as Form;
myForm.ShowDialog();
}

نکته : حتما نام NameSpace را قبل از نام آبجکت قرار دهید؛ در مثال بالا "WindowsFormsApplication1" بود.

uody
6th April 2011, 08:32 AM
کار کردن با کلاس EventLog

از این کلاس معمولا جهت Log کردن عملیات یک برنامه استفاده میشود.
(برای مشاهده آن به Event Viewer ویندوز مراجعه نمایید)


using System.Diagnostics;


// Create the source, if it does not already exist.
if(!EventLog.SourceExists("MySource"))
{
//An event log source should not be created and immediately used.
//There is a latency time to enable the source, it should be created
//prior to executing the application that uses the source.
//Execute this sample a second time to use the new source.
EventLog.CreateEventSource("MySource", "MyNewLog");
Console.WriteLine("CreatedEventSource");
Console.WriteLine("Exiting, execute the application a second time to use the source.");
// The source is created. Exit the application to allow it to be registered.
return;
}

// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";

// Write an informational entry to the event log.
myLog.WriteEntry("Writing to event log.");

منبع : http://msdn2.microsoft.com/en-us/lib....eventlog.aspx

uody
6th April 2011, 08:34 AM
بدست آوردن جزییات اطلاعات در مورد یک پروسه در حال اجرا


using System.Diagnostics;


Process myProcess = new Process();
// Get the process start information of notepad.
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("notepad.exe");
// Assign 'StartInfo' of notepad to 'StartInfo' of 'myProcess' object.
myProcess.StartInfo = myProcessStartInfo;
// Create a notepad.
myProcess.Start();
System.Threading.Thread.Sleep(1000);
ProcessModule myProcessModule;
// Get all the modules associated with 'myProcess'.
ProcessModuleCollection myProcessModuleCollection = myProcess.Modules;
Console.WriteLine("Properties of the modules associated "
+"with 'notepad' are:");
// Display the properties of each of the modules.
for( int i=0;i<myProcessModuleCollection.Count;i++)
{
myProcessModule = myProcessModuleCollection[i];
Console.WriteLine("The moduleName is "
+myProcessModule.ModuleName);
Console.WriteLine("The " +myProcessModule.ModuleName + "'s base address is: "
+myProcessModule.BaseAddress);
Console.WriteLine("The " +myProcessModule.ModuleName + "'s Entry point address is: "
+myProcessModule.EntryPointAddress);
Console.WriteLine("The " +myProcessModule.ModuleName + "'s File name is: "
+myProcessModule.FileName);
}
// Get the main module associated with 'myProcess'.
myProcessModule = myProcess.MainModule;
// Display the properties of the main module.
Console.WriteLine("The process's main moduleName is: "
+myProcessModule.ModuleName);
Console.WriteLine("The process's main module's base address is: "
+myProcessModule.BaseAddress);
Console.WriteLine("The process's main module's Entry point address is: "
+myProcessModule.EntryPointAddress);
Console.WriteLine("The process's main module's File name is: "
+myProcessModule.FileName);
myProcess.CloseMainWindow();

uody
6th April 2011, 08:40 AM
افزودن یک زیرمنو و دستور دلخواه به context menu ویندوز اکسپلورر


private void btnAddMenu_Click(object sender, System.EventArgs e)
{
RegistryKey regmenu = null;
RegistryKey regcmd = null;
try
{
regmenu = Registry.ClassesRoot.CreateSubKey(MenuName);
if(regmenu != null)
regmenu.SetValue("",this.txtName.Text);
regcmd = Registry.ClassesRoot.CreateSubKey(Command);
if(regcmd != null)
regcmd.SetValue("",this.txtPath.Text);
}
catch(Exception ex)
{
MessageBox.Show(this,ex.ToString());
}
finally
{
if(regmenu != null)
regmenu.Close();
if(regcmd != null)
regcmd.Close();
}
}

منبع : http://www.codeproject.com/KB/cs/app...spx?obid=10104

uody
6th April 2011, 08:42 AM
آغاز کار با کلاس Clipboard و دادن و گرفتن یک رشته متنی به/از آن


//clear clipboard
Clipboard.Clear();

//Set Text to clipboard
if (!string.IsNullOrEmpty(textBox1.Text))
Clipboard.SetText(textBox1.Text);

//Get text from clipboard
MessageBox.Show(Clipboard.GetText());

uody
6th April 2011, 08:49 AM
Hash کردن یک رشته متنی با الگوریتم MD5


using System.Security.Cryptography;


private string encryptString(string strToEncrypt)
{
UTF8Encoding ue = new UTF8Encoding();
byte[] bytes = ue.GetBytes(strToEncrypt);

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] hashBytes = md5.ComputeHash(bytes);

// Bytes to string
return System.Text.RegularExpressions.Regex.Replace
(BitConverter.ToString(hashBytes), "-", "").ToLower();
}

یک مثال ساده از نحوه ی استفاده :


MessageBox.Show(encryptString("Sinpin"));

خروجی :

e140088b10c4f19588ed3624e2b3c463

uody
6th April 2011, 09:16 AM
انجام عملیات ساده بر روی کنترل Treeview

افزودن node ریشه و سپس nodeهای فرزند


<font size="2">treeView1.Nodes.Clear();</font>
<font size="2">treeView1.Nodes.Add(</font><font size="2"><font color="#800000">"World"</font></font><font size="2">);</font>
<font size="2"><font color="#008080">TreeNode</font></font><font size="2">[] parents={</font><font size="2"><font color="#0000ff">new</font></font><font size="2"><font color="#008080">TreeNode</font></font><font size="2">(</font><font size="2"><font color="#800000">"Asia"</font></font><font size="2">),</font><font size="2"><font color="#0000ff">new</font></font><font size="2"><font color="#008080">TreeNode</font></font><font size="2">(</font><font size="2"><font color="#800000">"Europ"</font></font><font size="2">),</font><font size="2"><font color="#0000ff">new</font></font><font size="2"><font color="#008080">TreeNode</font></font><font size="2">(</font><font size="2"><font color="#800000">"Africa"</font></font><font size="2">),</font><font size="2"><font color="#0000ff">new</font></font><font size="2"><font color="#008080">TreeNode</font></font><font size="2">(</font><font size="2"><font color="#800000">"Australia"</font></font><font size="2">),</font><font size="2"><font color="#0000ff">new</font></font><font size="2"><font color="#008080">TreeNode</font></font><font size="2">(</font><font size="2"><font color="#800000">"Amercia"</font></font><font size="2">)};</font>
<font size="2">treeView1.Nodes[0].Nodes.AddRange(parents);</font>

حذف node مورد نظر

<font size="2">treeView1.SelectedNode.Remove();</font>

نمایش contextmenu بر روی node انتخاب شده

در رویداد Treeview, NodeMouseClick این کد را مینویسیم

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
treeView1.SelectedNode = e.Node;
e.Node.ContextMenuStrip = cmsCommand;
}
}

uody
7th April 2011, 12:26 AM
ارسال متغیر به صفحه بعد با استفاده از url

نحوه ارسال به صفحه بعد

<font size="2">Response.Redirect(</font><font size="2"><font color="#800000">"form2.aspx?کلمه دلخواه="</font></font><font size="2"> + </font><font size="2"><font color="#008080">Convert</font></font><font size="2">.ToString(</font><font size="2"><font color="#800000">"متغیر"</font></font><font size="2">));</font>

نحوه استفاده از ان در صفحه دوم


<div align="left"><font size="2"><font color="#0000ff">string</font></font><font size="2"> str = Request.QueryString.Get(</font><font size="2"><font color="#800000">"متغیر"</font></font><font size="2">);</font></div>

uody
7th April 2011, 12:30 AM
کار با کنترل های تولید شده توسط یک Thread‌از طریق Thread ی دیگر

فرض کنیم یک تابع داریم که کاری بر روی یک Label‌ انجام میدهد.
میخواهیم این تابع را با استفاده از یک Thread‌دیگر فراخوانی کنیم. دقت کنید که Label توسط thread‌اصلی برنامه ایجاد شده و نمیتوان بصورت عادی به آن دسترسی داشت و با cross-thread exception‌مواجه میشویم.

برای این کار طبق روش زیر میتوان عمل کرد

using System.Threading;



thread‌ی که برای تابع مورد نظر تعریف میکنیم

Thread t = new Thread(new ThreadStart(this.DoSomeThing));



برای تعریف تابع مورد نظر باید به نکات زیر توجه داشته باشیم:

- زمانی که کنترل مورد نظر ما (در اینجا label‌) دارای مقدارtrue ‌برای خاصیت InvokeRequired باشد ما باید تابع خود را بصورت cross-thread‌ فراخوانی کنیم. برای اینکار از متد Invoke استفاده میکنیم که یک Delegate به عنوان پارامتر میگیرد و آنرا بصورت cross-thread‌ فراخوانی میکند.

- زمانیکه کنترل مورد نظر دارای مقدار false برای خاصیت InvokeRequired‌خود باشد میتوانیم کارهای مورد نظرمان را بر روی آن انجام دهیم.

پس ما باید در ابتدا delegate‌ی به متد مورد نظرمان تعریف کنیم و با استفاده از آن و به شکل زیر متد خود را تعریف میکنیم :


void DoSomeThing()
{
if(label.InvokeRequired)
{
delegate void myDelegate();
myDelegate del = new myDelegate(this.DoSomeThing);
Invokde(del);
}
else
//something to do on label here
}

uody
11th April 2011, 05:27 PM
معرفی چند سایت جهت تبدیل کدهای #C و VB.net به یکدیگر


http://www.carlosag.net/images/codeTranslatorLogo.gif

با استفاده از web application های معرفی شده ی زیر میتوانید بصورت آنلاین تیکه کدهای خود را از سی شارپ به ویبی دات نت و بلعکس تبدیل کنید.
این لیست به مرور تکمیلتر خواهد شد:


http://labs.developerfusion.co.uk/co...arp-to-vb.aspx

http://www.carlosag.net/Tools/CodeTr...r/Default.aspx

http://www.kamalpatel.net/ConvertCSharp2VB.aspx

http://authors.aspalliance.com/aldot...translate.aspx

uody
11th April 2011, 05:29 PM
معرفی یک Object Browser آنلاین


از طریق این برنامه میتوانید ضمن پرسه زدن در اسمبلی و اکسپلور کردن کلاسهای مورد نظر سورس کد اونها رو هم ببینید.
برای مثال قسمتی از خروجی این برنامه برای کلاس ArrayList رو مشاهده میکنید :


// Implements a variable-size List that uses an array of objects to store the
// elements. A ArrayList has a capacity, which is the allocated length
// of the internal array. As elements are added to a ArrayList, the capacity
// of the ArrayList is automatically increased as required by reallocating the
// internal array.
//
[DebuggerTypeProxy(typeof(System.Collections.ArrayL ist.ArrayListDebugView))]
[DebuggerDisplay("Count = {Count}")]
[Serializable()]
[System.Runtime.InteropServices.ComVisible(true)]
public class ArrayList : IList, ICloneable
{
private object[] _items;
private int _size;
private int _version;
[NonSerialized()]
private object _syncRoot;
private const int _defaultCapacity = 4;
private static readonly object[] emptyArray = new object[0];

// Note: this constructor is a bogus constructor that does nothing
// and is for use only with SyncArrayList.
internal ArrayList(bool trash)
{
}

// Constructs a ArrayList. The list is initially empty and has a capacity
// of zero. Upon adding the first element to the list the capacity is
// increased to _defaultCapacity, and then increased in multiples of
// two as required.
public ArrayList()
{
_items = emptyArray;
}
.
.
.

uody
11th April 2011, 05:31 PM
نحوه استفاده کاراکترهای خاص (مثلا علامت کپی رایت)
می تونین با قرار دادن کد هگزای مربوط کاراکتر مورد نظر خود پس از "X\" آن کاراکتر را در هر متغیر رشته ای نشان دهید.
به عنوان مثال کد هگز مربوط به کاراکتر کپی رایت A9 می باشد.
چس اگر شما دستوری مانند زیر در برانامه داشته باشید1

MessageBox.Show("<font color="Red">\xA9</font> by barnamenevis.org 2003-2008");

uody
11th April 2011, 05:32 PM
نحوه ی ایجاد و تخصیص ToolTip در زمان اجرا


private void Form1_Load(object sender, EventArgs e)
{
ToolTip toolTip = new ToolTip();
toolTip.SetToolTip(button1, "Salam");
}

uody
11th April 2011, 05:35 PM
Abstract Class در مقابل Interface
در حالیکه ممکن است بین یک Abstract Class (کلاس مجرد) و یک اینترفیس تشابهات زیادی وجود بنظر برسد اما تفاوتهای بین آن دو بیشتر است.

تفاوتها و اینکه کجا بهتر است از کدام استفاده کنیم :
کلاس مجرد یکی از انواع کلاس است اما اینترفیس یک کلاس نیست.
اینترفیس یک قرارداد را مشخص میکند اما کلاس مجرد ناتمام ماندن تعریف یک کلاس را.
یک اینترفیس به هیچ عنوان نمیتواند شامل پیاده سازی درون خود باشد اما یک کلاس مجرد میتواند شامل پیاده سازیهای پیشفرض باشد (اعضایی داشته باشد که بصورت کامل و یا پیشفرض پیاده سازی شده اند)
یک کلاس میتواند چندین اینترفیس را پیاده سازی کند اما تنها میتواند از یک کلاس مجرد به ارث رود.
بصورت پیشفرض اعضای یک اینترفیس تماما public هستند و نمیتوان برای آنها access modifier انتخاب کرد در حالیکه در یک کلاس مجرد ممکن است.
یک کلاس مجرد میتواند شامل فیلد، constructor، destructor و مقادیر ثابت باشد درحالیکه یک اینترفیس نمیتواند.
بصورت کلی کار کردن با یک کلاس مجرد سریعتر از یک اینترفیس است.
اینترفیسها برای نشان دادن قابلیتهای جانبی یک کلاس بکار میروند (مثلا چون هم انسان و هم اتومبیل حرکت میکنند هر دو میتوانند اینترفیس IMovable رو پیاده سازی کنند) درحالیکه یک کلاس مجرد خواص و رفتارهای اصلی یک کلاس را مشخص میکند.
مورد قبلی بصورت خلاصه میشود : یک اینترفیس اغلب برای رابطه هایی مانند can-do و یا able-to استفاده میشود در حالیکه یک کلاس مجرد برای رابطه هایی از نوع : is-a
اگر برای مثال یک متود را به یک اینترفیس اضافه کنیم باید تمامی جاهاییکه آن اینترفیس پیاده سازی شده را دنبال و متود مورد نظر را در آنجا پیاده سازی کنیم در حالیکه اگر از یک کلاس مجرد استفاده کنیم میتوانیم در همانجا متود را با پیاده سازی پیشفرض تعریف کنیم تا به مشکل برنخوریم.
برای ایجاد خواص و رفتارهای مشابه روی مجموعه های بزرگ و نامرتبط از موجودات بهتر است از اینترفیس کمک بگیریم. یک کلاس مجرد تنها برای دسته بندی موجودات مرتبط بکار میرود.
... ادامه دارد
توجه : برخی از موارد بالا ممکن است کاملا معنای یکسانی داشته باشند و تنها در ساختار جمله بندی و یا زاویه ی نگرش تفاوت داشته باشند.

uody
12th April 2011, 03:06 PM
پخش فایلهای صوتی و ویدیویی با کمک winmm.dll


using System.Runtime.InteropServices;


string CommandString;
OpenFileDialog file = new OpenFileDialog();

[DllImport("winmm.dll")]
private static extern long mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);

private void button1_Click(object sender, System.EventArgs e)
{
if (file.ShowDialog() == DialogResult.OK)
{
CommandString = "open " + "\"" + file.FileName + "\"" + " type MPEGVideo alias MediaFile";
mciSendString(CommandString, null, 0, 0);
CommandString = "play MediaFile";
mciSendString(CommandString, null, 0, 0);
}
}

uody
12th April 2011, 03:08 PM
property چیست و چرا از آن استفاده می کنیم؟
یک property متشکل از 2 متود set,get است که برای دریافت و یا تخصیص مقادیر به متغیر ها استفاده می شوند .از معایب تعریف متغیرهای کلاس به صورت Public اینست که هر موجودی از بیرون کلاس می تواند دسترسی مستقیمی به آن داشته باشد و براحتی آن را دستکاری کند و در ضمن هیچ گونه عمل validation بر روی مقادیر متغیر ها صورت نمیگیرد ,که این با اصول صحیح oop منافات دارد .
دلایل استفاده از property به جای یک متغیر:
1-رعایت اصل encapsulation
2-امکان بازرسی و validation


public class Circle
{
private double radius;
public double Radius
{
get
{
return radius;
}
set
{
if (value>0 && value<50)
radius = value;

}
}
public double GetArea()
{
return radius * radius * 3.14;
}

}

uody
12th April 2011, 03:11 PM
گرفتن یک فایل از طریق دیالوگ OpenFileDialog و دستکاری نام فایل


using System.IO;


OpenFileDialog openFile = new OpenFileDialog();
if (openFile.ShowDialog() != DialogResult.OK)
return;

// get filename from OpenFileDialog
string fileName = openFile.FileName;

// get only filename without extension and path
string onlyname = Path.GetFileNameWithoutExtension(fileName);

// get extension of filename
string extension = Path.GetExtension(fileName);

// get directory of specific filename
string directory = Path.GetDirectoryName(fileName);

// change the extension of specific filename
string newFileName = Path.ChangeExtension(fileName, "bmp");

// get the root partition of specific file
string root = Path.GetPathRoot(fileName);

nreking
10th July 2011, 01:53 PM
اگه بخوای کم کم محو بشه باید چکار کنیم؟

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد