PDA

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



sorna
06-20-2011, 12:44 PM
هدف از این تاپیک، صرفا جمع آوری برخي نکات و ترفندهای خلاصه و مفید برنامه نویسی در سی شارپ تحت دات نت فریمورک است. بدلیل تنوع کاربران تالار و گستردگی زبان و فریمورک؛ لزومی ندارد نکته ای که در اين تاپيك ارسال ميشود موضوعی غامض و چشمگیر باشد؛ در واقع هر نکته ای که به شکل صحیح ارسال شود، میتواند مفید باشد. لطفا قبل از ارسال هر نكته - با مراجعه به ليست نكات - از تكراري نبودن آن اطمينان حاصل نماييد.
ماهيت تاپيك


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

زبان پیشفرض

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

چکیده نویسی
نکات و ترفندها رو بصورت کاملا خلاصه، مفید و ماژولار (تمرکز هر پست تنها روی یک نکته باشد) ارسال نمایید و از درج هرگونه نکته ی طولانی خودداری و چنانچه نکته ی قابل توجه ای سراغ دارید که نیاز به کدنویسی و توضیحات طولانی دارد؛ تنها به یک اشاره کوچک بسنده و فایل سورس و یا توضیحات کامل را ضمیمه فرمایید.
درج عنوان پست




عنوان مناسب و مختصری برای مطلب ارسالی خود پیدا کرده و آن را در قسمت عنوان پست بنویسید.
عنوان پست را دقیق و قطعی انتخاب نمایید؛ برای مثال عنوان : "چند نکته مهم در سی شارپ" نامناسب است و یا بجای عنوان : "چند فیلم آموزشی مفید" بهتر است بنویسید : "معرفی لینک دانلود چند فیلم آموزشی رايگان در مورد linq"


درج رفرنس اصلی و نكات تست شده

چنانچه نکته ارسالی را از منبعی برداشت میکنید لطفا لینک اصلی آن را نیز در انتهای مطلب درج فرمایید. (با اینکار سایر دوستان نیز میتوانند با مراجعه به لینک از جزییات نکته ارسالی بیشتر مطلع گردند.) و تنها نکات و مطالبی رو ارسال کنید که خود شما تست کرده و از صحت عملکرد اونها مطمئن هستید.

sorna
06-20-2011, 12:44 PM
حاشیه دار کردن کنترل 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 و رسم یک مستطیل امکانپذیر نیست.

sorna
06-20-2011, 12:45 PM
حو شدن تدریجی یک فرم با تغییر دادن خاصیت Opacity کد:

private void button1_Click(object sender, EventArgs e)
{
this.Opacity = 1;
for (int i = 0; i < 100; i++)
{
this.Opacity -= 0.01;
Application.DoEvents();
}
}
this به آبجکت فعلی از فرم اشاره دارد.

sorna
06-20-2011, 12:45 PM
نتقال آیتمهای یک آرایه از اعداد به یک لیست باکس کد:
[HTML]int[] numbers = { 12, 23, 34, 45, 56, 67 };
Object[] oNumbers = new Object[numbers.Length];
numbers.CopyTo(oNumbers, 0);
listBox1.Items.AddRange(oNumbers);[/HTML

sorna
06-20-2011, 12:45 PM
پیاده سازی حالت ساده ی الگوی سینگلتون در یک کلاس


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;
}
}

sorna
06-20-2011, 12:46 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);
}