ably ably برای هدایت شدن به سایت جدید اینجا کلیک کنید

آموزش برنامه نویسی

آموزش برنامه نویسی وب، اندروید، ویندوز , اسکیوال و...
Tell: 0912 097 5516
| Email: Hello@EduOnline.ir

۵۶ مطلب با موضوع «Web Development Teams :: C Sharp» ثبت شده است

آموزش Windows Forms Events Lifecycle

بسم الله الرحمن الرحیم


در ارتباط با Windows Form کتابها و مقالات زیادی وجود که به وسیله آن می توانید به سادگی راه و روش ایجاد یک برنامه را آموزش ببینید. در اینجا یک آموزش در خصوص ترتیب اجرای Event ها وجود دارد، اگر شما lifecycle فرم را بدانید بهتر می توانید اطلاع پیدا کنید که Event های خود را در کدام بخش بنویسید.
در مورد ASP.NET اطلاعات زیادی در خصوص ترتیب اجرا شدن Event ها وجود دارد اما در مورد Windows Form اطلاعات به سختی بدست خواهد آمد.

در ایجا لیست و ترتیب اجرای Event ها را برای شما قرار داده ام

•    Move: این رویداد زمانی اتفاق می افتد که فرم تغییر مکان دهد، اما دهنگام اجرای برنامه هرچند کاربر فرم را تغییر مکاتن نمی دهد ولی این رویداد اجرا می شود.
•    Load: این رویداد در اولین بار قبل از نمایش فرم اتفاق می افتد.
•    VisibleChanged: این رویداد با تغییر Visible اتفاق می افتد.
•    Activated: این رویداد  پس از Activated شدن توسط کد یا کاربر اتفاق می افتد.
•    Shown:این رویداد زمانی اتفاق می افتد که برای اولین بار فرم نمایش داده شده است.
•    Paint: این رویداد در زمانی که فرم ترسیم می شود اتفاق می افتد.
•    Deactivate: این رویداد در زمانی که فرم فوکس خود را از سدت یم دهد و یا فعال نیست اجرا می شود
•    Closing: این رویداد در زمانی که فرم در حال بسته شدن است اتفاق می افتد.
•    Closed: این رویداد در زمانی که فرم در شروع به بسته شدن می کند اتفاق می افتد.

ادامه مطلب...

متوقف کردن اجرای دستورات برای مدت زمان 5 ثانیه

بسم الله الرحمن الرحیم

در خصوص متوقف کردن و Sleep کردن برنامه چندین راه متفاوت وجود دارد.

با یک مثال صورت سوال را مشخص و سپس به سراغ پاسخ آن می رویم.

برنامه ای داریم که می خواهیم برای مدت زمان 5 ثانیه متوقف شود و مجددا به کار خود ادامه دهد؟

یکی از ابتدایی ترین راه ها ایجاد یک حلقه for طولانی است که به وسیله آن مدت زمانی را صرف اجرای این دستور کنید!

DateTime start = DateTime.Now;
for (int i = 1; i < 100000; i++)
{
    if ((DateTime.Now - start).TotalSeconds >= 5)
        break;
    Console.WriteLine("This is test no. "+ i+ "\n");
}

راه دوم، بررسی زمان جاری سیستم و ذخیره آن و در نهایت ایجاد یک حلقه تا زمانی است که مدت 5 ثانیه از زمان شروع کار گذشته باشد

    DateTime Tthen = DateTime.Now;
                do
                {
                    Application.DoEvents();
                } while (Tthen.AddSeconds(5) > DateTime.Now);     

ادامه مطلب...

SendKeys

بسم الله الرحمن الرحیم

در بعضی مواقع شما نیاز دارید که یکی از کامندهای کیبورد را خودتان اجرا کنید، مثلا شما می خواهید پس از بازشدن برنامه یک MessageBox باز شود و پس از آن اگر کاربر بر روی فرم شما کلیک کرد کامند Enter  کیبورد شما اجرا شود.

