برگزیده های پرشین تولز

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

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
به دست آوردن لیست کاربران یک گروه خاص در سیستم
کد:
DirectoryEntry localMachine = new DirectoryEntry( "WinNT://"+
Environment.MachineName);
            DirectoryEntry admGroup = localMachine.Children.Find(txtGroupName.Text, "group");

            object members = admGroup.Invoke("members", null);
            foreach (object groupMember in (IEnumerable)members)
            {
                DirectoryEntry member = new DirectoryEntry(groupMember);
                Console.WriteLine("UserName: {0}",member.Name);
            }
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
تعیین اینکه کاربر جاری ادمین هست یا نه
کد:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
string role = "BUILTIN\\Administrators";
bool IsAdmin = principal.IsInRole(role));
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
قرار دادن یک کنترل داخل منو

حتما دیدید که توی بعضی نرم افزار ها داخل یک منو آیتم یک کنترل وجود داره. مثلا یه منو که توی اون یک ComboBox نشون داده می شود. یا هر کنترل دیگری شبیه به اون.
برای اینکار یه کلاسی وجود داره به نام ToolStripControlHost
شما می تونین با ساختن یک object از این کلاس و پاس کردن کنترل مورد نظر در Constructor اون و در نهایت اضافه کردن اون به مثلا Menu یا ContextMenu و یا Toolbar از اون استفاده کنین.
PHP:
 private void Form1_Load(object sender, EventArgs e)
        {
            MonthCalendar picker = new MonthCalendar();
            picker.DateSelected += new DateRangeEventHandler(picker_DateSelected);
            ToolStripControlHost host = new ToolStripControlHost(picker);
            fileToolStripMenuItem.DropDownItems.Insert(2,host);
        }
        void picker_DateSelected(object sender, DateRangeEventArgs e)
        {
            MonthCalendar picker = ((MonthCalendar)sender);
            this.Text = picker.SelectionStart.ToString("yyyy/MMM/dd");
        }
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
یک مثال ساده از پیاده سازی delegate
فرض کنید متود ساده زیر را داریم و میخواهیم به عنوان پارامتر به متود دیگری ارسال کنیم
کد:
public void DisplayNumber(int num)
{
MessageBox.Show(string.Format("The value is {0}", num));
}
ابتدا نوع داده ای جدیدی ازdelegate با همین signature یعنی از نوع void و با پارامتر ی از نوع int تعریف می کنیم:
کد:
public delegate void ProcessNumber(int number);
سپس متغیری از نوع داده ا ی delegate تعریف شده به صورت زیر اعلان میکنیم :
کد:
ProcessNumber pn = new ProcessNumber(DisplayNumber);
حال میتوان این متغیر را به عنوان پارامتر به هر متود دلخواهی صادر کرد (مثلا متود زیر):
کد:
public int MultiplyNumbers(int a, int b, ProcessNumber pn)
{
int op = a * b;
pn(op);
return op;
}
با این فراخوانی :
کد:
MultiplyNumbers(4, 5, pn);
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
به دست آوردن تعداد خطوط متن در یک textBox

API مربوطه
کد:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
         const  uint EM_GETLINECOUNT = 0xBA;
        IntPtr wp=IntPtr.Zero;
        IntPtr lp=IntPtr.Zero;

طریقه استفاده
کد:
IntPtr lines = SendMessage(textBox1.Handle, EM_GETLINECOUNT,wp,lp);
            MessageBox.Show(lines.ToInt32().ToString());
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
مساله:
مساله برج هانوی (Tower of Hanoi) یکی از مسائل جذاب، قدیمی و مشهور است که به یک مساله کلاسیک در علوم کامپیوتر تبدیل شده است. تاریخچه مساله از این قرار است:
در محوطه معبدی در آسیای دور سه میله الماسی قرار داشت که یکی از آنها حاوی تعدادی قرص طلایی بود. کاهنان معبد در تلاش بودند تا قرص های طلائی را از آن میله به یکی دیگر از میله ها تحت شرایطی انتقال دهند، و باور داشتند که با تمام شدن انتقال قرص ها عمر جهان نیز به پایان خواهد رسید! میله اولیه ۶۴ قرص داشت، که بر روی هم به طور نزولی بر اساس اندازه شان چیده شده بودند.




سه میله داریم: یکی از میله ها میله مبدا (A) ، یکی میله کمکی (B) و دیگری میله مقصد (C) است. هدف انتقال تمام دیسک ها از میله مبدا به میله مقصد با رعایت شرایط زیر است:
در هر زمان فقط یک دیسک را می توان جابجا نمود.
نباید در هیچ زمانی دیسکی بر روی دیسک با اندازه کوچکتر قرار بگیرد.

