نکته های کاربردی در برنامه نویسی C# - صفحه 2
Loading
صفحه 2 از 3 نخستنخست 123 آخرینآخرین
نمایش نتایج: از 11 به 20 از 29

موضوع: نکته های کاربردی در برنامه نویسی C#

  1. #11
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts
    سلام مجدد

    DataTable dt; /// fill the table before you use it
    DataTable copyto;

    foreach(DataRow dr in dt.Rows)
    {
    copyto.ImportRow(dr);
    }

    بهتره ویژگی مربوط به این تابع رو از خود سایت مایکروسافت بخونین تا به طور کامل متوجه ویژگی این تابع بشین:
    http://msdn.microsoft.com/en-us/libr...importrow.aspx


    (فرصت نشد و گرنه خودم به طور کامل عملکرد و ویژگی های مربوطه رو مینوشتم!)
پاسخ با نقل قول پاسخ با نقل قول

  • #12
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض

    با سلام مجدد

    امروز اما در مورد نحوه ایجاد آدرس
    اکثر برنامه نویس ها برای ایجاد آدرس از روش کدی زیر استفاده میکنن:

    string myPath = rootPath + "\\"+ filename;
    یا مانند زیر
    string myPath = rootPath + @"\" + filename;
    خروجی این کد چه بخواین چه نهواین به این صورت خواهد بود:
    rootPath\filename

    ولی مشکلی که اینجا ممکنه به وجود بیاد و خیلی وقتا شما متوجه نمیشین اینه که این مسیر تنها هنگام اجرا روی ویندوز جواب میده و اگر مثلا فردا یه کاربری بخواد با نصب فلترم های مربوطه برنامه شما رو روی لینوکس اجرا کنه این کد به هیچ عنوان جواب نخواهد داد!!!!(این کد باید توی لینوکس به این صورت باشه rootPath/filename)

    اما برای این کار بهتره شما از تابع Path.Combine که توی سر فایل System.IO وجود داره استفاده کنین. که خودش با استفاده از
    Path.DirectorySeperatorChar
    و
    Path.VolumeSeparatorChar
    کاراکتر های مناسب برای ویندوز و هنگامی که برنامه روی لینوکس داره اجرا میشه و انتخاب میکنه و قرار میده.
    یکی دیگه از ویژگی های این تابع اینه که در صورتی که شما بنا به هر دلیلی داده ای که از نظر سیستم عامل کاراکتر های نامناسب شناخته میشن و داخل مسیر استفاده کنین کنترل کرده و در صورت وجود کاراکتر نامناسب اقدام به پرتاب استثناء میکنه.

  • #13
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض

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

    شاید واسه شما هم این اتفاق افتاده باشه که مثلا میخواین بیاین از کلاس string استفاده کنین و موقع کار با رشته ها متوجه میشین که یه عملیات خاصی باید روی رشته انجام بگیره و توی توابع کلاس string این تابع وجود نداره . در این حالت کاری که انجام میدین چیه؟ یه کلاس دیگه تعریف میکنین و اون کلاس از string ارث بری میکنه (مثلا اسمشو میزارین extendedstring) و توابع مورد نیازتونو تو اون قرار میدین؟ یا توی کلاسی که دارین باهاش کار میکنین میاین و اون تابع رو تعریف میکنین(اگر بخواین توی کلاس های دیگه هم این اتفاق بیفته چیکار میکنین؟)؟ یا ...

    یکی از بهترین روش ها برای این کار استفاده از Extension Method ها هستش. در صورتی که از این خاصیت استفاده کنین بدون نیاز به هیچ کدوم از کارهای بالا به راحتی میتونین تابعی تعریف کنین که همون کار رو برای شما انجام بده و به عنوان یکی از متدهای همون کلاس پایه که ما اینجا String رو مثال زدیم نمایش داده بشه. بیشترین استفاده از این مورد توی System.Collections.IEnumerable ها هستش.

    این هم یه کاربرد خیلی ساده :

    public static class MyExtensions
    {
    public static int WordCount(this String str)
    {
    return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
    }

    جای دیگه توی کد :
    string s = "Hello Extension Methods";
    int i = s.WordCount();


    همون طور که توی مثال هم میبینین حتما باید این متد ها داخل کلاسی از نوع static تعریف بشن و اولین آرگومان یا پارامتری که دریافت میکنه حتما باید از کلمه کلیدی this استفاده کنه که نشون دهنده اینه این تابع از نوع Extension Methods هستش.
    فک نکنم نیازی به توضیحات بیشتر باشه.

  • #14
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض

    با سلام مجدد

    چند وقتی به خاطر کار نمیتونم زیاد به سایت سر بزنم.
    امروز اومدم تا در مورد Panel و طراحی صفحات در WinForm ها چیزی رو بنویسم.
    تا حالا شده که بخواین یه سری کنترل رو توی فرم قرار بدین و متوجه بشین که تعداد کنترل ها زیاده و قرار دادن این همه کنترل توی فرم باعث به هم ریختگی میشه و در خیلی از مواقع ظاهر خیلی بدی به فرمتون میده(و حتی ممکنه اندازه فرم به قدری بزرگ بشه که توی رزولشن های خاص توی بعضی سیستم ها خیلی از کنترل ها خارج از صفحه نمایش باشن)، ممکنه در این جور مواقع بیشتر این فکر به ذهنتون برسه که اگه از TapPage استفاده کنین مشکلتون حل بشه که باز هم در این صورت باید خیلی خوب بتونین کنترل ها رو از هم تفکیک کنین و کاربر رو طوری هدایت کنین که تمامی فیلد های ضروری رو بتونه وارد کنه که خودش ممکنه باعث سردرگمی کاربر میشه. یا ممکنه با استفاده از Expanderها فرمتون رو طراحی کنین که این هم باز خودش همون مشکلات تب پیج هارو داره .

    دات نت برای این که شما توی این جور مواقع به مشکل نخورین چند تا کنترل رو توی ToolBox ویژوال استودیو قرار داده که با استفاده از اون میتونین تمامی کنترلها رو توی یک فرم قرار بدین و مطمئن باشین که به هم ریختگی و عدم نمایش تو رزولشن های پایین براش پیش نمیاد.
    این کنترل ها عبارتند از : Panel, TableLayoutPanel, FlowLayoutPanel

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

    panel1.AutoScroll = true;
    /* If the AutoScrollMargin is set to less than (5,5), set it to 5,5. */ if( panel1.AutoScrollMargin.Width < 5 || panel1.AutoScrollMargin.Height < 5) { panel1.SetAutoScrollMargin(5, 5); }
    در نظر داشته باشیه که خط اول از کد به این مفهومه که اگه محل قرار گیری کنترل خارج از محدوده نمایش داده شده توسط پنل بود پنل اسکرول بخوره.
    به این ترتیب شما میتونین تمامی کنترل ها تونو توی یک پنل قرار بدین و مطمئن باشین که در صورتی که حتی اندازه پنل از فرمتون خیلی بزرگتر بود پنل داخل فرم اسکرول میخوره.

  • #15
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض

    تا حالا شده برنامه ای تحت ویندوز نوشته باشین و بخواین که این برنامه بدون هیچ گونه تغییری در اون به همون شکل داخل بروزر های مختلف نمایش داده شود؟
    در این صورت شما قادر خواهین بود که برنامه نوشته شده خودتون رو به صورت سایت در بیارین و به این صورت نمایش بدین با داشتن کمترین دانش برنامه نویسی در مورد وب نویسی

    برای شروع یک برنامه WinForm ساده پیاده سازی کنین و بعد از تست عملکردش وقتی مطمئن شدین که برنامه به طور کامل کار میکنه کار اصلی ما شروع میشه.

    بعد از ایجاد برنامه وارد صفحه تنظیمات پروژه خودتون توی ویژوال استودیو بشین و Output Type رو روی ClassLibrary قرار بدین و از برنامه کامپایل بگیرین. در این صورت کل برنامه نوشته شده شما به صورت فایل کتابخانه ای آماده میشه

    قدم بعدی کار اصلی ما رو شامل میشه. برای این منظور از VS یک پروژه جدید از نوع Wpf Browser Application ایجاد کنین. داخل Solution Explorer روی References کلیک راست کنین و گزینه Add reference رو انتخاب کنین و فایل کتابخانه ای ساخته شده در مرحله قبل رو به این پروژه اضافه کنین. بعد از اضافه کردن فایل قبلی نیاز داریم تا 2 فایل کتابخانه ای زیر رو هم اضافه کنیم :
    Windows Forms Integration و System Windows Forms

    خوب حالا نوبت مار اصلی ما میرسه و اون آماده سازی فرم نمایشی هستش. اینجا برای سادگی کار از StackPanel استفاده میکنیم که نمونه کدش میشه مسه زیر(البته این کد رو باید توی فرم اصلی مربوط به این پروژه قرار بدیم)
    <Grid>
    <StackPanel Margin="0,0,0,0" Name="stackPanel"
    HorizontalAlignment="Left" VerticalAlignment="Top" />
    </Grid>
    خوب در قدم بعدی باید بریم توی قسمت کد زنی معمولی
    من اینجا فقط کد ها رو میزارم چون بقیش خیلی سادس:

    using System.Windows.Controls;
    using System.Windows.Forms.Integration;
    using WinFormProject;


    namespace NewProject1
    {

    public partial class Page1 : Page
    {
    private readonly MainForm mainForm = new MainForm();//این شی از فایل WinFormProject ایجاد شده است


    public Page1()
    {
    InitializeComponent();


    //Create a Windows Forms Host to host a form
    WindowsFormsHost windowsFormsHost = new WindowsFormsHost();

    stackPanel.Width = mainForm.Width;
    stackPanel.Height = mainForm.Height;
    windowsFormsHost.Width = mainForm.Width;
    windowsFormsHost.Height = mainForm.Height;

    mainForm.TopLevel = false;


    windowsFormsHost.Child = mainForm;


    stackPanel.Children.Add(windowsFormsHost);
    }
    }
    }
    و اما آخرین قدم در اجرای این کار ها:

    وارد Properties مربوط به پروژه جدید میشیم و میریم توی تب Security و اونجا گرینه This is a full trust application رو انتخاب میکنیم .

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

    امیدوارم به کارتون بیاد

  • #16
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض

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

    انجام این کار تنها با کد زیر قابل انجامه. خیلی راحت میتونین این کد رو در کلاس Program ودر بدنه متد Main قرار بدین و با اجرای برنامه خودکار کی بورد روی فارسی قرار بگیره

    InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(new CultureInfo("fa-ir"));

  • #17
    كاربر عادي Array
    تاریخ عضویت
    Saturday 10 November 2012
    نوشته ها
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    پیش فرض

    اقا دستت درد نکنه خیلی ممنون لطفا ادامه بدید .
    At Last He Well Com
    کسی که زیر تیرک چوبی اب می ریزد دیوانه نیست باغبانیست که امید وار است

  • #18
    كاربر عادي Array
    تاریخ عضویت
    Saturday 10 November 2012
    نوشته ها
    4
    Thanks
    0
    Thanked 0 Times in 0 Posts

    پیش فرض

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

    برای این کار کافیه تنها از یه تابع که توی کلاس بیس Form وجود داره استفاده کنین و اون رو override کنین تا بتونین به نتیجه دلخواه خودتون برسین(سر فرصت های بعدی این توابع رو بیشتر بررسی میکنیم)
    و اما کد مربوطه:
    سلام میشه یک مثال از همین نوع بزنید ممنون میشم
    At Last He Well Com
    کسی که زیر تیرک چوبی اب می ریزد دیوانه نیست باغبانیست که امید وار است

  • #19
    كاربر عادي Array
    تاریخ عضویت
    Saturday 4 October 2008
    محل سکونت
    Tehran, mostafavakily@gmail.com
    نوشته ها
    25
    Thanks
    0
    Thanked 5 Times in 5 Posts

    پیش فرض تغییر موقعیت فرم

    در رابطه با درخواست دوستمون که گفته بود مثالی بزنیم
    اینم یه مثال جمع و جور از نحوه کا رکردن با این متد
    private const int WM_NCHITEST = 0x0084;
    private const int HTCLIENT = 1;
    private const int HTCAPTION = 2;
    protected override void WndProc(ref Message m)
    {
    base.WndProc(ref m);
    switch(m.MSG)
    {
    case WM_NCHITEST:
    if(m.Result == (IntPtr)HTCLIENT)
    {
    m.Result = (IntPtr)HTCAPTION;
    }
    break;
    }
    }

  • #20
    سردبير بخش اخبار و تازه هاي كامپيوتر Array Sardabir آواتار ها
    تاریخ عضویت
    Monday 3 October 2005
    نوشته ها
    3,778
    Thanks
    81
    Thanked 50 Times in 45 Posts

    پیش فرض

    بسیار عالی .
    منتظر ادامه مطالبتان هستیم .

  • صفحه 2 از 3 نخستنخست 123 آخرینآخرین

    علاقه مندي ها (Bookmarks)

    علاقه مندي ها (Bookmarks)

    مجوز های ارسال و ویرایش

    • شما نمیتوانید موضوع جدیدی ارسال کنید
    • شما امکان ارسال پاسخ را ندارید
    • شما نمیتوانید فایل پیوست کنید.
    • شما نمیتوانید پست های خود را ویرایش کنید
    •