// Clicking Button1 causes a message box to appear. 
    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
        MessageBox.Show("Click here!");
    }


    // Use the SendKeys.Send method to raise the Button1 click event  
    // and display the message box.
    private void Form1_DoubleClick(object sender, System.EventArgs e)
    {

        // Send the enter key; since the tab stop of Button1 is 0, this
        // will trigger the click event.
        SendKeys.Send("{ENTER}");
    }

ادامه مطلب...

Strongly typed

بسم الله الرحمن الرحیم

Strongly typed

زبان های Strongly typed به شما اجازه نمی دهند که از یک نوع به نام یک نوع دیگر استفاده کنید. مثلا string به int

در Strongly typed به صورت اتوماتیک یک نوع به نوع دیگر تبدیل نمی شود. مثلا در زبان Perl می توانید یک رشته

شامل "123" در یک numeric قرار دهید و این به صورت اتوماتیک تبدیل به 123 می شود اما زبان های strongly typed این کار را انجام نمی دهند مثلا python یک زبان strongly typed است.

طبیعتا خطاهای زیادی را در هنگام کار کردن با سی شارپ مخصوصا LINQ در ارتباط با strongly typed مشاهده کردید:

مثال

var answer = 1 * "1";

این دستور اجرا نمی شود، بلکه شما باید خودتان به صورت صریح تبدیل نوع را انجام دهید.
اما در PHP دستور زیر اجرا می شود:

$x = "3" * 1; // is correct in php

CodeSnippets

بسم الله الرحمن الرحیم

برای نوشتن سریعتر دستورات سی شارپ می توانید از Snippets Code استفاده کنید برای استفاده از این ویژگی کافی است کلید CTRL را به همراه K فشار دهید و سپس کلید S را نیز بزنید حال لیست دستوراتی را مشاهده می کنید که می توانید آن ها را انتخاب کنید در زیر این لیست قرار داده شده است.

برای نوشتن تمامی دستورات زیر کافی است متن نوشته شده را بنویسید و سپس دو بار کلید TAB را از روی کیبورد فشار دهید

نام دستور

توضیحات

if#

Creates a #if directive and a #endif directive.

region#

Creates a #region directive and a #endregion directive.

~

Creates a destructor for the containing class.

attribute

Creates a declaration for a class that derives from Attribute.

checked

Creates a checked block.

class

Creates a class declaration.

ctor

Creates a constructor for the containing class.

cw

Creates a call to WriteLine.

do

Creates a do while loop.

else

Creates an else block.

enum

Creates an enum declaration.

equals

Creates a method declaration that overrides the Equals method defined in the Object class.

exception

Creates a declaration for a class that derives from an exception (Exception by default).

for

Creates a for loop.

foreach

Creates a foreach loop.

forr

Creates a for loop that decrements the loop variable after each iteration.

if

Creates an if block.

indexer

Creates an indexer declaration.

interface

Creates an interface declaration.

invoke

Creates a block that safely invokes an event.

iterator

Creates an iterator.

iterindex

Creates a "named" iterator and indexer pair by using a nested class.

lock

Creates a lock block.

mbox

Creates a call to MessageBox.Show. You may have to add a reference to System.Windows.Forms.dll.

namespace

Creates a namespace declaration.

prop

Creates an auto-implemented property declaration.

propfull

Creates a property declaration with get and set accessors.

propg

Creates a read-only auto-implemented property with a private "set" accessor.

sim

Creates a static int Main method declaration.

struct

Creates a struct declaration.

svm

Creates a static void Main method declaration.

switch

Creates a switch block.

try

Creates a try-catch block.

tryf

Creates a try-finally block.

unchecked

Creates an unchecked block.

unsafe

Creates an unsafe block.

using

Creates a using directive.

while

Creates a while loop.

