1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

نا گفته هاي كاربردي و جالب در Visual Basic.Net

شروع موضوع توسط minaaa ‏14/12/10 در انجمن .Net

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    سلام
    پس از این همه وقت گذاشتن برای یادگیری ویژوال بیسیک هنوز به مواردی برخورد میکنم که برای من کاملا ناشناخته و جالب است.
    برای همین تصمیم گرفتم تا تاپیکی رو شروع کنم که هدف ان نشان دادن امکانات و توانایی های از ویژوال بیسیک است که کمتر کسانی اونها رو میشناسند .
    از شما خواهش میکنم تجربیات و نکاتی که در برنامه نویسی با ویژوال بیسیک بدست اورده اید و به نظر خودتان جالب و اموزنده هستند رو برای استفاده ی همه ی برنامه نویسان روی سایت قرار دهید.
     
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    برای شروع من کلاسی رو معرفی میکنم که مشکل تعداد زیادی از برنامه نویسان در مورد تاریخ شمسی رو حل میکنه. در دات نت کلاسی به نام PersianCleander وجود داره که به وسیله ی آن میتوانیم تاریخ شمسی رو محاسبه کنیم. بدین صورت :

    کد:
    Imports System.GlobalizationPublic Class ConvertDate Public Function ShamsiToMiladi(ByVal ShamsiDate As String) As String Dim PDate As New PersianCalendar Dim y, m, d As Integer y = Mid(ShamsiDate, 1, 4) m = Mid(ShamsiDate, 6, 2) d = Mid(ShamsiDate, 9, 2) Return Mid(PDate.ToDateTime(y, m, d, 1, 1, 1, 1, 1), 1, 11) End Function Public Function MiladiToShamsi(ByVal MiladiDate As String) As String Dim PDate As New PersianCalendar Dim miladi As Date = CDate(MiladiDate) Dim y, m, d As String y = PDate.GetYear(miladi) m = PDate.GetMonth(miladi) d = PDate.GetDayOfMonth(miladi) Return y & "/" & m & "/" & d End FunctionEnd Class

    __________________
     
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    مشکلی که خیلی از برنامه نویسان با ان مواجه هستند این است که عملکرد Enter در برنامه همانند عملکرد Tab باشد.
    به همین خاطر هر کسی با راه و روش خودش این کار رو انجام میدهد که اکثرا با کد نویسی های زیادی حاصل میشود. در صورتی که این کار فقط با نوشتن یک خط کد حاصل میشود.
    در ابتدا مقدار KeyPreview که یکی از مشخصه های فرم است را به True تغییر میدهیم و سپس در رویداد KeyPress برنامه این قطعه کد را مینویسیم :



    کد:
    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress If e.KeyChar = Chr(Keys.Enter) Then SendKeys.Send("{Tab}") End If End Sub

    __________________
     
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    این دفعه میخوام Property هایی رو براتون بگم که کمتر با انها اشنا هستیم
    AutoCompleteCustomSource , AutoCompleteMode , AutoCompleteSource
    این مشخصات که مخصوص TextBox هستند میتوانند کار ورود داده به برنامه ها رو خیلی سریع تر کنند. بدین صورت که ما بوسیله ی آنها میتوانیم مثل یک ComboBox بلکه در زمینه هایی بهتر از ان عمل کنیم.
    کار این مشخصات این است که با تایپ کردن قسمتی از متن درون Textbox برنامه بقیه ی آن متن را به کاربر نشان دهد.
    برای کار شما ابتدا باید برای AutoCompleteCustomSource آیتم هایی رو تعریف کنین.
    سپس AutoCompleteMode را انتخاب کنین
    و در آخر AutoCompleteSource را برابر CustomSource قرار دهید.
    با این کار وقتی کاربر حرف اول کلمه ایی رو تایپ میکنه برنامه در AutoCompleteCustomSource آن کلمه رو پیدا میکنه و به کاربر نمایش میده.
    حالت های مختلفی وجود داره مثلا اگه AutoCompleteSource رو برابر FileSystem قرار دهیم با تایپ "C:\" برنامه زیر پوشه های درایو C رو برای نوشتن ادرس باز میکنه که این کار کاربر رو خیلی راحت تر میکنه
     
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    بعضی وقت ها پیش میاد که میخواهیم یک نوع داده ی خاص رو از کاربر بگیریم که شکل خاصی داره (مثلا کد ملی یا کد پستی و ...) . برای اینکه ببنیم کاربر اون متن ورودی رو طبق قاعده وارد کرده یا نه از کلاس RegularExpressions استفاده میکنیم.


    کد:
    Imports System.Text.RegularExpressions Dim s As String = "122-250152-8" If Regex.IsMatch(s, "[1-9]{3}-[0-9]{6}-[0-9]") = True Then MsgBox("True") Else MsgBox("False") End If

    __________________
     
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    این هم یک کد که در خاصیت KeyPress تکست باکس قرارش میدیم , تا فقط مقدار های عددی رو قبول کنه

    کد:
    Private Sub T7_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ،TextBox1.KeyPress If Not IsNumeric(e.KeyChar) And e.KeyChar <> Convert.ToChar(Keys.Back) And e.KeyChar <> Convert.ToChar(Keys.Delete) Then e.Handled = True End If End Sub

    __________________
     
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    این هم یک کد خیلی مفید برای حلقه ها و loop ها
    اگر توجه کرده باشید توی دات نت وقتی یک حلقه ی بزرگ , مثلا 1000000 رکورد رو بخواید توی یه لیست باکس بریزید , یا از دیتابیس فرا بخونید , تا قبل از تموم شدن حلقه برنامه اگر Not Response نشه , حداقل دیگه نمی تونید توش کاری انجام بدید.
    برای رفع این مشکل , کافیه در حلقه خود از متد Application.DoEvents استفاده کنید
    مثال :


    کد:
    For i=0 to 100000application.DoeventsListbox1.Items.add(i)Next

    __________________
     
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    ساختن Help در برنامه ، میتونه ارزش اون برنامه رو بالا ببره. مخصوصا اگه Help ایی قوی داشته باشه . و بخوبی با کاربر ارتباط برقرار کنه
    این دفعه میخوام چند کنترل که برای ساختن Help بکار میروند را معرفی کنم . Sample زیر نحوه ی کار با این کنترل ها رو نشان میده.(بر گرفته از سایت Microsoft)
    کنترل های HelpProvider , ToolTip , MenuStrip ,ErrorProvider
    فایل های پیوست شده
    TD.attachrow { FONT: 11px Tahoma}TD.attachheader { BACKGROUND-COLOR: #ededed; FONT: 11px Tahoma}TABLE.attachtable { BORDER-COLLAPSE: collapse; FONT: 12px Tahoma}​
    فایل های پیوستنوع فايل[​IMG][​IMG] دفعات دانلود شده0حجم فايل982.8 کیلو بایتدانلود فایل Help.zip کپی برداری از این مطلب فقط با ذکر منبع مجاز است

    __________________
     
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    این هم یه پروپرتی Override شده برای سایه دار کردن فرم ها . زمانی که یه کنترل خواستید بسازید این تکه کد خیلی به دردتون میخوره.


    کد:
    Private Const CS_DROPSHADOW As Integer = 131072 ' Override the CreateParams property Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams Get Dim cp As CreateParams = MyBase.CreateParams cp.ClassStyle = cp.ClassStyle Or CS_DROPSHADOW Return cp End Get End Property
    __________________
     
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,773
    تشکر شده:
    6,457
    امتیاز دستاورد:
    113
    این هم نمونه کدی برای تغییر زبان کامپیوتر. بعضی از افراد از Api ها برای این کار استفاده میکنن. بهشون پیشنهاد میکنم اولویت رو به توابع دات نت بدهند. در مواقعی که این توابع پاسخگو ی نیازتان نیستند به سراغ api ها بروید


    کد:
    If InputLanguage.CurrentInputLanguage.LayoutName = "US" ThenDim farsi As New Globalization.CultureInfo("fa-IR")InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(farsi)ElseDim en As New Globalization.CultureInfo("en-US")InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(en)End If

    __________________