-
جلوگیری از رخ دادن Unhandled Exceptions
در فایل program.cs مربوط به پروژه بعد از دستورات زیر
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
دستور زیر رو قرار بدید
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadExce ption);
و در همون فایل program.cs متدی با همان نامی که در سازنده بالا دادید باید ایجاد کنید مثل متد زیر
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show("خطا در اجرای دستور کاربر", "خطا");
}
از این به بعد در صورتی که خطایی در قطعه کدی از برنامه رخ بده که درون بلوک try قرار نداشته باشه به این متد فرستاده می شه و دیگه پیام پیش فرض دات نت فریم ورک نمایش داده نمی شه.
نکته : آرگومان e در متد فوق حاوی Exception ایجاد شده می باشد که از آن می توان استفاده های مختلفی کرد.
-------------------------------------------------------
نقل قول مستقیم از لینک زیر (ایجاد شده توسط رها)
https://barnamenevis.org/showth...hreadException
-
بافر .: نشان دادن مقدار کپی شدن یه فایل :.
با استفاده از بافر می توان روی مقدار کپی شدن یه فایل مدیریت کرد و مانور داد
موارد مورد نیاز برای این مثال:
1. یک Progress Bar
2. یک Button
این کد متد اصلی ما می باشد
public void CopyFile(string FileSource, string FileDestination)
{
int NumRead;
long FileLength;
System.IO.FileStream From = new System.IO.FileStream(FileSource, System.IO.FileMode.Open);
System.IO.FileStream To = new System.IO.FileStream(FileDestination, System.IO.FileMode.CreateNew);
byte[] buffer = new byte[1024];
FileLength = From.Length;
progressBar1.Minimum = 0;
progressBar1.Maximum = (int)FileLength;
while (FileLength>0)
{
System.IO.BinaryReader Reader = new System.IO.BinaryReader(From);
NumRead = Reader.Read(buffer, 0, 1024);
FileLength = FileLength - NumRead;
System.IO.BinaryWriter Writer = new System.IO.BinaryWriter(To);
Writer.Write(buffer, 0, NumRead);
progressBar1.Value = progressBar1.Value + NumRead;
Writer.Flush();
}
From.Close();
To.Close();
if (progressBar1.Value>99)
{
progressBar1.Value = 0;
MessageBox.Show("Copy Finished successfuly");
}
}
از این کد برای فراخوانی متد اصلی در رویداد Button استفاده می شود
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
folderBrowserDialog1.ShowDialog();
System.IO.FileInfo d=new System.IO.FileInfo(openFileDialog1.FileName.ToStri ng());
CopyFile(openFileDialog1.FileName.ToString(), folderBrowserDialog1.SelectedPath.ToString()+"\\"+ d.Name.ToString());
}
-
1 ضمیمه
بدست آوردن میزان عددی طول رشته ی درون یک TextBox
Graphics txtGraphics = this.textBox1.CreateGraphics();
float width = txtGraphics.MeasureString(textBox1.Text, textBox1.Font).Width;
this.Text = width.ToString();
txtGraphics.Dispose();
پروژه مثال ضمیمه شده است.
-
تبدیل یک Enum به یک DataTable
با فرض داشتن یک enum مانند :
public enum UserNames
{
Sinpin,
Masoud,
Behrouz,
Omid,
Ali
}
public DataTable ConvertEnumToDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
int i = 0;
foreach (string s in Enum.GetNames(typeof(UserNames)))
{
DataRow dr = dt.NewRow();
dr["ID"] = i;
dr["Name"] = s;
dt.Rows.Add(dr);
i++;
}
return dt;
}
مثال از نحوه ی استفاده :
dataGridView1.DataSource = ConvertEnumToDataTable();
منبع : http://www.daniweb.com/code/snippet811.html
-
غیرفعال کردن دکمه Close یک فرم
using System.Runtime.InteropServices;
private const int SC_CLOSE = 0xF060;
private const int MF_GRAYED = 0x1;
[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll")]
private static extern int EnableMenuItem(IntPtr hMenu, int wIDEnableItem, int wEnable);
private void Form1_Load(object sender, System.EventArgs e)
{
EnableMenuItem(GetSystemMenu(this.Handle, false), SC_CLOSE, MF_GRAYED);
}
منبع : http://www.daniweb.com/code/snippet453.html
-
تغییر دادن رنگ متن در Console Application
using System.Runtime.InteropServices;
[DllImport("kernel32.dll")]
public static extern bool SetConsoleTextAttribute(IntPtr hConsoleOutput, int wAttributes);
[DllImport("kernel32.dll")]
public static extern IntPtr GetStdHandle(uint nStdHandle);
public static void Main(string[] args)
{
uint STD_OUTPUT_HANDLE = 0xfffffff5;
IntPtr hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// increase k for more color options
for (int k = 1; k < 255; k++)
{
SetConsoleTextAttribute(hConsole, k);
Console.WriteLine("{0:d3} I want to be nice today!", k);
}
// final setting
SetConsoleTextAttribute(hConsole, 236);
Console.WriteLine("Press Enter to exit ...");
Console.Read(); // wait
}
منبع : http://www.daniweb.com/code/snippet134.html
-
باز و بسته کردن درایو CD-ROM
using System.Runtime.InteropServices;
[DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
protected static extern int mciSendString(string lpstrCommand,
StringBuilder lpstrReturnString,
int uReturnLength,
IntPtr hwndCallback);
باز کردن :
int ret = mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
بستن :
int ret = mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
منبع : http://www.daniweb.com/code/snippet350.html
-
خالی کردن سطل بازیافت ویندوز (ResycleBin)
using System.Runtime.InteropServices;
enum RecycleFlags : uint
{
SHERB_NOCONFIRMATION = 0x00000001,
SHERB_NOPROGRESSUI = 0x00000001,
SHERB_NOSOUND = 0x00000004
}
[DllImport("Shell32.dll", CharSet = CharSet.Unicode)]
static extern uint SHEmptyRecycleBin(IntPtr hwnd, string pszRootPath,
RecycleFlags dwFlags);
private void button1_Click(object sender, EventArgs e)
{
uint result = SHEmptyRecycleBin(IntPtr.Zero, null, 0);
}
منبع : http://www.daniweb.com/code/snippet439.html
-
حالتهای مختلف نمایش تاریخ و زمان با کمک String Formatting
static void Main(string[] args)
{
DateTime CurrTime = DateTime.Now;
Console.WriteLine("DateTime display listing specifier and result:\n");
Console.WriteLine("d = {0:d}", CurrTime);
// Short date mm/dd/yyyy
Console.WriteLine("D = {0:D}", CurrTime);
// Long date day, month dd, yyyy
Console.WriteLine("f = {0:f}", CurrTime);
// Full date/short time day, month dd, yyyy hh:mm
Console.WriteLine("F = {0:F}", CurrTime);
// Full date/full time day, month dd, yyyy HH:mm:ss AM/PM
Console.WriteLine("g = {0:g}", CurrTime);
// Short date/short time mm/dd/yyyy HH:mm
Console.WriteLine("G = {0:G}", CurrTime);
// Short date/long time mm/dd/yyyy hh:mm:ss
Console.WriteLine("M = {0:M}", CurrTime);
// Month dd
Console.WriteLine("R = {0:R}", CurrTime);
// ddd Month yyyy hh:mm:ss GMT
Console.WriteLine("s = {0:s}", CurrTime);
// yyyy-mm-dd hh:mm:ss can be sorted!
Console.WriteLine("t = {0:t}", CurrTime);
// Short time hh:mm AM/PM
Console.WriteLine("T = {0:T}", CurrTime);
// Long time hh:mm:ss AM/PM
Console.WriteLine("u = {0:u}", CurrTime);
// yyyy-mm-dd hh:mm:ss universal/sortable
Console.WriteLine("U = {0:U}", CurrTime);
// day, month dd, yyyy hh:mm:ss AM/PM
Console.WriteLine("Y = {0:Y}", CurrTime);
// Month, yyyy
Console.WriteLine();
Console.WriteLine("DateTime.Month = " + CurrTime.Month);
// number of month
Console.WriteLine("DateTime.DayOfWeek = " + CurrTime.DayOfWeek);
// full name of day
Console.WriteLine("DateTime.TimeOfDay = " + CurrTime.TimeOfDay);
Console.Read(); // wait
}
منبع : http://www.daniweb.com/code/snippet184.html
یک لینک مفید دیگر : http://blog.stevex.net/index.php/str...ing-in-csharp/
-
خوندن خط به خط یک رشته چند سطری
using System.IO;
string s = @"salam
dooste
man";
using (StringReader sr = new StringReader(s))
{
while (sr.Peek() > 0)
MessageBox.Show(sr.ReadLine());
};
-
اعمال محدودیت برای ذخیره فایل توسط کاربر
مثلا یه برنامه داریم که به کاربر قابلیت ذخیره ی فایل میده !
خوب بدلیل شرایط امنیتی بهتره دسترسی کاربر به درایو اصلی ویندوز محدود بشه !برای اینکار بصورت زیر عمل میکنیم :
ابتدا NameSpace های زیر رو استفاده میکنیم :
using System.Security.Permissions;
using System.Security;
using System.IO;
حالا قبل از namespace اصلی برنامه :
[assembly: FileIOPermissionAttribute(SecurityAction.RequestRe fuse, Write = "C:\\")]
بدین صورت کاربر اجازه ی درج فایل در درایو C رو نداره .
مثلا اگه تو رویداد Click یکی از Button ها دستور زیر نوشته شده باشه .. کاربر با خطای مواجه خواهد شد :
StreamWriter sw;
try
{
sw = File.CreateText("C:\\test.txt");
sw.WriteLine("salam");
}
catch
{
MessageBox.Show("عدم دسترسی");
}
finally
{
sw.Close();
}
-
معرفی لینک دانلود سورس کدهای برخی انتشارات
برای دانلود سورس کدهای مربوط به کتاب مورد نظر خود به لینکهای زیر مراجعه کنید :
این لیست به مرور تکمیلتر خواهد شد.
-
قرار دادن شورتکات یک برنامه بر روی Desktop و Start Menu
ابتدا روی پروژه کلیک راست کرده، Add Reference و در Tab مربوط به COM مورد Windows Script Host Object Model را اضافه نمایید. سپس :
using IWshRuntimeLibrary;
public static void CreateShortcut(string destination)
{
WshShell wshShell = new WshShell();
object destFolder = (object)destination;
string fileName = Path.Combine(
(string)wshShell.SpecialFolders.Item(ref destFolder),
"Notepad.lnk"
);
IWshShortcut shortcut =
(IWshShortcut)wshShell.CreateShortcut(fileName);
shortcut.TargetPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolde r.System),
"notepad.exe"
);
shortcut.WorkingDirectory =
Environment.GetFolderPath(Environment.SpecialFolde r.Personal);
shortcut.Description = "Notepad Text Editor";
shortcut.Hotkey = "CTRL+ALT+N";
// Configure Notepad to always start maximized.
shortcut.WindowStyle = 3;
// Configure the shortcut to display the first icon in Notepad.exe.
shortcut.IconLocation = "notepad.exe, 0";
shortcut.Save();
}
نحوه ی استفاده :
CreateShortcut("Desktop");
CreateShortcut("StartMenu");
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
یک مثال دیگر : http://www.codeproject.com/KB/dotnet/shelllink.aspx
-
بدست آوردن اطلاعاتی در مورد OS و CLR
// OS and CLR version information.
Console.WriteLine(Environment.NewLine);
Console.WriteLine("OS PlatformID : " +
Environment.OSVersion.Platform);
Console.WriteLine("OS Major Version : " +
Environment.OSVersion.Version.Major);
Console.WriteLine("OS Minor Version : " +
Environment.OSVersion.Version.Minor);
Console.WriteLine("CLR Version : " + Environment.Version);
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
بدست آوردن Handle و عنوان پنجره ی فعال جاری
using System.Runtime.InteropServices;
سپس تعریف :
// Declare external functions.
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd,
StringBuilder text, int count);
و نهایتا افزودن سه لیبل و یک تایمر (مثلا با نام tmrRefresh) به برنامه و فعال کردن رویداد Tick آن :
private void tmrRefresh_Tick(object sender, EventArgs e)
{
int chars = 256;
StringBuilder buff = new StringBuilder(chars);
// Obtain the handle of the active window.
IntPtr handle = GetForegroundWindow();
// Update the controls.
if (GetWindowText(handle, buff, chars) > 0)
{
lblCaption.Text = buff.ToString();
lblHandle.Text = handle.ToString();
if (handle == this.Handle)
{
lblCurrent.Text = "True";
}
else
{
lblCurrent.Text = "False";
}
}
}
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
بدست آوردن اطلاعاتی از نسخه ویندوز موجود بوسیله توابع API
using System.Runtime.InteropServices;
// Define the structure and specify the layout type as sequential.
[StructLayout(LayoutKind.Sequential)]
public class OSVersionInfo
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public String szCSDVersion;
}
[DllImport("kernel32.dll")]
public static extern bool GetVersionEx([In, Out] OSVersionInfo osvi);
static void Main(string[] args)
{
OSVersionInfo osvi = new OSVersionInfo();
osvi.dwOSVersionInfoSize = Marshal.SizeOf(osvi);
// Obtain the OS version info.
GetVersionEx(osvi);
// Display the version information.
Console.WriteLine("Class size: " + osvi.dwOSVersionInfoSize);
Console.WriteLine("Major Version: " + osvi.dwMajorVersion);
Console.WriteLine("Minor Version: " + osvi.dwMinorVersion);
Console.WriteLine("Build Number: " + osvi.dwBuildNumber);
Console.WriteLine("Platform Id: " + osvi.dwPlatformId);
Console.WriteLine("CSD Version: " + osvi.szCSDVersion);
Console.WriteLine("Platform: " + Environment.OSVersion.Platform);
Console.WriteLine("Version: " + Environment.OSVersion.Version);
// Wait to continue.
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Main method complete. Press Enter.");
Console.ReadLine();
}
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
بدست آوردن Handle تمامی پنجره های موجود در سیستم
using System.Runtime.InteropServices;
// The signature for the callback method.
public delegate bool CallBack(IntPtr hwnd, int lParam);
[DllImport("user32.dll")]
public static extern int EnumWindows(CallBack callback, int param);
[DllImport("user32.dll")]
public static extern int GetWindowText(IntPtr hWnd,
StringBuilder lpString, int nMaxCount);
static void Main(string[] args)
{
// Request that the operating system enumerate all windows,
// and trigger your callback with the handle of each one.
EnumWindows(DisplayWindowInfo, 0);
Console.ReadLine();
}
// The method that will receive the callback. The second
// parameter is not used, but is needed to match the
// callback's signature.
public static bool DisplayWindowInfo(IntPtr hWnd, int lParam)
{
int chars = 100;
StringBuilder buf = new StringBuilder(chars);
if (GetWindowText(hWnd, buf, chars) != 0)
{
Console.WriteLine(buf);
}
return true;
}
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
ساختن یک سند word و باز کردن آن در MSWord
ابتدا روی پروژه کلیک راست کرده، Add Reference و اسمبلیهای زیر را را اضافه نمایید:- Microsoft.Office.Core
- Microsoft.Vbe.Interop
- Microsoft.Office.Interop.Word
سپس :
using Word = Microsoft.Office.Interop.Word;
private static object n = Type.Missing;
static void Main(string[] args)
{
// Start Word in the background.
Word.ApplicationClass app = new Word.ApplicationClass();
app.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
// Create a new document (this is not visible to the user).
Word.Document doc = app.Documents.Add(ref n, ref n, ref n,
ref n);
// Add a heading and two lines of text.
Word.Range range = doc.Paragraphs.Add(ref n).Range;
range.InsertBefore("Test Document");
string style = "Heading 1";
object objStyle = style;
range.set_Style(ref objStyle);
range = doc.Paragraphs.Add(ref n).Range;
range.InsertBefore("Line one.\nLine two.");
range.Font.Bold = 1;
// Show a print preview, and make Word visible.
doc.PrintPreview();
app.Visible = true;
}
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
بدست آوردن اطلاعاتی (مانند: سرعت، نوع و ...) از کانکشنهای شبکه ای موجود لوکال
using System.Net.NetworkInformation;
static void ShowConnectionInfo()
{
// Only proceed if there is a network available.
if (NetworkInterface.GetIsNetworkAvailable())
{
// Get the set of all NetworkInterface objects for the local
// machine.
NetworkInterface[] interfaces =
NetworkInterface.GetAllNetworkInterfaces();
// Iterate through the interfaces and display information.
foreach (NetworkInterface ni in interfaces)
{
// Report basic interface information.
Console.WriteLine("Interface Name: {0}", ni.Name);
Console.WriteLine(" Description: {0}", ni.Description);
Console.WriteLine(" ID: {0}", ni.Id);
Console.WriteLine(" Type: {0}", ni.NetworkInterfaceType);
Console.WriteLine(" Speed: {0}", ni.Speed);
Console.WriteLine(" Status: {0}", ni.OperationalStatus);
// Report physical address.
Console.WriteLine(" Physical Address: {0}",
ni.GetPhysicalAddress().ToString());
// Report network statistics for the interface.
Console.WriteLine(" Bytes Sent: {0}",
ni.GetIPv4Statistics().BytesSent);
Console.WriteLine(" Bytes Received: {0}",
ni.GetIPv4Statistics().BytesReceived);
// Report IP configuration.
Console.WriteLine(" IP Addresses:");
foreach (UnicastIPAddressInformation addr
in ni.GetIPProperties().UnicastAddresses)
{
Console.WriteLine(" - {0} (lease expires {1})",
addr.Address, DateTime.Now +
new TimeSpan(0, 0, (int)addr.DhcpLeaseLifetime));
}
Console.WriteLine(Environment.NewLine);
}
}
else
{
Console.WriteLine("No network available.");
}
Console.ReadLine();
}
منبع : Visual C# 2005 Recipes: A Problem-Solution Approach
-
معرفی NDoc : ابزاری رایگان و کارآمد برای تولید مستندات
NDoc یک ابزار رایگان و سورس باز است که توضیحات نوشته شده بشکل XML در متن برنامه را بصورت یک راهنمای یکپارچه از نوع chm و به چیزی شبیه به مستندات MSDN مایکروسافت تبدیل میکند.
NDoc در حال حاضر تنها بر روی سیستم عامل ویندوز کار میکند و خروجی آن به یکی از دو شکل chm و html میتواند باشد.
بصورت کلی : در میان ابزارهای شناخته شده برای مستندسازی سی شارپ؛ NDoc یکی از مناسبترین انتخابهاست.
نقل قول:
NDoc generates class library documentation from .NET assemblies and the XML documentation files generated by the C# compiler (or with an
add-on tool for VB.NET). NDoc uses pluggable documenters to generate documentation in several different formats, including the MSDN-style HTML Help format (.chm), the Visual Studio .NET Help format (HTML Help 2), and
MSDN-online style web pages.
یک نمونه ی آنلاین از خروجی NDoc
توضیحات بیشتر در Wiki
برخی از تصاویر برنامه
دانلود و آشنایی با برنامه
آشنایی با Documentation generator
مقایسه بین انواع Documentation Generator ها
-
معرفی CodeSmith : ابزاری جهت ساخت قالب و تولید کد
نقل قول:
CodeSmith is a software development tool to help you get your job done faster. Technically speaking it is a template driven code generator that automates the creation of common application code for any language (C#, Java, VB, PHP, ASP.NET, SQL, etc.).
CodeSmith includes many useful templates as well as entire sets of templates for generating proven architectures (.netTiers, CSLA, NHibernate, PLINQO, Wilson's ORMapper, APOSA, and more). You can easily modify any templates or write your own to generate your code exactly the way you want it.
CodeSmith یک ابزار تولید کد و قالب است که بسادگی کدهای بکار رفته در معماریها و روشهای شناخته شده پیاده سازی را برای برنامه شما تولید میکند.
برای مثال : شما تنها کافیست که دیتابیس برنامه ی خود را در اختیار آن قرار دهید تا:
تمامی کلاسها، رابطه ها و لایه ها را مطابق با الگو و معماری درخواستی تولید کند.
(خود شما نیز میتوانید قالب و الگوی دلخواهتان را برای تولید کد در آن ایجاد کنید و در واقع خروجی آن را Customize کنید.)
به کمک تلفیقی از قالبهای آماده ای چون netTiers در کنار CodeSmith شما قدرت و توانایی بسیار زیادی جهت پیاده سازی آسان معماریها و الگوهای معتبر پیدا میکنید.
CodeSmith رایگان نیست. جهت مقایسه قیمت نسخه های مختلف آن میتوانید به این لینک مراجعه کنید.
سایت اصلی CodeSmtih جهت دانلود نسخه آزمایشی
دیدن تصاویری از برنامه
آموزش تصویری ساخت یک Data Access Layer (مطابق با Microsoft’s Enterprise Library) در کمتر از 15 دقیقه
-
معرفی netTiers : مجموعه ای بی نظیر و رایگان از قالبهای آماده جهت تولید کد
netTiers مجموعه ای رایگان از قالبهای آماده و سورس باز جهت استفاده در ابزارهای تولید اتوماتیک کد مانند CodeSmith است. در این مجموعه تمامی معماریها و Pattern های معتبر و توصیه شده جهت تولید کد لحاظ شده اند.
نقل قول:
.netTiers is a set of open source code generation templates that simplify the tasks of creating customized Application Tiers for your Microsoft.Net applications in just a few minutes.
.netTiers utilizes the power of the best code generation tool available today, CodeSmith Tools. .netTiers generated architecture is custom to your domain, uses familiar patterns, and follows the guidance of Microsoft's recommended patterns and practices. In fact, the .netTiers base architecture is built upon the Microsoft Enterprise Library Application Blocks. Oh right, .netTiers is FREE!
دانلود مجموعه با حجم کمتر از 4 مگابایت
آشنایی بیشتر
تاریخچه تغییرات
-
عوض کردن تصویر پشت زمینه desktop با کدنویسی
using System.Runtime.InteropServices;
using System.Drawing;
using Microsoft.Win32;
public class Wallpaper
{
const int SPI_SETDESKWALLPAPER = 20;
const int SPIF_UPDATEINIFILE = 0x01;
const int SPIF_SENDWININICHANGE = 0x02;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(
int uAction, int uParam, string lpvParam, int fuWinIni);
public enum Style : int
{
Tiled, Centered, Stretched
}
public void SetWallpaper(string path, Style style)
{
RegistryKey key = Registry.CurrentUser.OpenSubKey(
"Control Panel\\Desktop", true);
switch( style )
{
case Style.Stretched :
key.SetValue(@"WallpaperStyle", "2") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Centered :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "0") ;
break;
case Style.Tiled :
key.SetValue(@"WallpaperStyle", "1") ;
key.SetValue(@"TileWallpaper", "1") ;
break;
}
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path,
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
}
}
نحوه ی استفاده :
private void setButton_Click(object sender, EventArgs e)
{
Wallpaper w = new Wallpaper();
w.SetWallpaper(fileName,
(Wallpaper.Style)Enum.Parse(typeof(Wallpaper.Style ), "Tiled"));
}
منبع : http://blogs.msdn.com/coding4fun/arc...31/912569.aspx
چند نمونه برنامه ی آماده :
http://www.codeproject.com/KB/cs/wallpaperchanger.aspx
http://www.codeproject.com/KB/applic...allpaperq.aspx
-
فقط یک نمونه از برنامه بتواند اجرا شود (با استفاده از WMI)
ابتدا System.Management رو به References پروژه بیفزایید و سپس :
using System.Reflection;
using System.Management;
[STAThread]
static void Main()
{
string[] parts =
Assembly.GetExecutingAssembly().Location.Split("\\ ".ToCharArray());
string appName = parts[parts.Length - 1];
string query = "select name from CIM_Process where name = '"
+ appName + "'";
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
int runcount = 0;
foreach (ManagementObject item in searcher.Get())
{
runcount++;
if (runcount > 1) break;
}
if (runcount == 1)
{
Application.Run(new Form1());
}
else
{
System.Windows.Forms.MessageBox.Show("قبلا اجرا شده");
Application.Exit();
}
}
منبع : http://weblogs.asp.net/rchartier/arc...5/22/7410.aspx
-
اعتبار سنجی آدرسهای ایمیل به کمک عبارات منظم
using System.Text.RegularExpressions;
public bool TestEmailRegex(string emailAddress)
{
string patternStrict = @"^(([^<>()[\]\\.,;:\s@\""]+"
+ @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
+ @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
+ @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+"
+ @"[a-zA-Z]{2,}))$";
Regex reStrict = new Regex(patternStrict);
bool isStrictMatch = reStrict.IsMatch(emailAddress);
return isStrictMatch;
}
منبع : http://geekswithblogs.net/VROD/archi...16/109007.aspx
-
تغییر زمان و تاریخ سیستم بوسیله کدنویسی
using System.Runtime.InteropServices;
public struct SYSTEMTIME
{
public short wYear;
public short wMonth;
public short wDayOfWeek;
public short wDay;
public short wHour;
public short wMinute;
public short wSecond;
public short wMilliseconds;
}
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetSystemTime([In] ref SYSTEMTIME st);
و یک مثال از نحوه ی استفاده :
private void Form1_Load(object sender, EventArgs e)
{
SYSTEMTIME st = new SYSTEMTIME();
st.wYear = 2003; // must be short
st.wMonth = 5;
st.wDay = 22;
st.wHour = 0;
st.wMinute = 0;
st.wSecond = 0;
SetSystemTime(ref st); // invoke this method.
}
منبع : http://www.codeguru.com/forum/archiv.../t-246724.html
-
معرفی لینکهای مفید در ارتباط با API های ویندوز
نقل قول:
PInvoke.net is primarily a wiki, allowing developers to find, edit and add PInvoke
* signatures, user-defined types, and any other information related to calling Win32 and other unmanaged APIs from managed code (written in languages such as C# or VB.NET).
_______________________________
این لیست به مرور تکمیلتر خواهد شد...
-
معرفی لینکهای مفید جهت آموزش سریع UML تنها با یک نگاه!
_____________________________
این لیست به مرور تکمیلتر خواهد شد.
-
معرفی GhostDoc : ابزاری رایگان برای تولید اتوماتیک XML Comments در کدنویسی
یک Add-in رایگان برای محیط VS است که بصورت اتوماتیک توضیحاتی راجع به کدهای شما بصورت XML ایجاد میکند.
استفاده از این ابزار در کنار NDoc که قبلا در همین تاپیک معرفی شد؛ بسیار مفید بوده و کار مستندسازی شما را بینهایت راحت میکند.
نقل قول:
<summary>
GhostDoc is a free add-in for Visual Studio that automatically generates XML
documentation comments for C#. Either by using existing documentation inherited
from base classes or implemented interfaces, or by deducing comments from
name and type of e.g. methods, properties or parameters.
</summary>
سایت اصلی محصول
دانلود نسخه مختص ویژوال استادیو 2005
دانلود نسخه مختص ویژوال استادیو 2008
نقل قول:
If you’re generating documentation for a property or method that uses a type in the .NET Framework, GhostDoc will use the documentation that Microsoft has already written for that type. Assuming you use Pascal casing or camel casing, GhostDoc can break apart the name into words and analyze those individual words to generate the documentation. All of the documentation logic is handled by GhostDoc’s generation rules. The built-in rules can be customized and new ones can be added. These rules can be exported for use on other machines as well.
Except for the simplest members, you can’t rely on GhostDoc to write your XML comments for you completely. GhostDoc’s auto-generated comments are suggestions and should be reviewed by a developer. Regardless, GhostDoc serves as a good first stab at documentation and is a great time-saver.
-
معرفی NET Reflector. : ابزاری رایگان جهت آنالیز و decompile کردن اسمبلیها
توسط این برنامه کوچک و رایگان میتوانید فایل اجرایی و اسمبلیهای ایجاد شده توسط دات نت رو مورد بررسی قرار داده و آنها را به سورس اولیه برگردانید.
از طریق این برنامه حتی میتوانید سورس کتابخانه های دات نت (برای مثال سورس کلاس ArrayList و ...) رو نیز مشاهده نمایید.
http://www.aisto.com/roeder/dotnet/Reflector.png
نقل قول:
Reflector is the class browser, explorer, analyzer and documentation viewer for .NET. Reflector allows to easily view, navigate, search, decompile and analyze .NET assemblies in C#, Visual Basic and IL.
Reflector.zip -
.NET Reflector, Version 5.1.0.0,
Add-Ins
دانلود برنامه و مشاهده سایت اصلی
Add-in هایی مشابه جهت توسعه IDE
و این هم Reflexil
-
معرفی NHibernate : ابزاری رایگان و کارآمد جهت نگاشت مدل آبجکتیو به رابطه ای
NHibernate ابزاری رایگان و سورس باز است که برای نگاشت بین OO و RD در دات نت استفاده میشود. (و یا بصورت خلاصه یک ORM)
این ابزار مشابه آینه وار محصولی چون Hibernate است که دقیقا به همین منظور و برای جاوا کارها ایجاد شده است.
برخی از ویژگیها :
نقل قول:
NHibernate key features:- Natural programming model - NHibernate supports natural OO idiom; inheritance, polymorphism, composition and the .NET collections framework, including generic collections.
- Native .NET - NHibernate API uses .NET conventions and idioms
- Support for fine-grained object models - a rich variety of mappings for collections and dependent objects
- No build-time bytecode enhancement - there's no extra code generation or bytecode processing steps in your build procedure
- The query options - NHibernate addresses both sides of the problem; not only how to get objects into the database, but also how to get them out again
- Custom SQL - specify the exact SQL that NHibernate should use to persist your objects. Stored procedures are supported on Microsoft SQL Server.
- Support for "conversations" - NHibernate supports long-lived persistence contexts, detach/reattach of objects, and takes care of optimistic locking automatically
- Free/open source - NHibernate is licensed under the LGPL (Lesser GNU Public License)
سایت رسمی : www.nhibernate.orgدانلود برنامه
مستندات و راهنما
اطلاعات بیشتر
-
معرفی NET Obfuscator. : ابزاری جهت محافظت از اسمبلیها
obfuscation : در لغت به معنای تیره کردن و مبهم کردن است
و NET Obfuscator. نیز ابزاری است غیر رایگان(!) که توسط آن میتوانید تا حدودی با پیچیده کردن کد IL اسمبلیهای تولیدی خود را در برابر ابزارهایی مانند Reflector ها و سایر برنامه های آنالیز کد محافظت نمایید.
اساس کار اینگونه نرم افزارها عمدتا بر اساس تغییر نام (کلاسها، متودهاو ...) و اینکریپت کردن رشته های متنی است. (برای مثال و همانطور که میدانید رشته های متنی بصورت Clear Text در IL قرار میگیرند که این میتواند نقطه ضعفی بزرگ جهت نفوذ و ک.ر.ک برنامه ها لحاظ گردد.)
برخی از ویژگیها :
نقل قول:
Leading .NET Code Security.NET Code Efficiency
سایت رسمی برنامه : http://www.preemptive.com/products/d...tor/index.html
سئوالاتی که مکررا پرسیده میشوند
ویژگیهای برنامه
دانلود نسخه آزمایشی
هرچند که استفاده از ابزاری مانند Obfuscator کمی کد را پیچیده تر میکند و در واقع بهتر از هیچی است اما هیچگاه جهت دستیابی به امنیت تنها به آن تکیه نکنید. بهمین دلیل دیدن لینک زیر نیز ممکنه خالی از لطف نباشد :
http://www.codeproject.com/KB/securi...fuscation.aspx
-
دستیابی به تاریخ شمسی با استفاده از PersianCalender
using System.Globalization;
public string Miladi2Shamsi(DateTime _date)
{
PersianCalendar pc = new PersianCalendar();
StringBuilder sb = new StringBuilder();
sb.Append(pc.GetYear(_date).ToString("0000"));
sb.Append("/");
sb.Append(pc.GetMonth(_date).ToString("00"));
sb.Append("/");
sb.Append(pc.GetDayOfMonth(_date).ToString("00"));
return sb.ToString();
}
نحوه ی استفاده، برای مثال تاریخ امروز :
string today = Miladi2Shamsi(DateTime.Now);
خروجی این تابع رشته ای در قالب "YYYY:MM:DD" مانند : "1386/12/25" خواهد بود.
-
تبدیل رشته حاوی تاریخ شمسی به متناظر میلادی آن
using System.Globalization;
public DateTime Shamsi2Miladi(string _date)
{
int year = int.Parse(_date.Substring(0, 4));
int month = int.Parse(_date.Substring(5, 2));
int day = int.Parse(_date.Substring(8, 2));
PersianCalendar p = new PersianCalendar();
DateTime date = p.ToDateTime(year, month, day, 0, 0, 0, 0);
return date;
}
ورودی این تابع رشته ای در قالب "YYYY:MM:DD" ؛ مانند : "1386/12/25" و یا "0087/01/01" باید باشد.
-
یک کلاس ژنریک برای سریالایز و دیسریالایز کردن به شکل XML
using System.IO;
using System.Xml.Serialization;
public class GenericSerialization<T> where T : new()
{
public static bool Serialize(object _object, string _path)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
FileStream fs = null;
try
{
fs = new FileStream(_path, FileMode.Create);
serializer.Serialize(fs, _object);
return true;
}
catch
{
return false;
}
finally
{
fs.Close();
}
}
public static T Deserialize(string _path)
{
T result;
XmlSerializer serializer = new XmlSerializer(typeof(T));
FileStream fs = new FileStream(_path, FileMode.OpenOrCreate);
try
{
result = (T) serializer.Deserialize(fs);
}
catch
{
result = new T();
}
finally
{
fs.Close();
}
return result;
}
}
-
1 ضمیمه
آشنایی با BackgroundWorker و دستکاری عناصر UI
در مثال زیر به کمک یک BackgroundWorker میخواهیم یک ListBox را پر کنیم :
ابتدا یک BackgroundWorker بنام worker و یک button و listBox به فرم خود اضافه کنید.
delegate void MyDelegate(string s);
void worker_DoWork(object sender, DoWorkEventArgs e)
{
MyDelegate md = new MyDelegate(AddItems);
for (int i = 0; i < 10; i++)
{
this.Invoke(md, (object)("ASync" + i.ToString()));
System.Threading.Thread.Sleep(500);
}
}
private void AddItems(string s)
{
listBox1.Items.Add(s);
}
private void btnASync_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
worker.RunWorkerAsync();
}
مثال بالا + مقایسه آن با حالت بدون استفاده از BackgroundWorker ضمیمه شده است.
یک لینک مفید جهت مطالعه ی بیشتر
-
abstract class یا کلاس مجرد چیست؟
abstract class ,کلاس غیر قطعی و ناتمامی است که در سطح فرزندانش باید پیاده سازی آن تکمیل گردد.
ویژگیهای abstract class :
- در اعلان کلاس abstract از کلمه کلیدی abstract قبل از class استفاده می کنیم.
- اگر کلاسی تنها یک رفتار و یا خاصیت غیر قطعی داشته باشد آن کلاس تبدیل به یک کلاس مجرد و غیر قطعی میگردد.
- abstract class ها non-instantiatable هستند.در واقع به علت ناتمام بودن پیاده سازیشان نمی توانیم از آنها instanceبسازیم.
- abstract class ها حداقل یک یا بیشتر متود یا پروپرتی abstract دارند.abstract member ها بدون هیچگونه پیاده سازی فقط declare می شوند.abstract member ها قابل تعریف در کلاسی غیر از کلاس abstract نیستند.
- کلاسهای فرزند abstract class باید تمامی abstract member ها را پیاده سازی کنند.
- از کلمه کلیدی sealed در اعلان abstract class نمی توانیم استفاده کنیم .در واقع abstract class باید توسط فرزندانش به ارث رود.
- متودهای مجرد و غیر قطعی که نیاز به overrid شدن دارند ,نیازی به کلمه کلیدی virtual ندارند .در واقع کلمه کلیدی virtual در کلمه abstract نهفته است.
-
Method overloading چیست؟
تعریف Method overloading : به امکان تعریف چندین متود با نام یکسان اما متفاوت درامضا( نوع و تعداد پارامترها )در یک کلاس گفته می شود .در واقع امکان داشتن ورژنهای مختلفی از یک متود درون یک کلاس.موارد زیر در Method overloading مطرح می باشند:
- برای overload کردن یک متود باید متودهایی با signature های متمایز از یکدیگر ایجاد کنیم.signature هر متود شامل نوع , ترتیب و تعداد پارامترها می باشد.
- return type یا مقدار برگشتی هر متود شامل signature متود نمی شود ,در #c مجاز نیستیم 2متود با signature یکسان امابا مقادیر برگشتی متفاوت داشته باشیم.
مثال :
public class MyMathClass
{
public int AddNum(int x)
{
return x + x;
}
public int AddNum(int x, int y)
{
return x + y;
}
public float AddNum(float x)
{
return x + x;
}
}
منبع:سری های آموشی TestOut
-
کالکشنهای معمولی در مقابل کالکشنهای ژنریک
در این مقایسه سعی شده مطالب بصورت خلاصه و مفید مطرح بشه. جهت اطلاعات دقیقتر به مستندات دات نت فریمورک مراجعه نمایید.
همانطور که میدونید ما دو مدل کالکشن داریم :
- کالکشنهای معمولی (مثل ArrayList)
- کالکشنهای ژنریک (مثل <>List)
در مورد کالکشنهای ساده :
چون توسعه دهندگان دات نت نمیدونستند که استفاده کنندگان قراره چه چیزی رو درون یک کالکشن بریزند (در واقع هرچیزی ممکنه : از یک نمونه person گرفته تا یک عدد یا رشته) اومدن و گفتن کالکشنهای ما آیتمهایی از نوع Object قبول میکنه در نتیجه برنامه نویسان بعدی میتونستند هرچیزی رو در آن نگهداری کنند. این داستان دو مشکل عمده دارد :
1- Boxing و unBoxing : یعنی شما زمانی که یک آیتم را به لیست اضافه میکنید باید تبدیل به یک Object شه (boxing) و زمانی که اون رو از لیست میخونید باید اون رو به تایپ مورد نظر خودتون cast کنید(unboxing) که این موضوع پر هزینه ای است.
2- Type safety وجود ندارد. یعنی شما هرچیزی رو میتونید درون یک arrayList بریزید بدون آنکه کامپایلر به شما هشدار دهد و گاه با یک اشتباه کوچیک برنامه شما در زمان اجرا crach میکند.
ArrayList list = new ArrayList();
list.Add(new Person());
list.Add("new Person()"); // its ok at compile time!
list.Add(new Person());
و اما در کالکشنهای ژنریک (که با دات نت 2.0 آغاز شدند) شما در زمان کد نویسی مشخص میکنید که با چه تایپی میخواهید کار کنید. این موضوع دو حسن کلی دارد :
1- عملیات boxing و unboxing حذف و لذا performace بیشتر میشود
2- عملیات افزودن آیتم به لیست safe میشود چون اگر چیزی غیر از آنچه مشخص شده را درون لیست بریزید در کامپایل تایم به error برمیخورید.
List<Person> persons = new List<Person>();
persons.Add(new Person());
persons.Add("new Person()"); // error in compile time
persons.Add(new Person());
-
سفارشی کردن پیشفرض آیتمهای قابل اضافه شدن به یک کنترل در زمان طراحی
عجب عنوان پیچیده و مبهمی شد ! (واقعا نمیشد راحتتر از این بیان کرد)
مثال :
فرض کنید که کنترل منو (MenuStrip) را کاملا سفارشی کرده اید. اما در زمان طراحی این کنترل همچنان آیتمهایی از نوع ToolStripMenuItem میگیرد؛ در حالیکه شما میخواهید آیتمهایی که در زمان طراحی به آن اضافه میشوند از نوع کلاس دیگری باشد که آن را نیز سفارشی کرده اید (فرضا MyToolStripMenuItem) برای انجام اینکار باید خاصیت verbs کلاس MyMenuStrip را override کنید.
مثال :
using System.ComponentModel.Design;
public override System.ComponentModel.Design.DesignerVerbCollectio n Verbs
{
get
{
DesignerVerbCollection v = new DesignerVerbCollection();
v.Add(new DesignerVerb("Sample Verb", new EventHandler
(SampleVerbHandler)));
return v;
}
}
private void SampleVerbHandler(object sender, System.EventArgs e)
{
MessageBox.Show("You clicked the test designer verb!");
}
نقل قول:
If your component has common actions that are performed on it, it is often useful to expose these actions as a "verb" from the component. To see verbs in action, drop a TabControl on the VS .NET Windows Forms designer and you will see two hyperlinks show up in the property browser. One says "Add Tab" and one says "Remove Tab." As the names suggest, these actions will add or remove a tab from the TabControl. You will also see these verbs on the context menu if you right-click on the TabControl itself.
منبع : http://msdn2.microsoft.com/en-us/library/ms973820.aspx
سئوال و جوابهای مفید در این زمینه
چند مثال :
http://www.devarticles.com/c/a/C-Sha...port-Part-2/3/
http://www.developerfusion.co.uk/show/4411/4/