جلوگیری از باز شدن چندین نسخه از نرم افزار

بسم الله الرحمن الرحیم

در بعضی نرم افزار ها شما می بایست اجازه اجرا کردن چندین نسخه از نرم افزار را از کاربر سلب نمایید.

برای اجرا کردن تنها یک نسخه از نرم افزار توسط کاربر می توان به صورت زیر عمل کنید:

فایل program.cs را باز کنید و در آن کد زیر را اضافه کنید

public static Process PriorProcess()
    // Returns a System.Diagnostics.Process pointing to
    // a pre-existing process with the same name as the
    // current one, if any; or null if the current process
    // is unique.
    {
        Process curr = Process.GetCurrentProcess();
        Process[] procs = Process.GetProcessesByName(curr.ProcessName);
        foreach (Process p in procs)
        {
            if ((p.Id != curr.Id) &&
                (p.MainModule.FileName == curr.MainModule.FileName))
                return p;
        }
        return null;
    }

حال متد Main را به صورت زیر عوض کنید:

[STAThread]
    static void Main()
    {
        if (PriorProcess() != null)
        {

            MessageBox.Show("Another instance of the app is already running.");
            return;
        }
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form());
    }

مشخض کردن فایل و فولدرهای تغییر داده شده

بسم الله الرحمن الرحیم

ممکن است در پروژه ی شما، برای چک کردن یک دایرکتوری (Folder) مجبور باشید برنامه ای بنویسید که دائم مسیر مشخصی را برای شما چک کند و در صورتی که فایلی ایجاد/ حذف / ویرایش شد به شما اطلاع داده شود.

اولین راه حل این است که شما شروع کنید در بازهای زمانی مشخص مسیری را که مد نظر دارید چک کنید!

اما کلاس FileSystemWatcher در NET 4.5. این امکان را به شما می دهد که بدون نیاز به چک کردن مداوم یک مسیر، در هر زمانی که فایلی تغییر داده شد شما اطلاع پیدا کنید. مثال

using System;
using System.IO;
using System.Security.Permissions;

public class Watcher
{

    public static void Main()
    {
    Run();

    }

    [PermissionSet(SecurityAction.Demand, Name="FullTrust")]
    public static void Run()
    {
        string[] args = System.Environment.GetCommandLineArgs();

        // If a directory is not specified, exit program.
        if(args.Length != 2)
        {
            // Display the proper way to call the program.
            Console.WriteLine("Usage: Watcher.exe (directory)");
            return;
        }

        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = args[1];
        /* Watch for changes in LastAccess and LastWrite times, and
           the renaming of files or directories. */
        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
           | NotifyFilters.FileName | NotifyFilters.DirectoryName;
        // Only watch text files.
        watcher.Filter = "*.txt";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);
        watcher.Deleted += new FileSystemEventHandler(OnChanged);
        watcher.Renamed += new RenamedEventHandler(OnRenamed);

        // Begin watching.
        watcher.EnableRaisingEvents = true;

        // Wait for the user to quit the program.
        Console.WriteLine("Press \'q\' to quit the sample.");
        while(Console.Read()!='q');
    }

    // Define the event handlers.
    private static void OnChanged(object source, FileSystemEventArgs e)
    {
        // Specify what is done when a file is changed, created, or deleted.
       Console.WriteLine("File: " +  e.FullPath + " " + e.ChangeType);
    }

    private static void OnRenamed(object source, RenamedEventArgs e)
    {
        // Specify what is done when a file is renamed.
        Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath);
    }
}

using کردن و LifeTime Object

بسم الله الرحمن الرحیم

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

