تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 6 از 9 اولاول ... 23456789 آخرآخر
نمايش نتايج 51 به 60 از 87

نام تاپيک: آموزش گام به گام Vb.net

  1. #51
    کـاربـر بـاسـابـقـه am_merman01's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    یه جایی گوشه دهکده جهانی تو یه کانکشن دایال آپ
    پست ها
    893

    پيش فرض

    لطفاً مسئولان سایت بگن من چطور میتونم این پست رو حذف کنم؟
    Last edited by am_merman01; 30-07-2007 at 01:21.

  2. #52
    در آغاز فعالیت
    تاريخ عضويت
    Jun 2007
    پست ها
    3

    پيش فرض

    دوستان خوب سلام
    من تازه میخوام با VB.net کارکنم و تازه شروع کردم از آقای H2 که این سایت رو معرفی کردن متشکرم از ارسال آموزشهای اين سايت هم بسيار سپاسگذارم

  3. #53
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    دوستان خوب سلام
    من تازه میخوام با VB.net کارکنم و تازه شروع کردم از آقای H2 که این سایت رو معرفی کردن متشکرم از ارسال آموزشهای اين سايت هم بسيار سپاسگذارم
    عضویتتان را در سایت تبریک میگم!

  4. #54
    کـاربـر بـاسـابـقـه am_merman01's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    یه جایی گوشه دهکده جهانی تو یه کانکشن دایال آپ
    پست ها
    893

    12

    لطفاً مسئولان سایت بگن من چطور میتونم این پست رو حذف کنم؟
    Last edited by am_merman01; 30-07-2007 at 01:23.

  5. #55
    کـاربـر بـاسـابـقـه am_merman01's Avatar
    تاريخ عضويت
    May 2006
    محل سكونت
    یه جایی گوشه دهکده جهانی تو یه کانکشن دایال آپ
    پست ها
    893

    13

    لطفاً مسئولان سایت بگن من چطور میتونم این پست رو حذف کنم؟
    Last edited by am_merman01; 30-07-2007 at 01:18.

  6. #56
    پروفشنال anvar.net's Avatar
    تاريخ عضويت
    Apr 2007
    محل سكونت
    IRAN
    پست ها
    648

    پيش فرض

    اقايون شرمنده سرم خيلي شلوغه.

    امشب سعي ميكنم اين بحث رو تموم كنم. زياد عجله نكنيد

  7. #57
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    به دوستان شفیق پیشنهاد میکنم برخی جملاترا دیگه بکار نبرند و تا کاربر anvar.net همه مان را از تاپیکشان پرت نکرده بیرون دیگه تاپیک شان را بیشتر از این خراب نکنیم!!!!



    با اجازه کاربر anvar.net ! قصد فضولی ندارم و اصلاً حوصله تایپ هم ندارم! ولی گفتم کمکی کرده باشم و صرفاً خارج از گود نگویم لنگش کن!
    امیدوارم زودتر این پست را ببینید و مطلب دیگری آماده کنید! اگر شما هم در مورد Try نوشتید، خوب باز میگذارید، دو سری توضیح کامل در مورد try خواهیم داشت
    در نتیجه با آجازه شما متن زیر را ببرای دستور Try آماده کردم، امیدوارم فایده داشته باشد و مطلبی هرچند کوچک ولی جدید به دانسته های عظیم دوستان بیافزاید.
    ---------------------------------------------------------------
    دستور Try:
    این دستور برای هندلینگ خطاها و انجام عمل مورد نظر در قبال خطایی خاص است، خطاها اگر هندلر نشوند موجب Runtime Error در برنامه نهایی میشوند.
    ولی در کل همیشه بهتر است تا از بروز خطا جلوگیری شود، چون اتفاق افتادن خطا و هندلینگ آن کاری پر هزینه است و باعث کاهش سرعت و کارآیی برنامه نهایی میشود.

    مثلاً وقتی که متغییر شی ای دارید که احتمال هم دارد خالی یا Null یا همان Nothing باشد،
    یک راه این است که بدون توجه به مقدار ان از این متغییر استفاده کنیم و بگوییم اگر Nothing باشد فوقش خطایی به وجود می آید که آن را هم هندلر خواهیم کرد.
    ولی این تفکر جالبی نیست!
    بهنتر است در یک If در اول استفاده چک شود و اگر متغییر مورد نظر Nothing نبود دستورات مورد نظر را انجام دهیم.

    در کل مجدداً تکرار میکنم که اغلب اوقات پیشگیری بهتر از درمان است.
    سینتکس کلی:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    دستورات شما بعد از Try قرار میگیرند، اگر خطایی رخ دهد مابقی دستورات دیگر اجرا نخواهد شد و پرشی خواهیم داشت به اولین بلوک Catch ای که با نوع خطای مورد نظر هماهنگی داشته باشد (توضیح بیشتر خواهم داد! فعلاً این را در نظر بگیرید که بلوک های متعدد Catch چیزی مثل ساختار Select Case عمل میکنند)یعنی به محض اینکه خطا با اولین بلوک مچ شود همان بلوک اجرا میشود و از کلیه بلوک های دیگر صرف نظر خواهد شد.

    اگر خطای اتفاق افتاده با هیچ یک از بلوک های Catch مچ نشود، هندلینگ نخواهیم داشت و خطا به سلسله مراتب بالاتر در فراخانی ارسال میشود تا شاید در آنجا هندلر شود و الی آخر ... ( که من به آن میگویم بالا رفتن حبابی!) و اگر به منبع اصلی فراخانی برسد و هنوز هندلر نشده باشد موجب Runtime Error و توقف برنامه شما خواهد شد.

    بلوک Finally اگر استفاده شود، تضمین میکند که در هر شرایطی بدون توجه به وقوع خطا - عدم وقوع خطا - اجرا شدن دستورات خروج سریع از قبیل Exit Sub و Exit Function و حتی دستور زیبا و جدید Return ، باز هم در هر شرایطی بلوک بعد از Finally اجرا خواهد شد.
    از این بلوک میتوانید برای آزادسازی منابع-بستن ارتباطها-بستن فایلها و... استفاده کنید.
    (البته نباید این بلوک را جایگزین دستور جدید و فوق العاده قوی Using کرد.)
    ------------------------------------------------------------
    VB8 برخلاف VB6 به شدت شی گراست و همه چیز با قوانین OOP و پلی مورفیزم اداره میشوند، در این راستا برخلاف VB6 که خطاها ماهیتی عددی داشتند و هر خطا با عددی خاص تایین میشد، اینجا در VB8 خطا ها ماهیتی Class ای دارند و هر خطا خود یا کلاسس ماژول است!!!
    هر کلاسس ماژول خطا در دات نت وراثتی است از کلاسس Sysytem.Exception و شما هم میتوانید برای خود خطاهاتی سفارشی درست کنید (وچه بهتر که وراثتی باشد از همان کلاسس) فعلاً کاری با چگونگی به وجود آوردن خطای سفارشی نداریم و بحث بر سر رفع آن است!
    بلوکهای Catch هم بر اساس کلاس و وراثت کار میکنند!
    شما در بلوک Catch یک متغییر به عنوان نماینده خود تعریف میکنید (معمولاً با نام ex)که پس از هندلینگ خطا، شی کلاس خطای مورد نظر درون این متغییر ریخته میشود و تحویل بلوک کد درون Catch شما خواهد شد، این متغییر که حالا حاوی شی خطاست دارای اطلاعات محل و موقعیت و پیغام خطا و... میباشد که اطلاعات دقیق تری به شما و کاربر شما در مورد خطای مورد نظر میدهد.
    اینکه کدام بلوک Catch با نوع متغییری که تعریف کرده میتواند خطا را هندلر کند طبق قوانین وراثت است.
    نمیخواهم در این پست آموزش مبانی OOP و Polymorphism را بدهم ولی با اجازه اساتید اشاره ای مختصر میکنم:
    درخت کاج<-درخت<-گیاه<-جاندار<-ماده و جسم<-چیز و وجود!
    هر "درخت کاجی" وراثتی است از "درخت" و هر "درخت" وراثتی است از "گیاه" و...
    هر درخت کاجی حتماً یک درخت و یا یک گیاه است!
    ولی هر "درختی"، "درخت کاج" نیست!
    و هر "گیاهی" هم "درخت کاج" نیست!
    همین مسئله در کلاسس های وراثتی هم صادق است!

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

    مثلاً بلاک زیر:
    Catch ex As System.IO.DirectoryNotFoundException
    میتوانید خطای ناشی از وجود نداشتن پوشه را هندلر کند.
    مثلا وقتی دستور پاک کردن فایلی را داده اید ولی اتصلاً پوشه مورد نظر وجود ندارد، خطای فوق اتفاق می افتد.
    ولی کلاسس System.IO.DirectoryNotFoundException وراثتی است از کلاسس System.IO.IOException و این هم وراثتی است از کلاسس اصلی System.Exception
    در نتیجه اگر خطای DirectoryNotFound اتفاق بیافتد، هر یک از سه بلوک زیر میتوانند خطای مورد نظر را هندلر کنند:
    Catch ex As System.IO.DirectoryNotFoundException
    Catch ex As System.IO.IOException
    Catch ex As System.Exception
    و هر سه نوع کد فوق در هندلینگ خطای DirectoryNotFound هیچ فرقی با هم نخواهند داشت و اگر هم هر سه Catch فوق را داشته باشیم اینکه کدامشان خطای DirectoryNotFound را هندلر خواهند کرد صرفا به این ربط دارد که کدام بلوک Catch بالاتر قرار دارد، یعنی مثل ساختار Select Case ، هر کدام که بالاتر باشد خطای DirectoryNotFound را هندلر میکند و بقیه بلوک ها اجرا نمیشود.

    درکش راحت است!
    یک "درخت کاج" همه اش، اصل وجودش، تمامش یک "درخت" است، به همان اندازه که
    یک "درخت کاج" همه اش، اصل وجودش، تمامش یک "گیاه" است! سلسله مراتب وراثتی قابل تفکیک نیستند.
    نتیجه اخلاقی آنکه اگر شما یک بلوک Catch ex As System.Exception در آخر بلاکها داشته باشید میتوانید تمام انواع خطاهای رخ داده در بلوک Try را هندلر کنید و نیز اگر یک بلوک فوق در اول بلوک های Catch داشته باشید همه خطا ها را هندلر میکند و مابقی بلوکهای Catch هیچ گاه اجرا نخواهند شد.
    ------------------------------------------------------------
    نکات ریز باقی مانده!
    هر ساختار Try باید حداقل یک بلوک Catch یا یک بلوک Finally داشته باشد و نیز طبیعی است که اگر بلوک Catch نداشته باشد هیچ خطایی را هندلر نمیکند.

    تا اینجا همه مطالب برای زبان دوقولوی VB.Net یعنی C#.Net هم صادق بود، غیر از آن که بلوک ها در C#.Net با {} شروع و پایان می یابند ولی دستور When مختص VB.Net است و شما میتوانید مثل بلاک If Then با آن عمل کنید و علاوه بر نوع متغییر، شرطی برای ورود به Catch هم تایین کنید.

    مطلب آخر آنکه که هندلینگ فقط در بعد از دستور Try وجود خواهد داشت! (خود بلوک Try) یعنی اگر کد شما در محل بلاکهای Catch یا بلاک Finally مجدداً باعث بروز خطا شود، این خودش خطایی جدید است و سلسله مراتب بالارفتن حبابی را طی خواهد کرد. ولی Try-Catch تودرتو به هر شکل مجاز است!

    در جوار دات نت جون خوش بگذره!

  8. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  9. #58
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض

    ممنون _H2_ عزيز .
    مثل هميشه کامل و دقيق بود.
    اميدوارم شما و Avant عزيز به ارائه مطالب مفيدتون ادامه بدين

    چند تا سوال داشتم

    __________________________________________________ ________________________________

    اولي اينه که کلا منظور از Handle و Handling چيه ؟ يه چيزايي مبهم ميدونم ولي واسم گنگه اگه يه کوچولو راهنماييم کني ممنون ميشم

    __________________________________________________ ________________________________

    و دوميش :

    (البته نباید این بلوک را جایگزین دستور جدید و فوق العاده قوی Using کرد.)
    ميشه در مورد دستور Using توضيح بدين ؟

    __________________________________________________ ________________________________

    مثلاً وقتی که متغییر شی ای دارید که احتمال هم دارد خالی یا Null یا همان Nothing باشد،
    یک راه این است که بدون توجه به مقدار ان از این متغییر استفاده کنیم و بگوییم اگر Nothing باشد فوقش خطایی به وجود می آید که آن را هم هندلر خواهیم کرد.
    ولی این تفکر جالبی نیست!
    بهنتر است در یک If در اول استفاده چک شود و اگر متغییر مورد نظر Nothing نبود دستورات مورد نظر را انجام دهیم.
    در حالاتي که خطا به ندرت پيش مياد مثلا کانکشن برقرار نشه ، بهتر نيست اين کار رو به پردازش استثناء واگذار کنيم ؟

    __________________________________________________ ________________________________

    اگر خطای اتفاق افتاده با هیچ یک از بلوک های Catch مچ نشود، هندلینگ نخواهیم داشت و خطا به سلسله مراتب بالاتر در فراخانی ارسال میشود تا شاید در آنجا هندلر شود و الی آخر ... ( که من به آن میگویم بالا رفتن حبابی!) و اگر به منبع اصلی فراخانی برسد و هنوز هندلر نشده باشد موجب Runtime Error و توقف برنامه شما خواهد شد.
    يعني اگه يک تابع رو فراخواني کنم که در اون تابع خطا رخ بده و در بلوک Try موبوط به اون خطاي مورد نظرم با هيچيک از خطاهاي مورد نظر بلوکهاي Catch مطابقت نداشته باشه ، پردازش خطا به دنبال بلوک Catch اي که با خطا مطابقت داره در روال فراخوان ميگرده ؟ (اگه اينطوره که اين دات نت خيلي با کلاسه !) حالا فرض کن پردازش استثنايي تو روال فراخوان نداشته باشيم (در روال فراخوان و روالهاي بالاتر) اونوقت خطا در نظر گرفته نميشه ديگه نه ؟
    Last edited by bad_boy_2007; 29-07-2007 at 10:14.

  10. #59
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    اولي اينه که کلا منظور از Handle و Handling چيه ؟ يه چيزايي مبهم ميدونم ولي واسم گنگه اگه يه کوچولو راهنماييم کني ممنون ميشم
    هندلینگ را من به معنی عمومی "قلاب کردن-تور انداختن" استفاده کردم! یک دفعه شما خطا را هندلر میکنید و یک دفعه رویداد را، مثلاً زمانی که رویداد Click را هندلر میکنید


    ميشه در مورد دستور Using توضيح بدين ؟
    حالا بزارید از دست این Try راحت بشیم! دل انگیز بابا!
    ولی مثل دستور Dim است ولی پایانه استفاده از شی با End Using مشخص میشود و فقط هم برای اشیایی قابل استفاده است که رابط نابودسازی را پیاده سازی کرده باشند.


    در حالاتي که خطا به ندرت پيش مياد مثلا کانکشن برقرار نشه ، بهتر نيست اين کار رو به پردازش استثناء واگذار کنيم ؟
    تشخیصش با شماست! اگر مثل باز کردن کانکشن به ندرت پیش می آید یا مثلاً فقط یک بار قرار است کد اجرا شود استفاده از Try بهتر است
    ولی اگر احتمال وقوعش زیاد است و نیز کد مثلاً در یک حلقه بارها و بارها تکرار میبشود یا در وب توسط هزاران کاربر همزمان اجرا میشود بهتر است دقت بیشتری کنید.


    يعني اگه يک تابع رو فراخواني کنم که در اون تابع خطا رخ بده و در بلوک Try موبوط به اون خطاي مورد نظرم با هيچيک از خطاهاي مورد نظر بلوکهاي Catch مطابقت نداشته باشه ، پردازش خطا به دنبال بلوک Catch اي که با خطا مطابقت داره در روال فراخوان ميگرده ؟
    دقیقاً !!! که گقتم، من نامش را گذاشته ام بالارفتن حبابی!

    (اگه اينطوره که اين دات نت خيلي با کلاسه !)
    پس چی! فکر کرده اید با چغندر قند طرف هستید!

    حالا فرض کن پردازش استثنايي تو روال فراخوان نداشته باشيم (در روال فراخوان و روالهاي بالاتر) اونوقت خطا در نظر گرفته نميشه ديگه نه ؟
    اینن را هم گفتم! خطا به صورت سراسری اعلام میشود و موجب runtime Error و در نتیجه نمایش پنجره مربوطه و حتی در ورژن های گذشته موجب بسته شدن برنامه میشود.

    تست کنید متوجه میشود
    مثلاً در رویداد Form_Load بنویید
    Dim i As Integer
    i = 0
    i = 0 \ i

    و برنامه را کامپایل کنید و EXE اش را اجرا کنید، متوجه میشوید.

  11. #60
    پروفشنال bad_boy_2007's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    ایران
    پست ها
    803

    پيش فرض

    ممنون h2 جان بابت وقتي که براي پاسخ به سوالاتم گزاشتي

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •