-
1 ضمیمه
آموزش کار کردن با BackgroundWorker بصورت آسان و قدم به قدم
این آموزش همراه با یک مثال انجام میشود.
(توجه : در بهینه نبودن این مثال شک نداشته باشید چون فی البداهه و صرف آموزش نوشته شده است)
مثال - میخواهیم تمامی فایلهای موجود در پوشه ی ویندوز را توسط یک thread پشت زمینه (مستقل از UI Thread) در یک لیست باکس نمایش دهیم.
بلافاصله و بدون مقدمه؛ ابتدا یک آبجکت از نوع BackgroundWorker بسازید و در زمان کلیک شدن یک دکمه مقادیر آن را به شکل زیر تغییر دهید :
BackgroundWorker worker = new BackgroundWorker();
private void button1_Click(object sender, EventArgs e)
{
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged );
worker.RunWorkerAsync(new DirectoryInfo(@"C:\Windows"));
}
خط آبی شده حاکی از آن است که worker میتواند در زمان اجرا میزان پیشرفت خود را گزارش کند(که باعث توانایی کار کردن با عناصر UI بصورت مستقیم و بدون استفاده از delegate میشود)
سپس ایونت هندلرها رو تخصیص داده
و در خط آخر نیز دستور اجرای آسنکرون اون رو با یک پارامتر ورودی را صادر کردیم.
کار زمانبری که میخواهیم در پشت زمینه انجام شود را در رویداد DoWork مینویسیم و این همان رویدادی ست که با دستور worker.RunWorkerAsync در تیکه کد قبلی تحریک میشود :
void worker_DoWork(object sender, DoWorkEventArgs e)
{
DirectoryInfo primaryDir = e.Argument as DirectoryInfo;
int i = 0;
foreach (DirectoryInfo dir in primaryDir.GetDirectories())
{
foreach (FileInfo file in dir.GetFiles())
{
worker.ReportProgress(i++, file.FullName);
}
}
}
همانطور که مشاهده کردید در خط اول متود بالا پارامتر ورودی را در قالب یک DirectoryInfo در آوردیم که بتوانیم از آن استفاده کنیم.
و به ازای هر فایل شناخته شده (البته در عمل : بهتر است اینکار مثلا به ازای هر 100 فایل پیدا شده انجام شود) یک گزارش از میزان پیشرفت همراه با پارامترهای شماره فایل و نام آن میفرستیم.
و در نهایت برای منعکس کردن پیشرفتهای لحظه ای و اختصاص آنها به لیست باکس مینویسیم:
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
listBox1.Items.Add(e.ProgressPercentage.ToString() + " : " + e.UserState.ToString());
}
توجه کنید که در کد بالا مقدار e.UserState همان آبجکتی است که در زمان DoWork ارسال کردید.
-
1 ضمیمه
ترسیم و نوشتن مستقیم بر دسکتاپ ویندوز
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
[DllImport("user32")]
internal static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("User32.dll")]
internal static extern void ReleaseDC(IntPtr dc);
public void PaintRectangleToScreen()
{
IntPtr deskDC = GetDC(IntPtr.Zero);
Graphics g = Graphics.FromHdc(deskDC);
Font font = new Font("Arial Black", 36);
DrawStringOnCenter(g, "Sale 1387 mobarak!", font, new Point(0, -25));
font = new Font("Arial Black", 18);
DrawStringOnCenter(g, "by: Sinpin", font, new Point(0, 25));
Rectangle rect = new Rectangle(200, 300,
Screen.PrimaryScreen.Bounds.Width - 400,
Screen.PrimaryScreen.Bounds.Height - 600);
g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.DodgerBlue))
, rect);
g.DrawRectangle(new Pen(Color.DodgerBlue, 3), rect);
g.Dispose();
ReleaseDC(deskDC);
}
private void DrawStringOnCenter(Graphics g, string str, Font font, Point offset)
{
SizeF size = g.MeasureString(str, font);
g.DrawString(str, font, Brushes.White,
new PointF(
(Screen.PrimaryScreen.Bounds.Width - size.Width) / 2 + offset.X,
(Screen.PrimaryScreen.Bounds.Height - size.Height) / 2 + offset.Y)
);
}
و مثالی از طریقه ی استفاده :
private void Form1_Load(object sender, EventArgs e)
{
PaintRectangleToScreen();
this.Close();
}
این یک مثال خیلی ساده از ترسیم مستقیم بر دسکتاپ بود.
و این یک مثال واقعی تر : http://www.codeproject.com/KB/applications/pcalgen.aspx
-
آموزش ساخت یک user control برای login و پیاده سازی ایونتهای مرتبط
-
آشنایی با الگوهای طراحی : Decorator Pattern
این pattern در طبقه بندی الگوهای ساختاری جای دارد و امکان افزودن قابلیتها و تزیینات جدید به یک آبجکت را بصورت داینامیک و در زمان اجرا ممکن میکند.
این امکان بوسیله ی افزودن یک کلاس جدید (decorator) ممکن میشود که کلاس اصلی را wrap میکند. این wrapping معمولا با پاس دادن آبجکت اصلی بعنوان یک پارامتر به constructor decorator انجام میشود.
Decorator قابلیتهای جدید را در آبجکت پیاده سازی میکند و باید همان اینترفیسی را که کلاس اصلی پیاده سازی میکند، پیاده سازی کند.
در زمان اجرا میتوان به یک آبجکت هم decorator افزود و هم کاست بدون آنکه مصرف کننده متوجه تغییرات گردد.
Decorating در واقع بعنوان روش جایگزین subclassing (با انعطاف بیشتر) جهت توسعه قابلیتهاست با این تفاوت که :- Subclassing رفتارهای جدیدی را در زمان کامپایل(compile-time) اضافه میکند در حالیکه decorating میتونه رفتارهای جدیدی را در زمان اجرا(runtime) اضافه نماید.
- با decorating میتوانیم یک قابلیت را تنها به یک آبجکت خاص از یک کلاس بدهیم بدون آنکه سایر آبجکتهای آن کلاس تغییر کنند.
گاه در خیلی از مسایل بظاهر مشکل که صدها کلاس مشتق شده با روابطی پیچیده دارند؛ با پیاده سازی این الگو به یک طراحی آسان و خوانا خواهیم رسید.
یک مثال قابل دانلود :
http://www.codeproject.com/KB/archit...Decorator.aspx
منابع :
http://www.dofactory.com/Patterns/PatternDecorator.aspx
http://www.informit.com/articles/article.aspx?p=31350
http://en.wikipedia.org/wiki/Decorator_pattern
-
آشنایی با الگوهای طراحی : Singleton Pattern
Singleton Pattern
هدف : میخواهیم تضمین کنیم که از یک کلاس تنها بتوان یک آبجکت (حالت ساده و متعارف سینگلتون) ایجاد کرد و همه ی درخواستها نیز تنها به همان یک آبجکت هدایت شوند و نیز بتوان یک دسترسی عمومی به آن داشت.
اولین قدم : سازنده ی کلاس را private میکنیم
چرا private ؟ - پاسخ : تا هیچکسی نتواند از کلاس آبجکت بسازد.
دومین قدم : یک فیلد استاتیک از نوع خود کلاس تعریف میکنیم.
چرا استاتیک : چون قرار است در یک متود استاتیک از آن استفاده کنیم.
چرا private : چون قرار است امکان دسترسی به این آبجکت از طریق یک متود یا پراپرتی صورت گیرد و دسترسی مستقیم مطلوب نیست.
سومین قدم : ایجاد یک پراپرتی یا متود public و استاتیک که فیلد را برمیگرداند.
چرا public ؟ چون میخواهیم از همه جا قابل دسترسی باشد.
چرا استاتیک ؟ چون آبجکتی از کلاس ندارم و ناچارا باید دسترسی به این متود یا پراپرتی در سطح کلاس باشد.
پس تا اینجا داریم :
public sealed class Singleton
{
// Private Constructor
Singleton() { }
// Private object instantiated with private constructor
static readonly Singleton instance = new Singleton();
// Public static property to get the object
public static Singleton UniqueInstance
{
get { return instance; }
}
}
معمولا بهتر است این پیاده سازی بصورت lazy instantiation باشد (یعنی تا قبل از اولین invoking آبجکت مقداردهی اولیه نشود) :
public class Singleton
{
// Private constructor
Singleton() { }
// Nested class for lazy instantiation
class SingletonCreator
{
static SingletonCreator() { }
// Private object instantiated with private constructor
internal static readonly
Singleton uniqueInstance = new Singleton();
}
// Public static property to get the object
public static Singleton UniqueInstance
{
get { return SingletonCreator.uniqueInstance; }
}
}
این الگو به شدت در طراحیهای مختلف و الگوهای دیگر (مانند : Abstract Factory, Façade , ...) مورد استفاده دارد.
____________________________
کدها از کتاب : http://www.oreilly.com/catalog/9780596527730
منابع :
http://en.wikipedia.org/wiki/Singleton_pattern
http://www.dofactory.com/Patterns/PatternSingleton.aspx
-
تبدیل اتوماتیک دکمه Enter به Tab جهت انتقال فوکوس در کنترلها
- این پست جابجا شد -
این کد را در کلاس مربوط به کنترل TextBox خود بنویسید :
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Return)
SendKeys.Send("{TAB}");
return base.ProcessDialogKey(keyData);
}
و در مورد استفاده در کنترلهای استاندارد :
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
SendKeys.Send("{TAB}");
}
-
تعدادی کد اعتبارسنجی(Validation) برای TextBox
TextBox عددی
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsDigit( e.KeyChar ) || char.IsControl( e.KeyChar ) ) )
{
e.Handled = true;
}
}
TextBox عددی با اعشار
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsDigit( e.KeyChar) || char.IsControl( e.KeyChar ) ||(e.KeyChar== (char )46)) )
{
e.Handled = true;
}
}
TextBox فقط کاراکنری
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsLetter( e.KeyChar ) || char.IsControl( e.KeyChar ) ) )
{
e.Handled = true;
}
}
TextBox برای فقط حروف بزرگ
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsUpper( e.KeyChar ) || char.IsControl( e.KeyChar )) )
{
e.Handled = true;
}
}
TextBox برای فقط حروف کوچک
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsLower( e.KeyChar ) || char.IsControl( e.KeyChar )) )
{
e.Handled = true;
}
}
چک کردن TextBoxهای خالی (میتوانید کلیه TextBox های روی فرمتان را به آن ارسال کنید )
public static bool ChkEmpty(params System.Windows.Forms.TextBox[ ] tb) { int i; for (i = 0; i < tb.Length; i++)
{
if (tb[i].Text.Trim() == "")
{
MessageBox.Show("Don't keep field empty");
tb[i].Focus();
return false;
}
return true;
}
TextBox اعشاری(با علامت اعشار مربوط به هر منطقه)
string DecimalSeparator = Thread.CurrentThread.CurrentCulture.NumberFormat.N umberDecimalSeparator;
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ( !( char.IsDigit( e.KeyChar) || char.IsControl( e.KeyChar ) || (DecimalSeparator.IndexOf(e.KeyChar) != -1 ) ) )
{
e.Handled = true;
}
}
منبع : مقداری CodeProject
-
ساختن Connection String به روشی بسیار ساده
برای ساخت یک Connection String بدون نیاز به Visual Studio ، به روش زیر عمل میکنیم:- یک فایل جدید ایجاد کرده و پسوند آنرا به "udl" تغییر میدهیم. (مثلا یک فایل متنی که می شود New Text file.udl)
- میبینید که آیکون آن تغییر کرد :متفکر:
- آنرا باز کنید. پنجره مشخصات Data Link باز میشود
- برای ایجاد Connection String برای SQL گزینه Microsoft OLE DB Provider For SQL Server را از لبه Provider انتخاب کنید
- دکمه Next را زده و یا به لبه Connection بروید
- از این قسمت تمامی مشخصههای ارتباط را میتوانید تعیین کنید
- بعد از مشخص کردن تمامی پارامترهای مورد نیاز دکمه Test Connection را برای اطمینان از درستی آن بزنید. اگر همه چیز درست است پنجرا را ببندید
- حال فایلی که ابتدا ایجاد کردید را با Notepad باز کنید.
Connection String درون فایل ایجاد شده است.(البته این ارتباط برای OLE DB است که می توانید این قسمت را حذف کنید)
اگر از User و Password استفاده میکنید، تیک Allow Saving Password را بزنید تا پسورد در فایل ذخیره شود.
منبع : CodeProject
-
اطلاعاتی در مورد موس
شاید نیاز داشته باشید بفهمید کاربر از موس استفاده میکند یا نه؛ و در صورتی که استفاده میکند اطلاعاتی از موس(تعداد دکمه، Wheel)
این اطلاعات و یا سایر اطلاعاتی را که از سیستم کاربر میخواهید میتوانید در کلاس Enviroment بیابید.
SystemInformation.MousePresent.ToString()
SystemInformation.MouseButtons.ToString()
SystemInformation.MouseButtonsSwapped.ToString()
SystemInformation.MouseWheelPresent.ToString()
-
2 ضمیمه
کشیدن لایه شفاف با رنگ دلخواه بر روی عکس
یادمه که قبلا یکی از دوستان دنبال روشی برای اینکار می گشت
برای اینکار حدود 100 خط نوشته بود که در اون از حلقه های تو در تو استفاده کرده بود و عملا جواب نمی داد
با این چند خط به راحتی می تونید اینکارو انجام بدید
using System.Drawing.Drawing2D;
privatestaticImage fill_layer(PictureBox Pic_Box,Image img,Color Layer_color,int Percent)
{
//از img به عنوان بک آپ استفاده می شود
//percent درصد شفافیت است
Pic_Box.Image = img;
Bitmap bmp_img = newBitmap(Pic_Box.Image);
Graphics ghp = Graphics.FromImage(bmp_img);
LinearGradientBrush LineaBrush;
LineaBrush = newLinearGradientBrush(newRectangle(0, 0, bmp_img.Width, bmp_img.Height), Color.FromArgb(Percent, Layer_color), Color.FromArgb(Percent, Layer_color), LinearGradientMode.BackwardDiagonal);
ghp.FillRectangle(LineaBrush, newRectangle(0, 0, bmp_img.Width, bmp_img.Height));
return (Image)bmp_img;
}
pictureBox1.Image = fill_layer(pictureBox1,pictureBox2.Image, Color,Value);
سورس برنامه قرار داده شده که همه چیز اونجا مشخص شده.
---------------------------------------------
ضمیمه تکمیل شده که امکان بینهایت لایه گذاری و نیز ذخیره عکس را دارد را می توانید دانلود کنید
-
تخصیص آیکن سفارشی به کامپوننتهای درون تولباکس
برای افزودن آیکن مورد نظر خود به یک کامپوننت کافیست که موارد زیر را رعایت کنید :- فایل تصویر باید از نوع bitmap و دقیقا همنام کلاس اما با پسوند bmp باشد
- اندازه ی تصویر مربوطه باید حتما 16x16 باشد وگرنه بصورت اتوماتیک برای رسیدن به آن سایز بریده خواهد شد.
- تصویر انتخابی باید از نوع 16 رنگ باشد
- و ...
برای توضیحات کاملتر گوشه هایی از متن اصلی کتاب رو مشاهده میکنید :
نقل قول:
The Toolbox Icon
Adding a Toolbox icon is refreshingly easy. All you need to do is add a bitmap to your project and follow
these rules:
• The bitmap file must have the same name as your custom control class (but with the extension
.bmp). For example, you would use a bitmap named CustomTextBox.bmp for the
CustomTextBox control.
• The bitmap must be 16×16 pixels. Otherwise, it will be mangled when Visual Studio
attempts to scale it.
• The bitmap must use only 16 colors.
• Once you add the bitmap file, you must use the Properties window to set the Build Action to
Embedded Resource.
Incidentally, it’s possible to use a toolbox icon that uses a filename that doesn’t match the name
of your control class. In this case, you need the help of the ToolboxBitmap attribute. For example, the
following code configures the CustomTextBox control to use a bitmap named CustomTextBox1.bmp:
[ToolboxBitmap(typeof(CustomTextBox), "CustomTextBox1.bmp")]
public class CustomTextBox : WebControl, IPostBackDataHandler
{ ... }
نقل قول:
You can also use this trick to place bitmaps in a separate subfolder in your project. For example,
here’s how you would refer to a bitmap in a folder named Images:
[ToolboxBitmap(typeof(CustomTextBox), @"Images\CustomTextBox1.bmp")]
Finally, it’s also possible to steal bitmaps from core ASP.NET controls, using code like this:
[ToolboxBitmap(typeof(System.Web.UI.WebControls.Tex tBox))]
نقل قول:
If you’re creating a simple control, all you may need to do is add a set of descriptive properties
and a toolbox icon. However, more complex controls often require other considerations. These
range from code serialization issues (how the control tag is created when you use the Properties window)
to control designers (advanced tools for customizing the design-time HTML your control
renders). In the rest of the chapter, you’ll take a look at these topics.
منبع کتاب : http://www.amazon.com/Pro-ASP-NET-3-.../dp/1590598938
-
محاسبه زمان اجرای قسمتی برنامه
از کلاس stopwatch که در فضای نام System.Diagnostics قرار داره هم می تونید استفاده کنید.
// Create an instance of the new StopWatch class
Stopwatch myWatch = new Stopwatch();
// Start the timer
myWatch.Start();
//Code Here...
// Now we can stop the timer and display the elapsed time along
myWatch.Stop();
elapsedTimeTextLabel.Text = myWatch.ElapsedMilliseconds.ToString() ;
به نقل از ezamnejad کاربر همین سایت
-
طریقه استفاده از کامژوننت timer
private void Form1_Load(object sender, EventArgs e)
{
//تنظیم زمان تکرار بر حسب میلی ثانیه
timer1.Interval = 1000;
timer1.Start();
timer1_Tick(sender, e);
}
private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = DateTime.Now.ToString();
}
-
1 ضمیمه
سایه دار کردن یک فرم
چطور میتوان یک فرم رو سایه دار کرد ؟
کد زیر را در فرم مورد نظر بنویسید :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private const int CS_DROPSHADOW = 0x00020000;
protected override CreateParams CreateParams
{
get
{
CreateParams p = base.CreateParams;
p.ClassStyle |= CS_DROPSHADOW;
return p;
}
}
}
دقت داشته باشید که برای نمایش سایه باید تیک مربوط به نمایش سایه ی ماوس را زده باشید (به تصویر ضمیمه شده مراجعه کنید)
منیع : http://www.codeproject.com/KB/cs/Let...opAShadow.aspx
-
غیر قابل کامپایل کردن بخشی از یک پروژه بصورت موقت
گاهی لازمه شما بخشی از یک پروژه و یا فایلهایی از آن را موقتا غیرقابل کامپایل کنید.
یک مثال - میخواهید بخشی از یک برنامه رو تست کنید اما کلاسی را که جدیدا نوشتید دارای خطای زمان کامپایل است و اجازه ی اجرا شدن برنامه را نمیدهد و گاهی لزومی نداره که ابتدا اون کلاس رو کاملا رفع مشکل کنید تا بعد بتونید برنامه رو تست کنید.
برای غیرقابل کامپایل کردن بخشی از یک پروژه :
روی آن فایل یا فولدر مورد نظر کلیک راست کرده و گزینه ی Exclude From Project را انتخاب کنید.
راه دیگر اینستکه :
پسوند فایلهایی را که میخواهید موقتا کامپایل نشوند را به چیزی غیر از cs (برای مثال : cs.bak) تغییر دهید.
-
4 ضمیمه
برنامه ای مشابه ColorBalance فوتوشاپ
برنامه ای که مشابه ColorBalance فوتوشاپ عمل می کند
به کمک این برنامه می توانید تعادل رنگی قرمز، سبز، آبی، و زرد را در
عکس های مورد نظر خود تغییر دهید.
می دونم که کسی عقلشو از دست نداده که از این برنامه برای اینکار
استفاده کنه ولی نمونه بسیار خوبی برای اینکاره.
توی برنامه از 4 کنترل TrackBar استفاده شده که به صورت لیستی به فرم
اضافه میشن، نام رنگ ها هم همینطور؛ ازین رو به سادگی و با 3 تغییر بسیار ساده
می تونید تعداد رنگ ها را تغییر دهید.
برای اینکار مقدار CNT را تغییر داده و رنگ ها و نام های خود را به آرایه ها اضافه یا کم
کنید، طول فرم هم بسته به تعداد اونها تغییر می کنه.
تعریف متغیرها
staticint CNT = 4;
publicstaticList<TrackBar> tbs = newList<TrackBar>();
Color[] clr = newColor[] { Color.Red, Color.Green, Color.Blue, Color.Yellow};
string[] lb = newstring[] { "R", "G", "B", "Y"};
Image img2,img_org;
ColorBalance
privatestaticImage fill_layer_ARGB(PictureBox PicBox, Image img,Color[] colr)
{
PicBox.Image = img;
Bitmap bmp_img = newBitmap(PicBox.Image);
Graphics ghp = Graphics.FromImage(bmp_img);
LinearGradientBrush LineaBrush;
for (int i = 0; i < CNT; i++)
{
LineaBrush = newLinearGradientBrush(newRectangle(0, 0, bmp_img.Width, bmp_img.Height), Color.FromArgb(tbs[i].Value, colr[i]), Color.FromArgb(tbs[i].Value, colr[i]), LinearGradientMode.BackwardDiagonal);
ghp.FillRectangle(LineaBrush, newRectangle(0, 0, bmp_img.Width, bmp_img.Height));
}
return (Image)bmp_img;
}
اضافه کردن TrackBar ها و Label ها
void add_tracks()
{
for (int i = 0; i < CNT; i++)
{
TrackBar tb = newTrackBar();
tb.Size = newSize(114, 45);
tb.Location = newPoint(i * 114 + 214, 545);
tb.Enabled = false;
tb.Minimum = 0;
tb.Maximum = 255;
tb.Value = 0;
tb.TickStyle = TickStyle.None;
tb.ValueChanged += newEventHandler(tb_ValueChanged);
tbs.Add(tb);
Label l = newLabel();
l.Text = lb[i];
l.Location = newPoint(i * 114 + 260, 567);
this.Controls.Add(l);
}
this.Controls.AddRange(tbs.ToArray());
this.Width += (CNT - 4) * 110;
label1.Left = (int)((pictureBox1.Width - label1.Width) / 2);
}
مثالی از برنامه داخل تصاویر اومده
همونطور که می دونید ترکیب 2 رنگ زرد و آبی میشه سبز
که داخل تصویر مشخصه
-
اتصال به SqlServer با استفاده از IP Address
اتصال به SqlServer با استفاده از IP Address
using System;
using System.Data.SqlClient;
namespace ConnectIPAddressSqlServer
{
class Program
{
static void Main(string[] args)
{
string connectString =
"Network Library=dbmssocn;Network Address=127.0.0.1;" +
"Integrated security=SSPI;Initial Catalog=AdventureWorks";
using (SqlConnection connection = new SqlConnection(connectString))
{
connection.Open( );
// Return some information about the server.
Console.WriteLine(
"ConnectionState = {0}\nDataSource = {1}\nServerVersion = {2}",
connection.State, connection.DataSource,
connection.ServerVersion);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey( );
}
}
}
SQL Server network libraries فایلهای dll هستند که عملیات شبکه مورد نیاز برای کلاینتها را انجام می دهند.
پروتکلها شبکه موجود برای Sql Server
• Shared Memory
• TCP/IP
استفاده از پروتکل TCP/IP برای ارتباط
• Named Pipes
SqlServer مکانیسم IPC را برای ارتباط بین کلاینت و سرور فراهم می کند.
• VIA
پروتکل Virtual Interface Adapter که توسط سخت افزارهای VIA مورد استفاده قرار می گیرد. از SqlSever2005 به بعد دیگراین پروتکل پشتیبانی نمی شود.
• AppleTalk ADSP
• Banyan VINES
• Multiprotocol
به صورت اتوماتیک از بین پروتکل های موجود یکی را انتخاب می کند که از لحاظ کارایی همانند استفاده از native network library می باشد.که از پروتکلهای TCP/IP Sockets, NWLink IPX/SPX, Named Pipes پشتیبانی می کند
• NWLink IPX/SPX
پروتکل شبکه های ناول
برای اطلاعات بیشتر در مورد پیکربندی پروتکلهای شبکه به Microsoft SQL Server Books Online مراجعه کنید
استفاده از سوکتهای TCP/IP برای SQL Server عملکرد و مقیاس پذیری برنامه را بهبود می بخشد(در زمانی که با حجم بالایی از داده سرو کار داریم).این مکانیسم از بعضی از مسائل امنیتی مربوط به named pipes اجتناب می ورزد.
در صورت استفاده از هر پروتکلی , کلاینت و سرور با ید برای استفاده از TCP/IP پیکر بندی شوند.
SQL Server Configuration Manager/SQL Server Network Configuration/enabling TCP/IP in the Protocols subnode.
توجه کنید که Instanse پیش فرض SqlServer از پورت 1433 استفاده می کند.در صورتی که شما آنرا برای پورت دیگری پیکربندی کرده باشید Connection String را به صورت زیر تغییر دهید
Network Address=(local),1450
منبع:http://gdevnb.blogfa.com
-
بدست آوردن مدت زمان بیکاری سیستم
جهت کمک به فرآیند جستجو، بهتره عنوان پست به انگلیسی نیز نوشته شود :
Get System Idle Time
struct LASTINPUTINFO
{
public uint cbSize;
public uint dwTime;
}
[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
public static uint GetIdleTime()
{
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeO f(lastInPut);
GetLastInputInfo(ref lastInPut);
return ((uint)Environment.TickCount - lastInPut.dwTime);
}
مثالی از نحوه ی استفاده :
private Timer CheckIdleTimer;
private void Form1_Load(object sender, System.EventArgs e)
{
CheckIdleTimer = new Timer();
CheckIdleTimer.Interval = 1000;
CheckIdleTimer.Start();
CheckIdleTimer.Tick += new EventHandler(CheckIdleTimer_Tick);
}
private void CheckIdleTimer_Tick(object sender, System.EventArgs e)
{
this.Text = (GetIdleTime() / 1000).ToString();
}
با استفاده از :
http://www.codeproject.com/KB/cs/GetIdleTimeWithCS.aspx
-
The Code Project Browser Add-in For VS 2005 And 2008
توضیحات:
You can browse The Code Project normally using the add-in.
Once you click on a sample zip file link, the following will happen:
1. You will be prompted to open the project using the Code Project Browser.
If you say no here, then the browser will handle your request and can save the
zip file like you normally do. NOTE: You must be logged into the Website to
download files from The Code Project.
2. If you say yes, then the add-in will download the project and unzip it to
My Documents\My Code Project Samples\[name].
[name] is derived from the unique directory that the article and sample
reside in on The Code Project.
3. The add-in will inspect the new directory for any solutions, and if
one is found, it will load it directly. If no solution is found, it will look
for any project files, and if one or more are found, it will load the
first one directly.
4. An entry is created in the "Downloaded Projects" view for the new directory.
All solutions, projects and sample executables will be included under the new
project tree node
دانلود:
http://www.codeproject.com/KB/macros/cpbrowser.aspx
-
پر کردن یک listbox از رنگهای سیستمی
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] colorNames;
colorNames = System.Enum.GetNames(typeof(KnownColor));
listBox1.Items.AddRange(colorNames);
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
KnownColor selectedColor;
selectedColor = (KnownColor)System.Enum.Parse(typeof(KnownColor), listBox1.Text);
this.BackColor = System.Drawing.Color.FromKnownColor(selectedColor) ;
}
}
منبع:pro.net2.0 windows forms and custom controls Apress
-
ایجاد تصویر Bitmap در زمان اجرا (روش دوم)
برای اینکار دو روش ساده وجود داره
یکی از روش ها قبلا گفته شد که از حلقه استفاده میشد،
مشکلی که اون روش داشت این بود که خیلی خیلی زمانبر بود
اما با این روش در حداقل زمان اینکار انجام میشه.
using System.Drawing;
void New_file(PictureBox pb)
{
bmp_image = new Bitmap(pb.Width, pb.Height);
g = Graphics.FromImage(bmp_image);
g.FillRectangle(Brushes.White, newRectangle(0, 0, bmp_image.Width, bmp_image.Height));
pb.Image = bmp_image;
}
-
1 ضمیمه
ایجاد طیف رنگ با بیش از دو رنگ توسط ColorBlend
//define LinearGradientBrush with Init Prop
//
LinearGradientBrush lgBrush = new LinearGradientBrush(this.ClientRectangle,
Color.White, Color.Blue,130);
//
// Define ColorBlend
//
ColorBlend cb = new ColorBlend(5); // 5 is count of color which sets to Brush
cb.Colors = new Color[] {Color.Red,Color.Blue,Color.Gold,Color.Black,Color .Brown,Color.Lime };
//define the point of each color
//all the Points must be between 0 and 1
// 0 and 1 should be exist in point collection
cb.Positions = new float[] {0.0f,0.2f,0.4f,0.6f,0.8f,1f };
// assign colorBlend to gardientBrush
lgBrush.InterpolationColors = cb;
//draw shape and fill it eith gradientBrush
e.Graphics.FillRectangle(lgBrush, this.ClientRectangle);
توضیح :بعضی از دوستان نحوه استفاده از این کد را متوجه نشده اند. و با پیغام خصوصی سوال کردند که چگونه از این کد باید استفاده کرد.
هر کنترلی را که شما بتوانید شی گرافیکی اون را به دست آورید می تونید این کد را برای اون اعمال کنید..
البته همانطور که می دونین، بهترین مکان همیشه برای کار های گرافیکی رویداد Paint می باشد.
نکته دیگه اینکه اگر عکس کشیده شده، هنگام Resize کردن فرم یا کنترل مورد نظر دارای پرش و .. می باشد، به راحتی می توانید با متد SetStyle مشکل ان را حل کنید.موفق باشید
-
2 ضمیمه
کلاس hatchBrush
این کلاس یکی دیگر از کلاس های کار با گرافیک است که در فضای نام System.Drawing.Drawing2D قرار گرفته است.
این کلاس از Enum ای به نام HatchStyle استفاده می کند تا استایل های از پیش تعریف شده ای را برای شما ترسیم کند.
HatchStyle دارای 57 نوع استایل مختلف می باشد که همگی آن ها همراه با نام آن ها در شکل Attach شده ترسیم شده اند.
توضیحات بیشتر را با دیدن عکس متوجه خواهید شد. اگر سایز عکس کوچک است، برنامه را دانلود کنید و از طریق برنامه مشاهده کنید.
کد برنامه ای که این عکس را ترسیم می کند :
//create a hBrush
System.Drawing.Drawing2D.HatchBrush hBrush = new HatchBrush((HatchStyle)(Enum.Parse(typeof(HatchSty le), senderItem.Tag.ToString(), true)), Color.Red, Color.Green);
//draw FillRectangle With hBrush on the Source Item
e.Graphics.FillRectangle(hBrush, senderItem.ClientRectangle);
//Calculate Size Of Text
SizeF textSize = e.Graphics.MeasureString(senderItem.Tag.ToString() .Trim(), this.Font);
int X_Loc = (int)(senderItem.Width - textSize.Width) / 2;
int Y_LOc = (int)(senderItem.Height - textSize.Height) / 2;
//Draw text
e.Graphics.DrawString(senderItem.Tag.ToString().Tr im(), this.Font, new SolidBrush(this.ForeColor), X_Loc, Y_LOc);
کد کامل را هم می توانید در پایان همین پست دانلود کنید.
موفق باشید
-
معرفی چند لینک برای دریافت آموزشهای ویدئویی
در لینکهای زیر میتوانید آموزشهای مورد نظر خودتون رو بصورت ویدیویی مشاهده و یا دانلود نمایید :
این لیست به مرور تکمیلتر خواهد شد.
-
تغییر دادن میزان تفکیک پذیری (Resulation) صفحه نمایش
Change Resulation
public static void ChangeResolution(int a, int b)
{
Screen screen = Screen.PrimaryScreen;
int iWidth = a;
int iHeight = b;
DEVMODE1 dm = new DEVMODE1();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmPelsWidth = iWidth;
dm.dmPelsHeight = iHeight;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
if (iRet == User_32.DISP_CHANGE_FAILED)
{
MessageBox.Show("Unable to process your request");
MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);
switch (iRet)
{
case User_32.DISP_CHANGE_SUCCESSFUL:
{
break;
//successfull change
}
case User_32.DISP_CHANGE_RESTART:
{
MessageBox.Show("Description: You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
//windows 9x series you have to restart
}
default:
{
MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
//failed to change
}
}
}
}
}
-
اتصال به بانکهای اطلاعاتی اوراکل در سی شارپ
روشهای اتصال به بانکهای اوراکل :
Oracle .NET data provider
OLE DB .NET data provider
ODBC .NET data provider
در مثال زیر به تمام راههای بالا اشاره شده است.
using System;
using System.Data.OracleClient;
using System.Data.OleDb;
using System.Data.Odbc;
namespace ConnectOracle
{
class Program Interprocess communication (IPC)
{
static void Main(string[] args)
{
// Connect using .NET data provider for Oracle
string oracleConnectString =
"Data Source=ORCL;User Id=hr;Password=password;";
using (OracleConnection connection =
new OracleConnection(oracleConnectString))
{
connection.Open( );
// Return some information about the server.
Console.WriteLine("---Microsoft .NET Provider for Oracle---");
Console.WriteLine("ConnectionString = {0}\n", oracleConnectString);
Console.WriteLine("State = {0}", connection.State);
Console.WriteLine("DataSource = {0}", connection.DataSource);
Console.WriteLine("ServerVersion = {0}", connection.ServerVersion);
}
// Connect using .NET data provider for OLE DB.
string oledbConnectString =
"Provider=MSDAORA;Data Source=ORCL;User Id=hr;Password=password;";
using (OleDbConnection connection =
new OleDbConnection(oledbConnectString))
{
connection.Open( );
// Return some information about the server.
Console.WriteLine("\n---Microsoft .NET Provider for OLE DB---");
Console.WriteLine("ConnectionString = {0}\n", oledbConnectString);
Console.WriteLine("State = {0}", connection.State);
Console.WriteLine("DataSource = {0}", connection.DataSource);
Console.WriteLine("ServerVersion = {0}", connection.ServerVersion);
}
// Connect using .NET data provider for ODBC
string odbcConnectString = "Driver={Oracle in OraDb10g_home1};" +
"Server=ORCL;uid=hr;pwd=password;";
using (OdbcConnection connection =
new OdbcConnection(odbcConnectString))
{
connection.Open( );
// Return some information about the server.
Console.WriteLine("\n---Microsoft .NET Provider for ODBC---");
Console.WriteLine("ConnectionString = {0}\n", odbcConnectString);
Console.WriteLine("State = {0}", connection.State);
Console.WriteLine("DataSource = {0}", connection.DataSource);
Console.WriteLine("ServerVersion = {0}", connection.ServerVersion);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey( );
}
}
}
روش اول Oracle .NET data provider یا همان Native Oracle:
Oracle .NET data provider با استفاده از OCI(Oracle Call Inteface) و از طریق ابزارهای ارتباطی برای کلاینت (Oracle client connectivity software) به بانکهای اطلاعاتی اوراکل دسترسی دارد.این پروایدر به اوراکل 7.3.4 (یا ورژنهای بالاتر) می تواند دسترسی داشته باشد ,همچنین به Oracle 8i Release 3 (8.1.7) client software (یا ورژنهای بالاتر) نیازدارد.تمام کلاسهای مورد نیاز در فضای نام System.Data.OracleClient قرار دارد
مثالی از رشته اتصال که از Integrated Security استفاده کرده است
Data Source=ORCL;Integrated Security=yes;
و بدون استفاده از Integrated Security
Data Source=ORCL;User Id=hr;Password=password;
معمولاً روش Native بهتر از دو روش دیگر است .چون این این روش مخصوص این نوع بانک اطلاعاتی است و برای آن بهینه شده است(تمام لایه های غیر مرتبط با این نوع دیتا حذف شده است)
روش دوم OLE DB:
در این روش برای دسترسی به بانکهای اطلاعاتی اوراکل از Oracle OLE DB provider (MSDAORA) استفاده می کنیم.
Provider=MSDAORA;Data Source=myOracleDb;User Id=hr;Password=password;
معمولاً از این روش برای ایجاد یک پل ارتباطی با برنامه ای که از OLE DB استفاده می کند , بکار می رود.
روش سوم OLE DB:
و در پایان با استفاده از ODBC .NET data provider نیز می توان به بانکهای اوراکل متصل شد . به عنوان مثال رشته اتصال به بانک اطلاعاتی در Oracle 10g به صورت زیر است.
"Driver={Oracle in OraDb10g_home1};Server=ORCL;uid=hr;pwd=password;";
از این روش نیز برای ایجاد یک پل ارتباطی با برنامه ای که از ODBC استفاده می کند , بکار می رود.
بنابراین در صورت امکان برای اتصال به این بانکها از روش Native استفاده کنید.
نکته:اوراکل از یک فایل پیکر بندی(با نام TNSNAMES.ORA در محل بانک اطلاعاتی)برای تعیین نحوه ارتباط با آن استفاده می کند.
مثالی از محتویات این فایل برای alias ORCL :
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
که این اتصال به طور پیش فرض از ارتباط TCP/IP با پورت 1521 صورت می گیرد.
-
بررسی اتصال به اینترنت Dial up و ADSL
این قطعه کد رو داخل همین بخش دیدم و خاطرم نیست کی زحمتش رو کشیده بود
در صورتیکه مقدار بازگردانده شده از این تابع IsConnectedToInternet برابر true باشد ، سیستم به اینترنت متصل است
using System.Runtime.InteropServices;
//بررسی اتصال به اینترنت
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
//Creating a function that uses the API function...
bool IsConnectedToInternet()
{
bool a;
int Desc;
a=InternetGetConnectedState(out Desc, 0);
return a;
}
-
پر کردن دو DataGrid به صورت master detail
این تیکه کد نیاز به دو DataGrid دارد و از متد SetDataBinding برای پر کردن DataGrid ها استفاده میکند
DataRelation myDataRelation;
myDataRelation = new DataRelation("CustOrd", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]);
// Add the relation to the DataSet.
ds.Relations.Add(myDataRelation);
GridOrders.SetDataBinding(ds,"Customers");
GridDetails.SetDataBinding(ds,"Customers.CustOrd") ;
http://msdn2.microsoft.com/en-us/lib...28(VS.71).aspx
-
تشخیص روشن بودن Caps Lock و Num Lock
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true,CallingConvention=CallingConven tion.Winapi)]
public static extern short GetKeyState(int keyCode);
bool isCapsLock = (((ushort) GetKeyState(0x14 /*VK_CAPITAL*/)) & 0xffff) != 0;
bool isNumLock = (((ushort) GetKeyState(0x90 /*VK_NUMLOCK*/)) & 0xffff) != 0;
-
ضبط (ركورد) صدا از طريق ميكروفون
How to record voice from microphone?
using Microsoft.VisualBasic.Devices;
using Microsoft.VisualBasic;
using System.Runtime.InteropServices;
تابع API زير را به كلاس برنامه بيافزاييد :
[DllImport("winmm.dll", EntryPoint = "mciSendStringA",
CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
private static extern int mciSendString(string lpstrCommand,
string lpstrReturnString, int uReturnLength, int hwndCallback);
3 دكمه با نامهاي زير بسازيد :
در زمان كليك شدن دكمه Record بنويسيد :
// record from microphone
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
و هنگام كليك شدن دكمه SaveStop
// stop and save
mciSendString("save recsound c:\\record.wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
Computer c = new Computer();
c.Audio.Stop();
و براي دكمه Read نيز :
Computer computer = new Computer();
computer.Audio.Play("c:\\record.wav", AudioPlayMode.Background);
منبع : http://www.dotnetspider.com/resource...icrophone.aspx
-
ايجاد رشته اي تصادفي از اعداد با طول مشخص
Generating Random Number and String
private string GenerateRandomString(int size)
{
Random r = new Random();
string legalChars = "1234567890";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++)
sb.Append(legalChars.Substring(r.Next(0, legalChars.Length - 1), 1));
return sb.ToString();
}
مثال زير در هر بار كليك دكمه يك رشته ي تصادفي و 6 رقمي از اعداد را نمايش ميدهد:
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(GenerateRandomString(6));
}
جهت تغيير دادن حروف رشته، متغير legalChars را تغيير دهيد. مثلا براي تركيب حروف بزرگ با اعداد :
string legalChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
منبع : http://www.c-sharpcorner.com/UploadF...domNumber.aspx
-
شبيه سازي عمل كليك ماوس روي يك كنترل با كدنويسي
simulate mouse click on a control
private const UInt32 WM_LBUTTONDOWN = 0x201;
private const UInt32 WM_LBUTTONUP = 0x202;
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr handle,
UInt32 message,int wParam,int lParam);
public static void SendClick(Control receiver)
{
if (receiver != null)
{
SendMessage(receiver.Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(receiver.Handle, WM_LBUTTONUP, 0, 0);
}
}
مثال :
private void button1_Click(object sender, EventArgs e)
{
SendClick(button2);
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("2");
}
منبع : http://www.dotnet247.com/247referenc.../15/78924.aspx
-
ذخیره DataGrid در اکسل Excel
ابتدا در Add Reference و در تب Com گزینه های زیر را add کنید
1- Microsoft Excel 11 object Lib
Microsoft Office 11 object lib 2-
Excel.ApplicationClass excel = new ApplicationClass();
excel.Application.Workbooks.Add(true);
int ColumnIndex = 0;
foreach (DataGridViewColumn col in dgv.Columns)
{
ColumnIndex++;
excel.Cells[1, ColumnIndex] = col.HeaderText;
}
int rowIndex = 0;
string val;
pb.Maximum = dgv.Rows.Count;
foreach (DataGridViewRow row in dgv.Rows)
{
rowIndex++;
ColumnIndex = 0;
foreach (DataGridViewColumn col in dgv.Columns)
{
ColumnIndex++;
if (row.Cells[ColumnIndex - 1].Value == null)
val = "";
else
val = row.Cells[ColumnIndex - 1].Value.ToString();
excel.Cells[rowIndex + 1, ColumnIndex] = val;
}
}
excel.Visible = true;
-
از بین بردن کاراکتر های غیر مجاز در رشته های عددی
توسط متد زیر می تواند رشته عددی خالص را از هر رشته ای که حاوی کاراکتر های غیر عددی است به دست آورد.
private String TrimToNumber(String text)
{
StringBuilder sb = new StringBuilder();
foreach (char c in text)
{
if (char.IsDigit(c))
sb.Append(c);
}
return sb.ToString();
}
مثال
string text = "-0-#$%t123^456j7j8j9j";
MessageBox.Show(TrimToNumber(text));
خروجی مثال بالا =0123456789
پ و :
البته این برای اون دسته از دوستانی که نمی خوان از TextBox ها سفارشی شده استفاده کنند. و یا متن را از فایل یا جایی دیگه می خونن که ممکنه ناخالصی داشته باشه
-
چند تابع
يه تابع ساده واسه اينكه ببينيم ورودي int هست يا نه؟
#region IsInteger
///<summary>
/// Checks whether the give text is integer.
///</summary>
///<param name="text">The text to be checked.</param>
///<returns>true if text is integer</returns>
public static bool IsInteger(this string text)
{
int num;
return int.TryParse(text, out num);
}
#endregion
يه تابع ساده واسه اينكه ببينيم ورودي int يا كنترلي (مثل enter) هست يا نه؟
#region IsInetegerOrControl
///<summary>
/// Checks whether the give text is one of integer or control, or not.
///</summary>
/// <param name="text">The text to be checked.</param>
/// <returns>true if text is integer or control</returns>
public static bool IsInetegerOrControl(this string text)
{
int num;
if (!int.TryParse(text, out num)) return true;
foreach (char chr in text)
{
if (!char.IsControl(chr))
return false;
}
return true;
}
#endregion
از بين بردن فضاهاي خالي تو يه آرايه
#region Compact
///<summary> ///
/// Eleminates all null or nullstrings in string array
///</summary>
/// <param name="strings">String array to compact</param>
/// <returns>Compacted string array</returns>
public static string[] Compact(params string[] strings)
{
return strings.Where(item => string.IsNullOrEmpty(item)).ToArray();
}
#endregion
آيا ورودي unicode هست؟
#region IsUnicode
///<summary> ///
/// Checks whether the given text is unicode or not.
/// </summary>
/// <param name="str">The text to be checked.</param>
/// <returns>returns true if text is unicode.</returns>
public static bool IsUnicode(this string str)
{
byte[] unicodeBytes = System.Text.Encoding.Unicode.GetBytes(str);
for (int i = 1; i < unicodeBytes.Length; i += 2) if (unicodeBytes[i] != 0) return true;
return false;
}
#endregion
تبديل به unicode:
#region ToUnicode
///<summary>
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ToUnicode(this string str)
{
return Encoding.Unicode.GetString(Encoding.Unicode.GetByt es(str));
}
#endregion
-- لطفا نكات رو بصورت ماژولوار (هر نكته در يك پست) بهمراه عناوين گويا ارسال نماييد. --
با تشكر
sinpin
-
Override كردن توابع از طريق snnipet ها
بنا به فرمايش يكي از دوستان عزيز:
براي override كردن يه متد virtual تو محيط VS، كلمه override رو بنويسيد و يه space بزنيد. اگه عضو virtualي وجود داشته باشه interllisence مياردش. حالا فقط كافيه انتخابش كنيد تا اونو براتون override كنه. ميدونيد كه تمام classهايي كه به هر نحوي در #C ايجاد ميشن (چه توسط ما چه توسط NET.) تلويحا از كلاس Object ارث مي برن. و همينطور ميدونيد در كلاس Object متدهاي Equals، GetHashCode، و ToString بصورت virtual تعريف شدن. پس ما هميشه ميتونيم اين متدها رو override كنيم. متد ToString كه ميدوني. 100تا كاربرد داره يكيش مال موقعهايه كه شما داريد مقدار يه متغير رو توي quick watch نگاه مي كنيد. با override كردن ToString توي classهاتون مي تونيد اونچه خودتون دلتون ميخواد رو اونجا ببنيد. متدهاي GetType و Equals رو هم توي يه مثال نه چندان optimize شده نشون مي دم:
private int _CoreData;
public override bool Equals(object obj)
{
if (obj == null) return false;
if (obj.GetType() != this.GetType()) return false;
if ((obj as Program)._CoreData != this._CoreData) return false;
return true;
}
-
writing to event log
public class Logger
{
private EventLog _EventLog;
public string _Source { get; set; }
public string _Log { get; set; }
public Logger(string SourceName)
{
_EventLog = new EventLog();
_Source = SourceName;
if (!EventLog.SourceExists(_Source))
{
EventLog.CreateEventSource(_Source, _Log);
}
_EventLog.Source = _Source;
}
public void Add(string Message,
System.Diagnostics.EventLogEntryType eType)
{
_EventLog.WriteEntry(Message, eType);
}
public void AddError(string Message)
{
Add(Message, System.Diagnostics.EventLogEntryType.Error);
}
public void AddWarning(string Message)
{ Add(Message, System.Diagnostics.EventLogEntryType.Warning);
}
public void AddInformation(string Message)
{
Add(Message,
System.Diagnostics.EventLogEntryType.Information);
}
}
نحوه استفاده:
Logger Log = new Logger("CSTips");
Log.AddError("Error message");
Log.AddInformation("Informational message");
Log.AddWarning("Warning message");
منبع
-
استفاده از متد Find در Generic List
با فرض اينكه lstTerm ليستي از كلاس Term است مي خواهيم ترمي را پيدا كنيم كه Id آن برابر با 88-87 باشد. lstTerms.Find(delegate(Term t) { return t.Id = "87-88"; });
-
1 ضمیمه
Concatenating Wave ، اتصال فایلهای Wave
در یک پروژه که نیاز به اعلام شماره ها بصورت گویا داشتم ، بعد از ظبط صدای اعداد ، برای اینکه فایلها رو پشت سر هم پخش کنم 2 تا مشکل اساسی داشتم.
1- ایجاد تاخیر در پخش اعداد بعدی (مثلا 120 رو بعد از پخش "یکصد و " یه مکثی ایجاد میشد تا بره سراغ فایل "بیست"
2-تشخیص اینکه کی یکصدو تمام میشه تا بیست صدا زده بشه سخت بود.
خلاصه به این نتیحه رسیدم که فایلهای Wave رو بهم بچشبونم و بصورت یک فایل Temp در بیارم و پخش کنم.
کلاس زیر رو پیدا کردم که خیلی عالیه و راحته. برای شروع 2 فایل رو بهم میچسبونه که به سادگی قابل افزایش به n فایل هست.
-
گرفتن کد اسکی و یونیکد کاراکتر ها
تبدیل به یونیکد
String ucode = String.Format("{0:x4}", (int)('a'));
// ucode = 0061
تبدیل به اسکی
String acode = (((int)('a')).ToString());
//acode=97
-
فرستادن پارامتر به برنامه email ویندوز
توسط متد زیر می توانید مستقیما برنامه outlook ویندوز را باز کرده و مکان های مناسب ان را مقدار دهی کنید
private static void SendMail(String mailto,String cc,String subject,String body)
{
String command = String.Format("mailto:{0}?cc={1}&subject={2}&body= {3}", mailto, cc, subject, body);
System.Diagnostics.Process.Start(command);
}
یک مثال
private void button1_Click(object sender, EventArgs e)
{
SendMail("rkiani88@yahoo.com","rkiani88@hotmail.co m",
"this a sample subject for sample mail",
"Hi All, this is a sample code for sending parameters to outlook exprees");
}
نتیجه اجرا
-
پخش فایل صوتی موجود در Resource
برای دسترسی به فایلهای صوتی داخل Resource و پخش کردن اونها نمیشه مانند دسترسی به bitmap ها یا .... عمل کرد.برای این کار میشه طبق مثال زیر عمل کرد.....
این مثال واسه وقتیه که یک فایل wav در resource وجود داشته باشه.برای فایل های بیشتر میشه از ArrayList استفاده کرد....
اضافه کردن namespace ها:
using System.Reflection;
using System.IO;
using System.Media;
using System.Runtime.InteropServices;
اضافه کردن dll مربوط به Windows Media Player :
[DllImport("Winmm.dll")]
private static extern bool PlaySound(byte[] data, IntPtr hMod, UInt32 dwFlags);
private const UInt32 SND_ASYNC = 1;
private const UInt32 SND_MEMORY = 4;
کدهای مربوطه:
private Assembly a = Assembly.GetExecutingAssembly();
private string _sound = string.Empty;
private Stream stream;
private Int32 length;
private byte[] _data;
foreach (string resourceName in a.GetManifestResourceNames())
if (Path.GetExtension(resourceName).ToLower() == ".wav")
_sound = resourceName;
stream = a.GetManifestResourceStream(_sound);
length = (Int32)stream.Length;
_data = newbyte[length];
stream.Read(_data, 0, length);
PlaySound(_data, IntPtr.Zero, SND_ASYNC | SND_MEMORY);
-
تبديل اندازه colomn هاي يك سطر datagridview به حداكثر تعداد كاراكتر در همون ستون
private void CalculateWideOfColomn(Graphics g)
{
SizeF tmpSize = new SizeF();
for (int i = 0; i <= dataGridView1.Columns.Count - 1; i++)
{
Font tmpFont = dataGridView1.DefaultCellStyle.Font;
tmpSize = g.MeasureString(dataGridView1.Columns[i].HeaderText, tmpFont);
float tmpWidth = tmpSize.Width;
float RowHeaderHeight = tmpSize.Height;
for (int j = 0; j <= dataGridView1.Rows.Count - 1; j++)
{
tmpSize = g.MeasureString("HELLO", tmpFont);
tmpSize = g.MeasureString(dataGridView1.Rows[j].Cells[i].EditedFormattedValue.ToString(), tmpFont);
if (tmpSize.Width > tmpWidth)
{
tmpWidth = tmpSize.Width;
}
}
if (dataGridView1.Columns[i].Visible)
dataGridView1.Columns[i].Width = (int)tmpWidth;
}
}
-
دسترسي به پيكره بندي سيستم در CLR
شايد براتون پيش بياد كه بخواهيد به فايل WEB.Config و يا App.Config در CLR دسترسي پيدا كنيد.
اگر بخواهيد با استفاده از منوي Add Reference اين كار رو انجام بديد خواهيد ديد كه در فهرست Referenceها خبري از System.configuration نيست.
براي اينكار بايد فايل پروژه ي خودتون رو كه ميتونه پسوند vbproj و يا csproj داشته باشه (بسته به اينكه با #C و يا VB نوشته شده) رو تو يك Editor متني باز كنيد و در بخش ItemGroup خط زير رو اضافه كنيد :
<Reference Include="System.configuration" />
فايل رو ذخيره كنيد و پروژه رو دوباره باز كنيد.
حالا مي تونيد به Application Configuration دسترسي داشته باشيد.
-
1 ضمیمه
ايجاد سايز سفارشي كاغذ براي چاپگر در سي شارپ
add a custom paper size (a printer form) to the default printer and set the printer to use the custom paper size
به سورس كد ضميمه شده مراجعه كنيد.
برگرفته از : http://www.codeproject.com/KB/printi...per_sizes.aspx
-
1 ضمیمه
وابسته كردن يك نوع فايل (file extension) به برنامه شما
programmatically associate a file type on the system with your application
زماني كه ميخواهيد با دابل كليك كردن بر روي آيكن يك نوع خاص از فايلها (با پسوند دلخواه) آنها در برنامه شما باز شوند و ...
برگرفته شده از : http://www.codeproject.com/KB/dotnet...sociation.aspx
-
كنترل سرويس SQL Server از طريق كدنويسي
How to programmaticaly control and change status of MS SQL Server service or others
ابتدا اسمبلي System.ServiceProcess.dll را به قسمت References پروژه ي خود بيافزاييد و سپس :
System.ServiceProcess.ServiceController sc =
new System.ServiceProcess.ServiceController("MSSQLSERV ER");
براي stop, start و يا pause كردن سرويس :
sc.Stop();
sc.Pause();
sc.Start();
و براي بدست آوردن حالت فعلي سرويس :
sc.Status
به كمك كلاس ServiceController قادريد كه ساير سرويسهاي ويندوز را نيز - بسته به داشتن مجوز لازم - كنترل نماييد.
-
پیدا کردن آتمی در یک مجموعه با استفاده از عبارت where در LINQ
اول یه لیست درست می کنیم و اون رو با رشته های 0 تا 100 پر می کنیم .
حالا می خواهیم با LINQ رشته های بزرگتر از 90 رو توی لیستمون پیدا کنیم :
List<int> list = new List<int>();
for (int i = 0; i <= 100; i++)
list.Add(i);
var find = (from item in list
where item > 90
select item);
foreach (var value in find)
Console.WriteLine(value);
-
رفع چشمك و پرش تصوير
چنانچه براي انجام كارهاي گرافيكي خود از مجموعه ي +GDI استفاده مي كنيد، بسيار محتمل است كه به هنگام انجام اعمال گرافيكي سنگين مثل Pan و Zoom تصوير يا ترسيمات گرافيكي با پرش يا چشمك زدن هاي متوالي مواجه شويد. براي رفع اين مشكل مي توانيد خاصيت DoubleBuffered مربوط به Form يا UserControl اي كه در آن ترسيمات انجام مي گيرند را true كنيد.
براي اطلاعات بيشتر در MSDN به ايندكس double buffering مراجعه كنيد.
-
بدست آوردن ليست برنامه هاي نصب شده بر روي سيستم
Get a list of installed software in C#
private string Getinstalledsoftware()
{
string Software = null;
string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninst all";
using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey))
{
foreach (string skName in rk.GetSubKeyNames())
{
using (RegistryKey sk = rk.OpenSubKey(skName))
{
try
{
if (!(sk.GetValue("DisplayName") == null))
{
if (sk.GetValue("InstallLocation") == null)
Software += sk.GetValue("DisplayName") + " - Install path not known\n"; //Nope, not here.
else
Software += sk.GetValue("DisplayName") + " - " + sk.GetValue("InstallLocation") + "\n"; //Yes, here it is...
}
}
catch (Exception ex)
{
//No, that exception is not getting away... :P
}
}
}
}
return Software;
}
منبع : http://www.dreamincode.net/code/snippet1995.htm