attachment.php
 

فایل های ضمیمه

  • hanoi.jpg
    hanoi.jpg
    5 KB · نمایش ها: 36
  • Tower of hanoi.rar
    54 KB · نمایش ها: 15

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
برعکس کردن ترتیب آیتمهای یک آرایه

int[] someArray = new int[5] { 1, 2, 3, 4, 5 };
Array.Reverse(someArray);
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
تبدیل آرایه از بایتها به یک رشته و بلعکس

کد:
//You have a byte[] representing some binary information, such as a bitmap.
// You need to encode this data into a string so that it can be sent over 
// a binary-unfriendly transport, such as email.

public string Base64EncodeBytes(byte[] inputBytes)
{
    return (Convert.ToBase64String(inputBytes));
}
کد:
//You have a String that containsinformation such asa bitmap encoded 
// asbas e64. You need to decode this data (which may have been embedded in an 
// email message) from a String into a byte[] so that you can access 
// the original binary.

public byte[] Base64DecodeString(string inputStr)
{
    byte[] decodedByteArray = Convert.FromBase64String(inputStr);
    return (decodedByteArray);
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
هرس کردن یک رشته متنی(حذف حروف خاص)
PHP:
private void PruningCharacters()
{
    string foo = "--TEST--";
    Console.WriteLine(foo.Trim(new char[] {'-'})); // Displays "TEST"
    foo = ",-TEST-,-";
    Console.WriteLine(foo.Trim(new char[] {'-',','})); // Displays "TEST"
    foo = "--TEST--";
    Console.WriteLine(foo.TrimStart(new char[] {'-'})); // Displays "TEST--"
    foo = ",-TEST-,-";
    Console.WriteLine(foo.TrimStart(new char[] {'-',','})); // Displays "TEST-,-"
    foo = "--TEST--";
    Console.WriteLine(foo.TrimEnd(new char[] {'-'})); // Displays "--TEST"
    foo = ",-TEST-,-";
    Console.WriteLine(foo.TrimEnd(new char[] {'-',','})); //Displays ",-TEST"
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
بدست آوردن تعداد خطوط یک رشته

کد:
using System.Text.RegularExpressions;
کد:
public static long LineCount2(string source, bool isFileName)
{
    if (source != null)
    {
        string text = source;
        long numOfLines = 0;
        if (isFileName)
        {
            using (FileStream FS = new FileStream(source, FileMode.Open,
            FileAccess.Read, FileShare.Read))
            {
                using (StreamReader SR = new StreamReader(FS))
                {
                    while (text != null)
                    {
                        text = SR.ReadLine();
                        if (text != null)
                        {
                            ++numOfLines;
                        }
                    }
                }
            }
            return (numOfLines);
        }
        else
        {
            Regex RE = new Regex("\n", RegexOptions.Multiline);
            MatchCollection theMatches = RE.Matches(text);
            return (theMatches.Count + 1);
        }
    }
    else
    {
        // Handle a null source here.
        return (0);
    }
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
بدست آوردن تک تک مقادیر از یک رشته ی مرکب مرزبندی شده
کد:
//Using the Split instance method on the String class, you can place the delimited
//information into an array in as little as a single line of code.

private void GetItemsFromDelimitedString()
{
    string delimitedInfo = "100,200,400,3,67";
    string[] discreteInfo = delimitedInfo.Split(new char[] { ',' });
    foreach (string Data in discreteInfo)
        MessageBox.Show(Data);
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
تبدیل درجه به رادیان و بلعکس
کد:
public static double ConvertDegreesToRadians(double degrees)
{
    return ((Math.PI / 180) * degrees);
}

کد:
public static double ConvertRadiansToDegrees(double radians)
{
    return ((180 / Math.PI) * radians);
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
تبدیل یک IP به HostName و بلعکس
کد:
using System.Net;

public string ConvertIP2HostName(string ip)
{
    IPHostEntry iphost = Dns.GetHostEntry(ip);
    return iphost.HostName;
}

public string HostNameToIP(string hostName)
{
    IPHostEntry iphost = System.Net.Dns.GetHostEntry(hostName);
    IPAddress[] addresses = iphost.AddressList;
    StringBuilder addressList = new StringBuilder();
    foreach (IPAddress address in addresses)
    {
        addressList.AppendFormat("IP Address: {0};", address.ToString());
    }
    return addressList.ToString();
}

نحوه ی استفاده :
کد:
private void Form1_Load(object sender, EventArgs e)
{
    MessageBox.Show( Class4.ConvertIP2HostName("127.0.0.1"));
    MessageBox.Show(Class4.HostNameToIP("laptop"));
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
خواندن خواص (Attribute) یک دایرکتوری
کد:
using System.IO;
کد:
public static void DisplayDirectoryTimestamps(string path)
{
Console.WriteLine(Directory.GetCreationTime(path).ToString());
Console.WriteLine(Directory.GetLastAccessTime(path).ToString());
Console.WriteLine(Directory.GetLastWriteTime(path).ToString());
}
کد:
public static void DisplayTimestamps(DirectoryInfo dirInfo)
{
Console.WriteLine(dirInfo.CreationTime.ToString());
Console.WriteLine(dirInfo.LastAccessTime.ToString());
Console.WriteLine(dirInfo.LastWriteTime.ToString());
}
کد:
public static void DisplayDirectoryHiddenAttribute(string path)
{
DirectoryInfo dirInfo = new DirectoryInfo(path);
// Display whether this directory is hidden
Console.WriteLine("Is directory hidden? = " +
((dirInfo.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden));
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
دستکاری خواص (Attribute) یک دایرکتوری
کد:
using System.IO;
کد:
public static void ModifyDirectoryTimestamps(string path, DateTime dt)
{
Directory.SetCreationTime(path, dt);
Directory.SetLastAccessTime(path, dt);
Directory.SetLastWriteTime(path, dt);
}
کد:
public static void ModifyTimestamps(DirectoryInfo dirInfo, DateTime dt)
{
dirInfo.CreationTime = dt;
dirInfo.LastAccessTime = dt;
dirInfo.LastWriteTime = dt;
}
کد:
public static void MakeDirectoryHidden(DirectoryInfo dirInfo)
{
// Modify this directory's attributes
dirInfo.Attributes |= FileAttributes.Hidden;
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
تغییر نام دادن (Rename) یک دایرکتوری
کد:
using System.IO;

public static void RenameDirectory(string originalName, string newName)
{
    try
    {
        // "rename" it
        Directory.Move(originalName, newName);
    }
    catch (IOException ioe)
    {
        // most likely given the directory exists or isn't empty
        Console.WriteLine(ioe.ToString());
    }
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
خواندن خواص (Attribute) یک فایل
کد:
using System.IO;

public static void DisplayFileTimestamps(string path)
{
    Console.WriteLine(File.GetCreationTime(path));
    Console.WriteLine(File.GetLastAccessTime(path));
    Console.WriteLine(File.GetLastWriteTime(path));
}

public static void DisplayFileInfoTimestamps(FileInfo fileInfo)
{
    Console.WriteLine(fileInfo.CreationTime.ToString());
    Console.WriteLine(fileInfo.LastAccessTime.ToString());
    Console.WriteLine(fileInfo.LastWriteTime.ToString());
}

public static void DisplayFileHiddenAttribute(string path)
{
    if (File.Exists(path))
    {
        FileInfo fileInfo = new FileInfo(path);
        // Display whether this file is hidden
        Console.WriteLine("Is file hidden? = " +
        ((fileInfo.Attributes & FileAttributes.Hidden) ==
        FileAttributes.Hidden));
    }
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
دستکاری خواص (Attribute) یک فایل
کد:
using System.IO;

public static void ModifyFileTimestamps(string path)
{
    File.SetCreationTime(path, DateTime.Parse(@"May 10, 2003"));
    File.SetLastAccessTime(path, DateTime.Parse(@"May 10, 2003"));
    File.SetLastWriteTime(path, DateTime.Parse(@"May 10, 2003"));
}

public static void ModifyTimestamps(FileInfo fileInfo, DateTime dt)
{
    fileInfo.CreationTime = dt;
    fileInfo.LastAccessTime = dt;
    fileInfo.LastWriteTime = dt;
}

public static void MakeFileHidden(FileInfo fileInfo)
{
    // Modify this file's attributes
    fileInfo.Attributes |= FileAttributes.Hidden;
}
 

>-->O

همکار بازنشسته
تاریخ عضویت
25 نوامبر 2009
نوشته‌ها
2,530
لایک‌ها
468
محل سکونت
㋡ همین جا ㋡
گرد کردن و رُند کردن یک مقدار اعشاری

رُند کردن :
کد:
int x = (int)Math.Round(2.5555); // x == 3

گرد کردن تا دو رقم اعشار :

کد:
decimal x = Math.Round(2.5555, 2); // x == 2.56
 
بالا