using System;
using System.Data.SqlClient;
///
public class A {
   ///
   public static void Main() {
      string connectionString = "";
      // Wait for 5 second delay in the command
      string queryString = "waitfor delay '00:00:05'";
      using (SqlConnection connection = new SqlConnection(connectionString)) {
         connection.Open();
         SqlCommand command = new SqlCommand(queryString, connection);
         // Setting command timeout to 1 second
         command.CommandTimeout = 1;
         try {
            command.ExecuteNonQuery();
         }
         catch (SqlException e) {
            Console.WriteLine("Got expected SqlException due to command timeout ");
            Console.WriteLine(e);
         }
      }
   }
}

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

مقایسه بخش های مختلف تاریخ و زمان

بسم الله الرحمن الرحیم

بسیاری مواقع است که شما می خواهید دو تاریخ را با یکدیگر مقایسه کنید اما برای مقایسه این دو تاریخ نمی خواهید همه بخش ها را بایکدیگر مقایسه کنید، مثلا فرض کنید میخواهید فقط ماه و سال را مقایسه کنید و نمی خواهید سایر بخش ها را مقایسه شوند.

برای این روش مثلا اگر قرار باشد فقط میلی ثانیه در مقایسه شما تاثیری نداشته باشد می توانید از کد زیر استفاده کنید

public static DateTime TrimMilliseconds(this DateTime dt)
{
    return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, 0);
}

DateTime.Compare(DateTime1.TrimMilliseconds(),DateTime2.TrimMilliseconds);

 یا می همان بخش از تاریخ و زمان را که نمی خواهید مقایسه شود صفر نمایید مثلا همان ثانیه ها

dt = dt.AddMilliseconds(-dt.Millisecond);

اما با این تابع می توانید مقایسه های متفاوتی داشته باشید:

 public static DateTime TruncateTo(this DateTime dt, DateTruncate TruncateTo)
    {
        if (TruncateTo == DateTruncate.Year)
همه
        else if (TruncateTo == DateTruncate.Month)
            return new DateTime(dt.Year, dt.Month, 0);
        else if (TruncateTo == DateTruncate.Day)
            return new DateTime(dt.Year, dt.Month, dt.Day);
        else if (TruncateTo == DateTruncate.Hour)
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, 0, 0);
        else if (TruncateTo == DateTruncate.Minute)
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0);
        else
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);

    }
    public enum DateTruncate
    {
        Year,
        Month,
        Day,
        Hour,
        Minute,
        Second
    }

برای استفاده از این متد مثلا اگر بخواهید فقط تاریخ و ساعت مقایسه شود یعنی دقیقه، ثانیه و میلی ثانیه در نظر گرفته نشود باید به صورت زیر عمل کنید

DateTime dtSecs = DateTime.Now.TruncateTo(Extensions.DateTruncate.Hour);//فقط سال، ماه، روز و ساعت ذخیره می شود دقیقه و ثانیه هر دو صفر است پس عملا مقایسه بر روی تاریخ و ساعت صورت می گیرید
DateTime dtHrs  = DateTime.Now.TruncateTo(Extensions.DateTruncate.Hour);
DateTime.Compare(dtSecs,dtHrs);

C# ADO.NET SqlCommand - ExecuteNonQuery

بسم الله الرحمن الرحیم

پاسخ:

برای اجرا کردن و برنامه نویسی دستور Insert و update و Delete در سی شارپ می توانید به صورت زیر عمل کنید

using System;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string connetionString = null;
            SqlConnection cnn ;
            SqlCommand cmd ;
            string sql = null;

            connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
            sql = "insert into table1 ...............";

            cnn = new SqlConnection(connetionString);
            try
            {
                cnn.Open();
                cmd = new SqlCommand(sql, cnn);
                cmd.ExecuteNonQuery();
                cmd.Dispose();
                cnn.Close();
                MessageBox.Show (" ExecuteNonQuery in SqlCommand executed !!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("Can not open connection ! ");
            }
        }
    }
}

در صورتی که دستور ExecuteNonQuery بر روی پایگاه داده شما تاثیری بگذارید (رکوردی حذف شود، رکوردی درج شود، رکورد یا رکوردهایی بروز رسانی شوند) این دستور مقداری را به غیر از 0 برمی گرداند که تعداد رکورد هایی است که تحت تاثیر این دستور قرار گرفته اند در غیر این اگر این دستور هیچ تغییری در پایگاه داده ایجاد نکند مقدار 0 بر می گرداند:

int rowsAffected = command.ExecuteNonQuery();

بدست آوردن زمان ایجاد و آخرین تغییر یک فایل

ّبسم الله الرحمن الرحیم

برای برنامه نویسی و بدست آوردن زمان ایجاد یک فایل و آخرین زمان تغییر آن می توانید به صورت زیر عمل کنید



using System;
using System.IO;

namespace getLastTimeStamp
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo info = new FileInfo(@"C:\temp\getLastTimeStamp\Program.cs");

            Console.WriteLine(info.CreationTime.ToString());
            Console.WriteLine(info.LastWriteTime.ToString());

            Console.ReadLine();
        }
    }
}

ساخت Transaction در سی شارپ

بسم الله الرحمن الرحیم

آموزش برنامه نویسی آسنگرون در سی شارپ

در مطالب گذشته نحوه اجرای Transaction را در اسکیوال بیان کردم، خوب بسیاری از مزایای این کار بیان شد حال همین موارد را می توانیم در سی شارپ پیاده سازی نماییم، بدون توضیحات اضافی مثالی را بررسی می کنیم:

ادامه مطلب...

همگام و ناهمگام در SQL

بسم الله الرحمن الرحیم

آموزش برنامه نویسی ناهمگام در سی شارپ

در این بخش می خواهیم در خصوص نحوه و شیوه های اجرای دستورات در اسکیوال مباحثی را معرفی کنیم. همان طور که شما می دانید در زبان های مختلف برنامه نویسی در خصوص نحوه اجرای دستورات دو روش اصلی Synchronize و  ASynchronize وجود دارد. در روش Synchronize تا اتمام دستورات نرم افزار شما عملا متوقف شده و به اصطلاح Lock می شود خوب وقتی این اتفاق برای ثبت یک رکورد باشد هیچوقت محسوس نیست اما فکر کنید این فرایند برای ثبت تعداد زیادی رکورد اتفاق بیافتد در این حالت سایر پردازش های نرم افزار شما باید منتظر بمانند تا فرایند کار با اسکیوال به پایان برسد!

در روش دوم  ASynchronize، پردازش های اسکیوال شما همراه با سایر پردازش های نرم افزار شما همزمان انجام خواهد شد.

مثال:

برای دانلود مثال لطفا کلیک کنید
عنوان: ASynchronize
حجم: 1.05 کیلوبایت

ادامه مطلب...

متدولوژی Domain Driven Design

بسم الله الرحمن الرحیم

این مطلب را برای دوستان طراح قرار دادم انشالله مفید واقع شود

 

متدولوژی Domain Driven Design

قبل از پرداختن به متدولوژی مربوطه می بایست با چند مبحث آشنا شویم.

Domain Model نمایی کلی از هر آنچه در سیستم می گذرد که قلب یک برنامه MVC است که قسمت های دیگر مثل View,Controller فقط وظیفه ایجاد ارتباط با این قسمت را دارند.

یک Domain Model شامل موارد زیر است:

اجزای سی شارپ مانند کلاس ها، Structها و همانند آنکه در مجموع به آن Domain type گفته می شود.

عملیاتی که در Domain Model انجام می شوند به وسیله متدهایی که در Domain Type تعریف شده اند انجام می پذیرند.

زمانی که نمونه ای از یک Domain Type را که نمایانگر موجودیتی است ایجاد می کنید، در حقیقت در حال ایجاد یک Domain Object هستید.

 

یک روش خوب برای ایجاد Domain Model ایجاد یک پروژه از نوع Class Library  تنها برای Domain Model است بدین ترتیب می توان از قسمت های دیگر پروژه به پروژه ی Domain Model ارجاع داشت.

در Asp.Net MVC  سه قابلیت برای کار با Domain Model وجود دارد:

Model Binding: همان ویژگی که در View از آن استفاده می کنید. (ارسال و دریافت پراپرتی ها به صورت یک مدل)

Model Metadata:روشهایی مانند [Display] که در مدل از آن استفاده می کنید.

Validation: اعتبارسنجی که در مدل انجام می دهید.

 

مدل کردن یک Domain

مدل کردن یک Domain یا Domain Modeling، فرایندی است که در طی آن اهداف و نیازمندی های پروژه شناسایی می شود.

ادامه مطلب...

کار با Ninject

بسم الله الرحمن الرحیم

آموزش dependency injection

این مطلب را برای تیم طراحی قرار دادم انشالله دوستان این تیم از آن استفاده نمایند.

چرا Ninject مفید است؟
بخش اعظمی از دست آوردهای به وجود آمده در حوزه نرم افزار از نسخه ابتدایی منتشر شده بدست می آید.
بیشتر زمان سرمایه گذاری شده در بخش تحلیل بعد از شروع به کار نرم افزار هزینه می شود.
باعث می شود تغییرات نرم افزار شما بسیار ساده تر انجام شود.

بعد از استفاده spring.net به مدت طولانی در asp.net به دنبال یک روش ساده تر و سریعتر و نه روشی بر پایه تریق وابستگی به صورت xml  بودم. برای برنامه های MVC4 در نهایت به Ninject رسیدم چون رویکرد آن XML ای نیست و ساده است و استفاده از آن راحت است.

چطور تزریق کننده وابستگی را انتخاب کنیم؟
هر تزریق کننده مزایا و معایب خود را دارد و یک سری ویژگی را با خود به همراه دارد.
انتخاب یک تزریق کننده بستگی به مواردی دارد که شما بیشتر نیاز دارید دارد و این موضوع کاملا قابل بررسی است.

Ninject یک تزریق کننده متن باز است که برای NET. به وسیله Nate Kohari تولید شده است و یک سری ابزار مناسب به همراه دارد که همچنین ابزارهایی نیز برای MVC3 در آن قرارداده شده است. به هرحال، اگر شما هم مثل من به دنبال راه جدید هستید Ninject را دوست خواهید داشت.

ادامه مطلب...

ساخت یک پروژه MVC

بسم الله الرحمن الرحیم

 

  این دوره آموزشی دارای پیش نیاز می باشد، برای مطالعه پیش نیاز این دوره لطفا مقاله "آموزش WebApi" مطالعه کنید.

 

 مشاهده تمامی آموزش های دوره آموزش Web API

 

آموزش  Web API– سطح پیشرفته

     بخش اول– آموزش Web API و ASP.NET MVC و RESTfull

 

آموزش   Web API

 

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

البته دوستان لطفا قبل از شروع به خواندن این مطلب، مطلبی را که در همین بخش با عنوان معرفی Web Api قرار داده ام را مطالعه کنید.

 

خوب از آنجا که همه دوستان عزیز تیم های توسعه وب Net. با VS 2012 کار می کنند این مثال را با VS 2012 انجام می دهیم برای شروع یک پروژه جدید به صورت Internet Application ایجاد می کنیم.

new Projetc Internet Application

 

Entity Framework

ما از EF به صورت Code First برای Data Model استفاده خواهیم کرد. EF Code First اجازه می دهد تا جداول پایگاه داده را تولید کنیم با چیزی بیشتر از چند (Plain Old CLR Objects (POCO. به علاوه EF به ما اجازه می دهد تا از LINQ to Entities و Lambda expressions استفاده کنیم که باعث می شود صدور فرامین و کوئری ها آسان تر گردد.

ادامه مطلب...
up
ما را در گوگل محبوب کنید