# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET >  نا گفته ها در Visual Basic.Net

## sepehr.net

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

----------


## sepehr.net

برای شروع من کلاسی رو معرفی میکنم که مشکل تعداد زیادی از برنامه نویسان در مورد تاریخ شمسی رو حل میکنه. در دات نت کلاسی به نام PersianCleander وجود داره که به وسیله ی آن میتوانیم تاریخ شمسی رو محاسبه کنیم. بدین صورت :
Imports System.Globalization
Public 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 Function
End Class

----------


## sepehr.net

مشکلی که خیلی از برنامه نویسان با ان مواجه هستند این است که عملکرد 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

----------


## sepehr.net

این دفعه میخوام Property هایی رو براتون بگم که کمتر با انها اشنا هستیم
 AutoCompleteCustomSource , AutoCompleteMode , AutoCompleteSource
این مشخصات که مخصوص TextBox هستند میتوانند کار ورود داده به برنامه ها رو خیلی سریع تر کنند. بدین صورت که ما بوسیله ی آنها میتوانیم مثل یک ComboBox بلکه در زمینه هایی بهتر از ان عمل کنیم.
کار این مشخصات این است که با تایپ کردن قسمتی از متن درون Textbox برنامه بقیه ی آن متن را به کاربر نشان دهد.
برای کار شما ابتدا باید برای AutoCompleteCustomSource آیتم هایی رو تعریف کنین.
سپس AutoCompleteMode را انتخاب کنین
و در آخر AutoCompleteSource را برابر CustomSource قرار دهید.
با این کار وقتی کاربر حرف اول کلمه ایی رو تایپ میکنه برنامه در AutoCompleteCustomSource آن کلمه رو پیدا میکنه و به کاربر نمایش میده.
حالت های مختلفی وجود داره مثلا اگه AutoCompleteSource رو برابر FileSystem قرار دهیم با تایپ "C:\" برنامه زیر پوشه های درایو C رو برای نوشتن ادرس باز میکنه که این کار کاربر رو خیلی راحت تر میکنه :چشمک:

----------


## sepehr.net

بعضی وقت ها پیش میاد که میخواهیم یک نوع داده ی خاص رو از کاربر بگیریم که شکل خاصی داره (مثلا کد ملی یا کد پستی و ...) . برای اینکه ببنیم کاربر اون متن ورودی رو طبق قاعده وارد کرده یا نه از کلاس 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

----------


## shask00l

> مثل اینکه کسی مایل نیست مطلبی قرار بده !!!


چرا دوست عزیز . ولی مطالبی که شما پست میکنی خیلی پیشرفته هستش و نشانه نکته سنجی شماست . بنده به شخصه با این مدل مطالب تکمیلی کمتر برخورد کردم .. ضمنا کمی صبر کنید چون اکثر دوستانی که من میشناسم 1-2 روز در میان مطالب این سایت رو چک میکنند .

این تاپیک با این عنوان نیاز به پتانسیل زیادی برای ادامه دادن داره . بهتره مطالب رو بخش بندی کنی و هر چند وقت 1 بار update کنی .
در هر صورت ... بنده هم تلاش میکنم تا جایی که در توانم هست به تکمیل این تاپیک کمک کنم .

با آروزی موفقیت روزافزون برای شما ...

----------


## علیرضا مداح

سلام دوستان عزیز،
لطفا" در این تاپیک تنها به ارائه ی نکات بپردازید و سوالات خود را در تاپیک جدید مطرح نمایید ،/

----------


## mojtaba-saleh

امیدوارم تاپیک خوب پیش بره.
این هم یک کد که در خاصیت 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

----------


## sepehr.net

ساختن Help در برنامه ، میتونه ارزش اون برنامه رو بالا ببره. مخصوصا اگه Help ایی قوی داشته باشه . و بخوبی با کاربر ارتباط برقرار کنه
این دفعه میخوام چند کنترل که برای ساختن Help بکار میروند را معرفی کنم . Sample زیر نحوه ی کار با این کنترل ها رو نشان میده.(بر گرفته از سایت Microsoft)
کنترل های HelpProvider , ToolTip , MenuStrip ,ErrorProvider

----------


## mojtaba-saleh

این هم یک کد خیلی مفید برای حلقه ها و loop ها
اگر توجه کرده باشید توی دات نت وقتی یک حلقه ی بزرگ , مثلا 1000000 رکورد رو بخواید توی یه لیست باکس بریزید , یا از دیتابیس فرا بخونید , تا قبل از تموم شدن حلقه برنامه اگر Not Response نشه , حداقل دیگه نمی تونید توش کاری انجام بدید.
برای رفع این مشکل , کافیه در حلقه خود از متد Application.DoEvents استفاده کنید
مثال : 

 
For i=0 to 100000
application.Doevents
Listbox1.Items.add(i)
Next

----------


## sepehr.net

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

----------


## mostafaaa

سلام
این هم یه پروپرتی 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اینم نمونه کنترل که توش از این کد استفاده کردم
Untitled-1.gif

----------


## sepehr.net

سلام
  این هم نمونه کدی برای تغییر زبان کامپیوتر. بعضی از افراد از Api ها برای این کار استفاده میکنن. بهشون پیشنهاد میکنم اولویت رو به توابع دات نت بدهند. در مواقعی که این توابع پاسخگو ی نیازتان نیستند به سراغ api ها بروید
If InputLanguage.CurrentInputLanguage.LayoutName = "US" Then
Dim farsi As New Globalization.CultureInfo("fa-IR")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(farsi)
Else
Dim en As New Globalization.CultureInfo("en-US")
InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(en)
End If

----------


## rooshan2008

سلام
نخ ها :(Thearding) یکی از بهترین امکان برای استفاده بهینه منابع هست با این حال خیلی مورد بی توجهی قرار می گیره.
مثلاً با این موضوع بر خرده باشید که وقتی حلقه ای بینهایت یا طولانی داریم و نیاز هست که در هنگام پردازش حلقه به رویداد های دیگه رسیده مورد تقاضای کاربر جواب بده در این حالت یا شما باید از دستور Doevents استفاده کنید که اصلاً توصیه نمی شه چون اجرای این دستور حدوداً یک میلی ثانیه تاخیر ایجاد می کنه و اگر حلقه من 10000 هزار بار تکرار بشه در برنامه من به صورت ناخواسته 10 ثانیه وقت تلف می شه (برای پاسخ به رویداد های دیگر )
برای این منظور از نخ ها استفاده که کارایی برنامه شما رو به صورت چشم گیری افزایش می دهد 
من یک حلقه بزرگ رو مثال می زنم ک من در اینجا قصد دارم یک جستجو در یک مسیر خاص در درایوم رو به شما نشون بدم لازم به ذکر هست که این برنامه تمام مسیر یعنی تمام زیر شاخه ها رو هم در بر می گیره:
این کد کاملش :
Search.zip 
این هم یک مثال ساده تا بهتر متوجه بشیم: 

PublicEnum StatC
vbStop = 0
vbRun = 1
vbPause = 2
EndEnum
Dim Stat_1  As  StatC
 

Dim 
Tr  As  Threading.Thread
برای آغاز کار 
Public

Sub  Start()
If Stat = StatC.vbStop Then
Me.Tr =  New Thread(New   ThreadStart(AddressOf Me.Roshan))
Tr.Priority =ThreadPriority.Highest
Tr.Start()
EndIf
End  sub
برای ادامه وقتی که Pause استفاده شود
Public Sub   Resume_()
IfNot IsNothing(Tr) Then Tr.Resume()
Stat_1 = StatC.vbPause
EndSub
برای توقف موقت
PublicSub Pause()
IfNot IsNothing(Tr) Then Tr.Suspend()
Stat_1 = StatC.vbPause
EndSub
برای  از بین بردن 
Public Sub _Stop()
IfNot  IsNothing(Tr) Then Tr.Abort()
Stat_1 = StatC.vbStop
EndSub
پردازه بی نهایت
PrivateSub Roshan()
While (1)
....دستورات شما
End While
EndSub
 

 

قسمتی که به رنگ قرمز در آمده است (پرسپولیس) این قسمت اهمیت این نخ را برای سیستم عامل شرح می دهد و اولویت این نخ بر اساس این متد تغییر می کند پس از آن به درستی استفاده کنید.

----------


## sepehr.net

این کد زمان روشن بودن کامپیوتر رو بر حسب میلی ثانیه بر میگرداند. این قابلیت میتونه خیلی کارامد باشه در ضمن چون در یک متغیر 32 بیتی ذخیره میشود پس از 24 روز مقدار آن صفر میشود. 
System.Environment.TickCount

----------


## rooshan2008

این هم ایجاد یک شی در زمان اجرا و انتصاب رویداد کلید در زمان اجرا به آن شی :


Dim  Bt  As New  Button
PrivateSub Form1_Load(ByVal  sender  As System.Object, ByVal  e  As System.EventArgs)  HandlesMyBase.Load
Bt.Parent =  Me
Bt.Location = New  Point(Me.Width / 2, Me.Height / 2)
Bt.Text = "Ok"
AddHandler  Bt.Click,  AddressOf  BtClick
EndSub
PrivateSub BtClick(ByVal  sender  As Object, ByVal  e  As EventArgs)
MsgBox("Hello ...")
EndSub

همه رویداد همه اشیا از همین سبک قابل هدایت هستند.

----------


## sepehr.net

دوست عزیزمان ساختن باتون در زمان اجرا را گفتند ، من هم Move کردن این باتون در زمان اجرا رو  میگم. البته این کار بدون استفاده از Api ها هست
Dim mouse_offset As Point
    Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
        mouse_offset = New Point(-e.X, -e.Y)
    End Sub
    Private Sub Button1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Dim mousePos As Point = sender.MousePosition
            mousePos.Offset(mouse_offset.X - Button1.Height, mouse_offset.Y - Button1.Width)
            sender.Location = mousePos
        End If
    End Sub

----------


## sepehr.net

این دفعه شما رو با Code Snippet ها اشنا میکنم.
Code Snippet ها کد های کوچک شده ایی هستند که باعث تسهیل در کد نوشتن میشوند. برای اینکه با این کد ها آشنا بشین در محیط کد نویسی ویژوال استادیو کلیک راست کنید و گزینه  ی Insert Snippet ر وانتخاب کنید . ملاحضه میکنین که لیستی از این کد ها رو براتون میاره
برای نمونه ایتم Windows Operating System\Find the current user  رو انتخاب بکنین
ملاحضه میکنین که متغیری تعریف میکنه که نام کاربر جاری در آن ذخیره شده.
این کدها کار برنامه نویس رو خیلی راحت تر میکنه. (به زودی نحوه ی ساخت این کد ها رو کامل بهتون میگم.). یکی از تفاوت هایی که ویژوال 2005 با نسخه های قبلی داره همین Code Snippet هاست.
مثلا در دات نت حلقه ی For یک CodeSnippet هست.
برای اینکه بتونید سریع تر به ساختار این کد ها دسترسی داشته باشین پس از نوشتن اسم انها(مثلا For) کلید TAB رو بزنید ملاحضه میکنین که چه اتفاقی صورت میگیره.

----------


## sepehr.net

تصمیم گرفتم که همین حالا آموزش ساخت Code Snippet رو براتون بگم  :لبخند گشاده!: 
من میخوام Code Snippet ایی بسازم که وقتی در محیط کد نویسی بنویسی TMB(مخفف Test MsgBox) و سپس کلید Tab رو بزنی کد زیر اضافه بشه :چشمک: 
MsgBox("This is a test")

Code Snippet ها ساختاری به صورت XML دارند ولی شما برای ساختن اونها احتیاجی به یادگیری XML ندارین. میتونید اون قسمت هایی که لازم دارین رو کپی کنید. :چشمک: 

شما میتونین این کدها رو هم در NotePad و هم در VS بسازین. من برای راحتی کار با VS میگم.
در ابتدا شما باید از منوی File گزینه ی New و سپس File رو انتخاب کنین. از لیست باز شده گزینه ی XML File رو انتخاب کنین. یک صفحه ی خالی برای شما باز میشود. کد زیر رو در اون کپی کنید و با نام Test ذخیره کنید. پسوند اون هم Snippet رو انتخاب کنین.
<?xml version="1.0" encoding="utf-8" ?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

  <CodeSnippet Format="1.0.0">

    <Header>

      <Title>TestMsgBox</Title>

      <Author>Sepehr.Net www.Barnamenevis.Org</Author>

      <Description>Test Function.</Description>

      <Shortcut>TMB</Shortcut>

      <SnippetTypes>

        <SnippetType>Expansion</SnippetType>

      </SnippetTypes>

    </Header>

    <Snippet>

      <Code Language="vb">

        <![CDATA[


msgbox ("This is a test")
]]>

      </Code>

    </Snippet>

  </CodeSnippet>

</CodeSnippets>
در قسمت Title نام این Snippet رو مینویسین.در قسمت  Author اسم خودتون(سازنده) رو مینویسین . در قسمت Description توضیحاتی که طرف برای انتخاب این Snippetد میبینه رو مینویسین. در قسمت Shortcut هم کلمه ایی که کاربر پس از نوشتن اون و زدن کلید Tab میتونه  Snippet شما رو ببینه مینویسین. در قسمت SnippetType هم عبارت Expansion رو مینویسین(راستش من نفهمیدم این عبارت دقیقا کارش چیه. ولی فکر کنم مربوط به گسترش این Snippet بشه :متفکر: ). در قسمت Code Language نام زبان رو مینویسین مثلا csharp یا vb. و در آخر بعد از عبارت   CDATA کد هایی که میخواهید این Snippet براتون انجام بده رو به همون زبانی که انتخاب کردین مینویسین.

خب حالا نوبت اضافه کردن این Snippet به دات نت میرسه.
برای این کار شما یک پوشه بسازین با نام Test و این Snippet رو در داخل اون پوشه بریزین.
از منوی Tools گزینه ی Code Snippet Manager رو انتخاب میکنین. تمامی Snippet ها رو براتون اورده و مسیر اونها رو میتونین ببینین و حتی اونها رو ویرایش کنین. حلا شما گزینه ی Add رو بزنین و ادرس اون پوشه ایی که ساختین (در اینجا با نام Tset) رو بهش بدین. میبینین که اون پوشه اضافه میشه و Snippet داخل پوشه هم اضافه شده.

حالا برین توی قسمت کد نویسی و بنویسین TMB و بعد از اون  TAB رو بزنین. ملاحضه فرمودین که چه اتفاقی افتاد ؟؟؟ :متعجب: 
میتونین  اونرو  به این صورت هم بیارین که روی صفحه راست کلیک کنین و گزینه ی Insert Snippet رو انتخاب و بعد از اون گزینه ی Test رو بزنین. ملاحضه میکنید که Snippet ساخته شده رو براتون اورد و توی ToolTip ایی که باز میشه توضیحات و میانبر این snippet رو براتون میاره.

----------


## mc_laren

* تغییر اندازه خودکار فرم*

حتما تا حالا برای شما هم پیش آمده که وقتی که نوع فونت فرم رو عوض می کنید اندازه فرم هم تغییر می کنه و اندازه فرم از حالت تنظیم شده خارج شده . بد نیست بدانید که همه این کارها توسط گزینه Auto Scale Mode انجام میشه . و حالا تنظیمات این گزینه :
  :none -1 
               وقتی این گزینه رو انتخاب کنیم دیگه تنظیمات صفحه اصلاً بهم نمی خورد.
  :Font -2 
               وقتی این گزینه رو انتخاب می کنیم موجب تغییر اندازه خودکار فرم و اشیای درون آن بر حسب اندازه و نوع قلم انتخاب شده برای فرم می شود.
  :DPI -3 
               انتخاب این گرینه موجب تغییر اندازه فرم و اشیای دورن آن بر حسب DPI سیستمی که برنامه در آن اجرا می شود تغییر می کند.
 مسیر    Desktop->Properties->Setting->Advanced->General=DPI

  :Inherit -4 
             متاسفانه تاثیر این گزینه رو نتونستم پیدا کنم.

----------


## mostafaaa

سلام
آیا تا حالا توی برنامه هاتون نیاز داشتین که یه یه کد برنامه نویسی توسط کاربرتون وارد بشه و برنامتون اون رو کمپایل کنه؟
آیا تا به حال نیاز داشتین که توی برنامتون یه سری فرمول ریاضی از کاربرتون دریافت کنید و حلش کنید؟
آیا تا به حال به فکرتون رسیده که یه ماشین حسابی بنویسید که وقتی Button های روی اون رو فشار میدین فقط تکست مربوطه به Button توی یه TextBox ریخته بشه و بقیه کارها رو به عهده کمپایلر دات نت بندازید؟
خوب راه حل تمامی اینها و خیلی دیگر از این قبیل مشکلات کلاسهای موجود توی فضا نام CodeDome هستش.
در اینجا یه مثال ساده از استفاده از این کلاسها رو براتون میزارم . که تو زمان اجرا کاربر میتونه  کدهاش رو به زبان VB بنویسه و کدها رو کمپایل کنه و خروجیش رو هم به صورت یه فایل EXE در بیاره.
خو ب ابتدا یه پروژه جدید ایجاد کنید و روی فرم اصلیتون دوتا TextBox و دوتا Button بزارید. خاصیت MultiLine مربوط به TextBox ها رو True کنید.
این هم از کدهای برنامه.
Imports System.CodeDom
Imports System.CodeDom.Compiler
Public Class Form1
    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click, button2.Click
        Dim codeProvider As New VBCodeProvider
        Dim icc As ICodeCompiler = codeProvider.CreateCompiler
        Dim Output As String = "Out.exe"
        Dim ButtonObject As Button = CType(sender, Button)

        textBox2.Text = ""
        Dim parameters As New CompilerParameters()
        Dim results As CompilerResults
        'Make sure we generate an EXE, not a DLL
        parameters.GenerateExecutable = True
        parameters.OutputAssembly = Output
        results = icc.CompileAssemblyFromSource(parameters, textBox1.Text)

        If results.Errors.Count > 0 Then
            'There were compiler errors
            textBox2.ForeColor = Color.Red
            Dim CompErr As CompilerError
            For Each CompErr In results.Errors
                textBox2.Text = textBox2.Text & _
                "Line number " & CompErr.Line & _
                ", Error Number: " & CompErr.ErrorNumber & _
                ", '" & CompErr.ErrorText & ";" & _
                Environment.NewLine & Environment.NewLine
            Next
        Else
            'Successful Compile
            textBox2.ForeColor = Color.Blue
            textBox2.Text = "Success!"
            'If we clicked run then launch the EXE
            If ButtonObject.Text = "Run" Then Process.Start(Output)
        End If

    End Sub
End Classبرای تست کردن برنامتون هم میتونید. این کد رو توی قسمت ورودی کاربر کپی کنید.
Imports System
Imports System.Console
Module Module1
    Sub Main()
        Console.WriteLine("THIS IS A CODE DOME EXAMPLE!!")
        Console.ReadLine()
    End Sub
End Module
شکل کلی فرمتون هم به شکل زیر باید باشه.
Untitled-1.gif
امیدوارم به دردتون بخوره

----------


## sepehr.net

تا حالا درمورد Transaction ها چیزی شنیدید؟
 اگه برنامه نویس بانک اطلاعاتی هستین تا حالا فکر کردید که اگه در هنگام کار با بانک به مشکل پیشبینی نشده ایی برخورد کنید چه اتفاقی می افته؟ :متفکر:  . مثلا شما دارید اطلاعاتی مالی رو از حساب خریدار به حساب مشتری انتقالز میدین . ناگهان در حین انجام این کار، برق بره  :اشتباه: . تا حالا فکر کردین که تکلیف این اطلاعات چی میشه؟
 برای اینکه در چنین مواقعی مشکلی برای برنامه پیش نیاد و اطلاعات از دست نره میتونین از SqlTransaction استفاده کنید. اگه از این کنترل استفاده کنید پس از بروز چنین مشکلاتی اطلاعات به شکل قبلی خودش بر میگرده.
برای اینکه بتونین از این کلاس استفاده کنید ابتدا باید به صورت زیر اون رو تعریف کنین
 Dim tran As SqlClient.SqlTransaction
اگه دقت کرده باشن احتیاج به کلمه ی New نداره!!!
 پس از تعریف ان شما باید این متغیر را به  کانکشن خود ارتباط دهید که به صورت زیر میباشد
tran = con.BeginTransaction

 همچنین باید این متغیر رو با Command خود هم مرتبط کنید به صورت زیر 
cmd.Transaction = tran
اگه برنامه دچار مشکل شد با دستور زیر اطلاعات بازگردانی میشه
tran.Rollback()
 اگر هم دچار مشکل نشد با دستور زیر اطلاعات در بانک ثبت میشه 
tran.Commit()
 شما میتونین این دستورات رو به شکل زیر بنویسید
Dim con As New SqlClient.SqlConnection
     Dim cmd As New SqlClient.SqlCommand
     Dim tran As SqlClient.SqlTransaction
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         con.Open()
         tran = con.BeginTransaction
         cmd.Transaction = tran
         Try
             cmd.ExecuteNonQuery()
             tran.Commit()
         Catch ex As Exception
             tran.Rollback()
             MsgBox("Error")
         End Try
     End Sub

----------


## rooshan2008

سلام
 با تشکر از sepehr.net
این تاپیک رو درباره تراکنش قبلاً تقربا
https://barnamenevis.org/showth...A9%D9%86%D8%B4

----------


## sepehr.net

بنا به درخواست بعضی از دوستان در این پست اموزش Backup و Restore بانک اطلاعاتی Sql رو قرار میدهم. 
گرفتن نسخه ی پشتیبان از برنامه به چند صورت انجام میشه که من ساده ترین حالت و پر کاربرد ترین اونها رو قرار میدهم.
برای اینکه بتونیم از برنامه نسخه ی پشتیبان تهیه کنیم به صورت زیر عمل میکنیم
 Cmd.CommandText = "Backup Database databasename to Disk='" & path & "'"
                Cmd.ExecuteNonQuery()
این کد از برنامه نسخه ی پشتیبانی تهیه میکنه که نام و مسیر اون در متغیر path قرار گرفته. 
(برای دیدن سایر روشهای گرفتن نسخه ی پشتیبان به Help خود Sql که کامل ترین مرجع است مراجعه کنید).
اما Restore کردن به راحتی گرفتن نسخه ی پشتیبان نیست. دلیلش هم اینه که شما وقتی به یک بانک متصل هستید نمیتونین اون رو تغییر بدین. برای این کار شما در ابتدا باید از دستور UseMaster استفاده کنین که بانک فعال شما تغییر پیدا کنه .
برای Restore کردن از کد زیر استفاده کنید
cmd.CommandText = "Use Master;ALTER DATABASE databasename SET SINGLE_USER with ROLLBACK IMMEDIATE;" & _
                                "RESTORE DATABASE databasename  FROM DISK= '" & path & "' with REPLACE;" & _
                                "ALTER DATABASE databasename SET MULTI_USER"
                cmd.ExecuteNonQuery()
در متغیر Path هم نام و مسیر همون فایل Bacup قرار گرفته :چشمک:

----------


## sepehr.net

دوستان هرکس مایل به یادگیری مطالب بیشتری در مورد تراکنشها (transaction)هست میتونه به این تاپیک
که جناب  Rooshan2008 لطف کردن آموزش کامل اونرو قرار دادن مراجعه کنه

----------


## mc_laren

با سلام 
* حل مشکل Attach و ِDetach برای همیشه*
تا حالا زیاد دیدم در مورد این مطلب سوال بشه و بعد از جستجو در سایت های مختلف  این کدها بدست آمد :
Attach کردن به سرور بوسیله فایل mdf و :ldf

EXEC sp_attach_db @dbname='نام بانک ',
@filename1='مسیر فایل mdf',
@filename2='مسیر فایل ldf'

Attach کردن بوسیله فایل mdf

  EXEC sp_attach_single_file_db  @dbname='نام بانک',
@physname='مسیر فایل mdf'


Detach کردن
EXEC sp_detach_db 'نام بانک'

رشته اتصال در SQL Server 2000
"data source=(local);integrated security=true"

رشته اتصال در SQL Server 2005
"data source=./SQLEXPRESS;integrated security=true"

* کد های گفته شده را در یک SQLcommand قرار داده*

----------


## Afshin160

*تبدیل تاریخ از/به شمسی و دیگر تقویم ها* :

تبدیل به میلادی:
Dim x As New System.Globalization.PersianCalendar
Dim dt As Date = x.ToDateTime(1386, 1, 1, 0, 0, 0, 0, 0)


تبدیل از میلادی

Dim x As New System.Globalization.PersianCalendar()

Dim dt As Date
dt = #1/1/2007#
'Or یا
dt = New Date(2007, 1, 1)
'Or یا
dt = CDate("1/1/2007")

Dim y As Integer = x.GetYear(dt)
Dim m As Integer = x.GetMonth(dt)
Dim d As Integer = x.GetDayOfMonth(dt)


دات نت 2 با تقویم میلادی در کل شامل 11 تقویم است!
مثلاً PersianCalendar تقویم ایرانی یا همان هجری شمسی است
یا HijriCalendar تقویم هجری قمری است
JapaneseCalendar ژاپنی
KoreanCalendar کره ای
TaiwanCalendar تایوانی
و...

برای تبدیل تاریخ های تقویم های دیگر به هم (که یک سرش میلادی نباشد) باید اول تاریخ مورد نظر را به میلادی تبدیل کرد و سپس میلادی را به تقویم دوم تبدیل کرد.

----------


## sepehr.net

سلام
برای اینکه برنامه ایی که نوشتین فقط یک بار باز بشه (به صورت همزمان) تنظیمات زیر را انجام بدین :چشمک: 
در داخل ویژوال استادیو در Solution Explorer بر روی آیتم My Project دابل کلیک کنید تا یک پنجره برگه دار (tabbed window) باز شود. در این پنجره تنظیمات برنامه شما قرار دارد.بر روی برگه tab Application کلیک کنید و در قسمت windows application framework properties بر روی چک باکس Make Single instance application کلیک کنید تا انتخاب گردد. 

در صورت انجام دادن مراحل بالا دیگر شما قادر نخواهید بود که کپی‌های دیگری از این برنامه را به صورت هم زمان بر روی آن کامپیوتر اجرا کنید و در صورت اجرا کردن نسخه‌های دیگر هیچ اتفاقی روی نخواهد داد و آنها فورا بسته خواهند شد. :چشمک:

----------


## sepehr.net

بازم سلام
تا حالا در مورد کلاس System.Management چیزی شنیدید؟
اصلا کار این کلاس چیه؟
تا حالا شده که اطلاعاتی در مورد سیستم عامل ، سخت افزار ، نرم افزار های موجود در ویندوز و .... لازم داشته باشید و Api ها هم جواب گوی شما نباشند یا مشخصات اون Api  رو بلد نباشین؟
حالا من قصد دارم چیز جدید و جالبی رو معرفی کنم. (لازمه که بگم من خودم تازه مطالعه روی این زمینه رو شروع کردم و اگه اشتباهی در گفته های من است از اساتید خواهش میکنم که به بزرگی خودشون ببخشند و اون رو اصلاح کنند.)
شما میتونید به وسیله ی زبان اسکریپتی WQL که همانند زبان SQL است کار های خارق العاده ایی انجام بدین. (نمونه کدی که روی اون کار میکنیم گرفتن مشخصات کارت گرافیکه)
کد زیر رو ببینید :
Imports System.Management
Public Class Form1
    Dim ObjMng As Management.ManagementObject
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim c As New Management.ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration")
        Dim DeviceName As String
        Dim DisplayFlags As String
        Dim DisplayFrequency As String
        Dim DriverVersion As String
        Dim PelsHeight As String
        Dim PelsWidth As String
        '--------------------
        For Each ObjMng In c.Get
            PelsWidth = ObjMng("DisplayFlags").ToString
            DeviceName = ObjMng("DeviceName").ToString
            DisplayFrequency = ObjMng("DisplayFrequency").ToString
            DriverVersion = ObjMng("DriverVersion").ToString
            PelsHeight = ObjMng("PelsHeight").ToString
            PelsWidth = ObjMng("PelsWidth").ToString
        Next
        '---------------------------
        MsgBox(PelsWidth)
        MsgBox(DeviceName)
        MsgBox(DisplayFrequency)
        MsgBox(DriverVersion)
        MsgBox(PelsHeight)
        MsgBox(PelsWidth)
    End Sub
End Classدر ابتدا باید رفرنس System.Management رو به برنامه اضافه کنیم.
ما به وسیله ی این کد یک جستجو با دستورات WQL انجام میدیم که حاصل اون در یک حلقه ی ForEach در متغیر ریخته میشه.
برای کسب اطلاعات بیشتر به تاپیک زیر مراجعه کنید
https://barnamenevis.org/showth...235#post635235

----------


## sepehr.net

این هم تمامی کلید های ترکیبی که در VisualBasic 2005 وجود دارند. :چشمک:

----------


## Morteza_s

*یک نمونه برنامه برای کار با مقادیر پولی*



به صورت همزمان هنگام تایپ عدد این امکانات رو به شما میده:
1- 3 رقم 3 رقم جدا کردن عدد
2- نمایش معادل به تومان
3- استفاده از مقدار عددی بدون علامت در انجام محاسبات عددی

----------


## sepehr.net

اضافه کردن رویداد _سه بار کلیک_ به یک کنترل
    Dim WithEvents Click3 As New TripleClick
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Click3.Click()
    End Sub
    Private Sub Click3_TplClick(ByVal Text As String) Handles Click3.TplClick
        TextBox1.Text = Text
    End Sub
    Public Class TripleClick
        Public Event TplClick(ByVal Text As String)
        Public Sub Click()
            Static intCount As Integer = 0
            intCount += 1
            If intCount >= 3 Then
                intCount = 0
                RaiseEvent TplClick("The Button was triple clicked.")
            End If
        End Sub
    End Class

----------


## sepehr.net

یکی از مشکلاتی که افراد زیادی با اون درگیر هستند اینه که :
ما در بانک یک جدول داریم که مشخصات افراد رو در اون ثبت میکنه
حالا میخوایم رو فرم یک ComboBox داشته باشیم که در اون نام افراد نشان داده بشه و با انتخاب هر فرد از این ComboBox یک ID که مربوط به همون فرد هست رو به ما نشون بده
خب برای این کار در ابتدا ما اطلاعات جدول را در یک DataSet یا DataTable میریزیم سپس کد زیر رو مینویسیم
ComboBox1.DataSource=Dt
ComboBox1.DisplayMember="Name"
ComboBox1.ValueMember="ID"
ComboBox1.Show()

----------


## sepehr.net

این دفعه یک پروپرتی جالب از TextBox رو میگم
پروپرتی ShortcutsEnabled که از نوع Boolean هست
بعضی وقتها میخواین که کاربر نتونه از تو TextBox متنی رو کپی کنه یا Undo کنه و ... 
برای انجام اینکار این پروپرتی رو برابر False قرار بدین
عملیاتی که این پروپرتی مانع از انجام اونها میشه اینها هستند

 CTRL+Z CTRL+E CTRL+C CTRL+Y CTRL+X CTRL+BACKSPACE CTRL+V CTRL+DELETE CTRL+A SHIFT+DELETE CTRL+L SHIFT+INSERT CTRL+R

----------


## sepehr.net

سلام
حتما" تا حالا عبارت Region# را دیدید؟ و این سوال براتون پیش اومده که این عبارت چی هست و چه کاری انجام میده !!!
این دفعه میخوام در باره ی  Directive ها توضیح بدم 

Directive ها دستوراتی هستند که کامپایل نمیشوند بلکه کامپایلر رو هدایت میکنند تا دستور خاصی را کامپایل کنه. تمامی Directive ها  با علامت # اغاز میشوند. تعداد این دستورات در C#‎ از  VB بیشتره. من در این پست دستوراتی که در vb به کار میروند را توضیح میدم :چشمک: 
#Region "Name"

#End Region
این Directive برای دسته بندی قسمت هایی از کد استفاده میشه. مثلا شما یک کلاس دارید که در اون اعمال مختلفی انجام میشه مثلا قسمتی از این کلاس اعمال مربوط به اساتید رو انجام میده و قسمت دیگری اعمال مربوط به دانشجویان. با این Directive میتونین این اعمال را دسته بندی کنید.

#Const
کار این Directive  تعریف یک مقدار ثابته مثلا" در دستور زیر شما به جای عدد 3.14 میتونید بنویسید PI . از این پس کامپایلر هر کجا که کلمه PI رو دید به جای آن مقدار 3.14 را قرار میدهد
#Const PI = 3.14

#If  Then

#Else

#End If
عمل این Directive ها هم مثل if معمولی هست و فقط تفاوت اون هم در اینه که کامپایل نمیشه. پس شرط اون هم نباید کامپایل بشه. مثلا شما میتونید به این صورت از اون استفاده کنید
#If Pi = 3.14 Then
        'Return True
#Else
        'Return False
#End If

Directive اخری که هست اینه :
#ExternalSource("FilePath", 1)
        MsgBox("In FilePath")
#End ExternalSource
راستش من هر کاری کردم بفهمم دقیقا" کار این Directive چیه نفهمیدم  :افسرده: 
ولی تا اونجا که دستگیرم شد هنگامی که قسمتی از کد ما در یک فایل دیگر باشد با این Directive میتونیم از اونها استفاده کنیم و از خطا های احتمالی جلوگیری کنیم :متفکر: 
(اگه اشتباه میگم دوستان اصلاح کنند :چشمک: )

----------


## sepehr.net

سلام
دوست عزیز Nevron یک سری ابزاره که متعلق به VisualBasic.net نیستند
این تاپیک در مورد ابزار های خود دات نت توضیح میده
اگه شما درخواستتون رو در این تاپیک مطرح کنید به نتیجه میرسه

----------


## sepehr.net

سلام
شاید شما هم از نوشتن دستورات SQL در برنامه خسته شده باشید.
نوشتن این دستورات (Insert,Update,Delete) باعث بروز مشکلات زیادی برای برنامه نویس میشه که خودتون بهتر میدونید  :چشمک: 
حالا روشی را معرفی میکنم که دیگه احتیاجی به نوشتن این دستورات نداشته باشین
تعریف متغیر ها و مقدار دهی اولیه:
        Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection("StrConnection")
        con.Open()
        Dim da As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter("Select * From Table1", con)
        Dim dt As DataTable = New DataTable
        da.Fill(dt)
        Dim cmdbuild As SqlClient.SqlCommandBuilder 
اضافه کردن سطر به DataTable :
        Dim dr As DataRow
        dr = dt.NewRow
        dr("Fild 1") = "Value 1"
        dr("Fild 2") = "Value 2"
        dr("Fild N") = "Value N"
        dt.Rows.Add(dr)
        cmdbuild = New SqlClient.SqlCommandBuilder(da)
        da.Update(dt)

ویرایش :
        dt.Rows(0)("Fild 1") = "Value 1"
        dt.Rows(0)("Fild 2") = "Value 2"
        dt.Rows(0)("Fild N") = "Value N"
        cmdbuild = New SqlClient.SqlCommandBuilder(da)
        da.Update(dt)
حذف:
dt.Rows(0).Delete()
        cmdbuild = New SqlClient.SqlCommandBuilder(da)
        da.Update(dt)
شی SqlCommandBuilder ، تغییراتی که در DataTable داده شده است را به صورت دستورات SQL تبدیل میکند و در Da میریزد

----------


## sepehr.net

سلام
حتما" بعضی از متد ها را دیدید که میتونید یک یا چند پارامتر به انها پاس کنید؟
یعنی اگر یک پارامتر به ان ارسال کنید برنامه کامپایل میشود و اگر هم دو یا بیشتر پارامتر به انها ارسال کنید باز هم برنامه کامپایل میشود.
پیش بار گذاری یا OverLoading این امکان را به شما میده که یک متد با لیست آرگومانهای متفاوت داشته باشین.
مثلا" ما یک تابع MessageBox داریم. حالا میخوایم این تابع به سه صورت فراخوانی بشه
1- فقط متن. 2- متن و عنوان 3- متن و عنوان و آیکون
برای این کار به این صورت عمل میکنیم:
Public Sub Msg(ByVal Text As String)
عملیات مربوط به حالت اول
End Sub

Public Sub Msg(ByVal TextAs String , ByVal Title As String)
عملیات مربوط به حالت دوم
End Sub

Public Sub Msg(ByVal Text As String, ByVal Title As String, ByVal Icon As Integer)
عملیات مربوط به حالت سوم
End Sub
اگر به صورت بالا عمل کنیم یعنی متد ها را OverLoad کنیم به خواسته ی خود میرسیم.
فقط باید این نکته را بدانیم که زمانی متد ها با یکدیگر OverLoad میشوند که فقط و فقط آرگومانهای انها با هم تفاوت داشته باشد.
در ضمن این عمل را میتوان با اختیاری کردن پارامتر ها هم انجام داد به این صورت که قبل از کلمه ی ByVal از کلمه ی Optional استفاده کنیم که ان پارامتر را اختیاری میکند. ولی اگر تعداد پارامتر ها زیاد باشد این روش چندان مناسب نیست و باعث گمراه کردن کاربر نیز میشود  :چشمک:

----------


## mehrnoosh_al62

سلام دوستان
یکی از کار هایی که در خیلی از برنامه ها ی روتین مورد استفاده قرار میگیره تبدیل دیتاگرید و اطلاعات اون به فرمتهای مختلفی مثل Word,Excel و PDF هست که در این بین تبدیل اطلاعات به فرمت PDF از بقیه مشکل تر به نظر میاد. برنامه ای گذاشتم این کار رو با استفاده از کامپوننت rzPDFCreator.dll خیلی راحت کرده.

----------


## mehrnoosh_al62

یه راهه خیلی ساده برای تبدیل اطلاعات دیتاگرید به Excel:

Private Sub ExportToExcel()
        SaveFileDialog1.Filter = "*.xls|*.xls"
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName <> "" Then
            Dim oExcel As Object
            Dim oWorkBook As Object
            Dim oSheet As Object
            oExcel = CreateObject("Excel.Application")
            oWorkBook = oExcel.Workbooks.Add
            oExcel.visible = True
            Dim c, r As Integer
            Dim ColNum As Integer = DataGridView1.ColumnCount
            Dim RowNum As Integer =  DataGridView1.RowCount
            Dim col As Integer = 65
            oSheet = oWorkBook.worksheets(1)
            For c = 1 To ColNum
                oSheet.Range(CStr(Chr(col) & 1)).Value =  DataGridView1.Columns(c - 1).HeaderText
                col += 1
            Next
            For r = 1 To RowNum
                For c = 1 To ColNum
                    oSheet.Cells(r + 1, c) =  DataGridView1.Rows(r - 1).Cells(c - 1).Value
                Next
            Next
            oWorkBook.SaveAs(SaveFileDialog1.FileName, True)
            oSheet = Nothing
            oWorkBook = Nothing
            oExcel = Nothing
        End If
    End Sub

----------


## mehrnoosh_al62

گاهی اوقات نیازه که متن داخل MessageBox رو در دو خط یا بیشتر نشون بدیم مشکلی که خودم خیلی وقتا میخواستم راه حلشو بدونم... اما ظاهرا خیلی سادست :بامزه: 

*Display in Two Lines*

MessageBox.Show (“This Text is displayed in First Line” & vbcrlf  &  
     “This Text is displayed in Second Line”)

*Display a blank line in between*

MessageBox.Show (“This Text is displayed in First Line” & vbcrlf  & vbcrlf  & 
     “This Text is displayed in Second Line”)

----------


## r_zamani

اين يك sample هست براي ساختن متن هاي متحرك 
براي زيبا سازي فرم ها و استفاده در splash ها كاربرد داره

----------


## my_blithe

اگر بخواهیم از طریق کد textbox یا label و یا هر کنترل دیگه رو طوی فرم ایجاد کنیم از طریق کد زیر میشه :

Dim tbox AsNew TextBox()
tbox.Location = New Point(180, hi)
Me.Controls.Add(tbox)


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

----------


## saeid4462

دوست عزيز با كد زير ميتوني اينكار رو انجام بدي.
فقط رنگ زمينه پیکچر باکس رو تغيير بده تا بدوني كه كجا بايد خط بكشي
با كد زير تا زماني كه دكمه چپ ماوس پاين باشه ميتوني بدون محدوديت خط بكشي
اميدوارم تونسته باشم كه كمك كرده باشم
برام فقط دعا كن و يه فاتحة براي مادرم بخون.
 :افسرده:  :لبخند: 
Public po As New Point
Dim p As Graphics
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
po = e.Location
p = PictureBox1.CreateGraphics()
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If Not po.IsEmpty Then
p.DrawLine(Pens.Aqua, po.X, po.Y, e.X, e.Y)
po = e.Location
End If
End Sub
Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
po = Nothing
End Sub

----------


## Afshin160

سلام ...
ديدم بعضي از دوستان در رابطه با export , import كردن از برنامه به excel سوال مي كنند . 
براي همين يه سري فايل از سايت code project پيدا كردم گفتم بزارم اينجا شايد به كار كسي بياد .      


https://barnamenevis.org/showthread.php?t=165068

----------


## hesam_hma

سلام دوستان
متاسفانه 2 صفحه ی آخر این تاپیک خارج از اهداف ایجاد این تاپیک می باشد ، دوستان توجه کنند که این تاپیک جایی برای مطرح کردن سوالات شما نیست و شما برای طرح سوال خود یک تاپیک جدید ایجاد نمایید !
همچنین دوستان دقت نمایند این تاپیک برای مباحثی است که احساس می شود اکثر برنامه نویسان وی بی از مطالب آن بی اطلاعند "*نا گفته ها در Visual Basic.Net"* پس لطفاً از طرح نکاتی بسیار ساده و پیش پا افتاده مانند ReadOnly کردن TextBox و ... پرهیز نمایید تا این تاپیک به راه اصلی خود ادامه دهد
با تشکر از همه دوستان

----------


## Hossis

با سلام 
نمی دونم این مطلب قبلا بیان شده یانه ولی برای خودم خیلی جالب بود
در ویژوال بیسیک 6 برای باز کردن فایل متنی و خواندن متن از آن مجبور بودیم یک تابع بلند بالا بنویسیم و از یک حلقه do استفاده کنیم که این کار وقت زیادی می گرفت
اما در دات نت 9 این کار در یک خط خلاصه می شود
textbox1.text=io.file.readalltext
جالبتر این که می توانید تک تک خط ها را در یک آرایه وارد کنید
listbox1.items.addrange(io.file.readallbytes)
البته این کلاس توابع و فرامین دیگری هم دارد که می توانید خودتان امتحان کنید

----------


## toopak

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

اینها رو هم تو public تعریف کنید
Dim poi As Point
    Dim dra As Boolean

کد مربوط به رویداد mousedown فرم
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown

        If e.Button = Windows.Forms.MouseButtons.Left Then
            dra = True
            poi = New Point(e.X, e.Y)
        Else
            dra = False
        End If

    End Sub

کد  مربوط به رویداد mouseUP فرم

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        If dra = True Then
            Dim moveto As Point
            moveto = Me.PointToScreen(New Point(e.X, e.Y))
            moveto.Offset(-poi.X, -poi.Y)
            Me.Location = moveto
        End If
    End Sub

----------


## sari-1369

نقل قول از : http://www.forum.p30world.com/showpo...87&postcount=1

__________________________________________________  ______________________


همه برنامه نویسان Microsoft Visual Studio با ابزارهای پیشرفته کد نویسی VS.NET آشنا هستند و از آنها استفاده می کنند ، ولی من شما را با دوتا دیگر از امکانات دیگر VS.NET که در کد نویسی به شما بسیار کمک میکند و باعث سرعت کدنویسی می شود و مورد استفاده افراد حرفه قرار میگیرد و به افراد مبتدی بسیار کمک میکند آشنا میکنم.
 1. Code Snippets : این ابزار به شما کمک می کند که از کد های که معمولا در هر برنامه ایی با تعغییرات اندک استفاده می شوند استفاده کنید بدونه اینکه نیاز به نوشتن دوباره آنها باشد.
برای استفاده از Code Snippets کافی است در محیط کد نویسی کلیک راست کرده ...Insert Snippet را انتخاب کنید 


وبا انتخاب گروه کد؛ و پیدا کردن کد مورد نیاز خود را وارد کنید (دابل کلیک کنید) و قسمت های مشخص شده با رنگ سبز را طبق نیاز خود تعغییر دهید.


شما با رفتن به منوی Tools و انتخاب Code Snippets Manager این کد ها را مدیریت کنید شما میتوانید با زبان XML کد هایی که دوست دارید بنویسید و در این قسمت وارد کنید.
2.امکان دیگر این است که در صفحه کد؛ کدی که نوشته اید را انتخاب کنید و به سمت نوار ابزار بکشید تا کد شما در نوار ابزار قرار بگیرد و از این به بعد شما هر وقت که به این کد نیاز داشتید کافی است که برروی آن در نوار ابزار دابل کلیک کنید یا به سمت صفحه کد بکشید تا کد به مکانی که اشاره گر است انتقال یابد.

----------


## hossein-khoshseyar

شاید این مطلبی که می خوام بگم خیلی ساده باشه ولی خودم که خیلی به دردم می خوره
خیلی وقتا پیش میاد من یه کدی رو توی vb6  بلدم اما معادل اون توی دات نت رو نمی دونم چی می شه 
برای اینکار می تونیم از توی منوی tools  گزینه Upgrade Visual Basic 6 code... رو انتخاب کنیم و توی صفحه ای که باز شد کد vb6 رو بنویسیم تا دات نت اون رو از vb6 به دات نت ترجمه کنه

----------


## Alirezanet

سلام قبلا توی یه تاپیک جداگانه این مطلب مطرح شده بود ولی فکر میکنم جاش اینجا باشه!

قبلا اگه میخواستیم برنامه رو هم فارسی هم انگلیسی بنویسیم باید مدتها روی کدهاش کار میکردیم ولی توی .net2008 امکان این کار به راحتی فراهم شده .

مثلا اگه یه فرم رو میخواستید به 2 یا چند زبان بنویسید (بهتره بعد از اتمام برنامه نویسی این عملیات انجام بشه ) کافیه : 1- خاصیت Localizable فرمتون رو True کنید . و میبینید که به صورت پیش فرض زبان انتخاب شدتون (خصیصه Language فرم) روی Defulte تنظیم شده که زبانه پیش فرضتون رو نشون میده. اون رو به Persian (Iran) تغییر بدین . 
برنامه یه فرم جدید براتون محیا میکنه که میتونید توش تمام Lable ها و تکس هارو تغییر بدین . به همین راحتی ...

فقط میمونه تغییر زبان برنامه که میتونید از این کد براش استفاده کنید .
برای تغییر به فارسی :
 
 
My.Application.ChangeUICulture("fa-IR")
 
برای تغییر به انگلیسی :
 
 
My.Application.ChangeUICulture("en-US")
 
 
فقط یه نکته که قبلا گفته نشده بود اینه که این تغییرات رو زمانیکه تغییر میکنه ذخیره کنید که موقع اجرای برنامه بتونید زبانتون رو که آخرین بار کاربر تغییر داده برگردونین .
برای ذخیره میتونید از Registry استفاده کنید (ولی راهها مختلفی دیگه ای هم میشه...)
مثال :
 
 
My.Application.ChangeUICulture("fa-IR")
SaveSetting(My.Application.Info.AssemblyName, "lan", "lan", "fa-IR")
 

این کد وقتی زبانتون تغغیر میکنه همون زبان رو توی رجیستری مینویسه .. که میتونید در موقع اجرای برنامه با این کد زبان رو برگردونید .

 
 
Public Sub New()
Dim lang As String = GetSetting(My.Application.Info.AssemblyName, "lan", "lan", )
My.Application.ChangeUICulture(lang)
InitializeComponent()
End Sub
 

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

اگه توی این ضمینه کسی هم مشکلی داشت با من تماس بگیره ..

----------


## Alirezanet

این مطلب حذف شده  است.

----------


## pingsft

> برای شروع من کلاسی رو معرفی میکنم که مشکل تعداد زیادی از برنامه نویسان در مورد تاریخ شمسی رو حل میکنه. در دات نت کلاسی به نام PersianCleander وجود داره که به وسیله ی آن میتوانیم تاریخ شمسی رو محاسبه کنیم. بدین صورت :
> Imports System.Globalization
> Public 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)
> ...


با سلام.
دوست عزیز،کلاس PersianCalendar به خاطر یک ocxجداگانه به برنامه شما اضافه شده و به طور پیشفرض در visual stadioنصب نیست.... :متفکر:

----------


## pingsft

سلام
من بیشتر از این راهکار استفاده می کنم که خیلی نرم تر وبهتره:
    Dim moving As Boolean = False
    Dim dleft, dtop


    Sub startMooving() Handles Button1.MouseDown
        moving = True

        dleft = Button1.Left - MousePosition.X
        dtop = Button1.Top - MousePosition.Y


    End Sub
    Sub moveB() Handles Button1.MouseMove

        If moving Then
            Button1.Top = MousePosition.Y + dtop
            Button1.Left = MousePosition.X + dleft

        End If
    End Sub
    Sub Endmove() Handles Button1.MouseUp
        moving = False

    End Sub

----------


## Alirezanet

> با سلام.
> دوست عزیز،کلاس PersianCalendar به خاطر یک ocxجداگانه به برنامه شما اضافه شده و به طور پیشفرض در visual stadioنصب نیست....


Imports System.Globalization
توی این فضای نامی هست ... 
خواهشا سوالهارو جای دیگه مطرح کنین...

و این دوستمون آقای Pingfst عزیز ... من هم خیلی چیزا استفاده میکنم دلیل نمیشه !!! 
حد اقل توضیح بده این چیه !

----------


## Netsky

Snippet Compiler برنامه كوچكي است كه قابليت اجراي كدهاي كوچك VB.Net و ‍‍C#‎ را دارا ميباشد . فرض كنيد كه ميخايد يك قطعه كد كوچك را تست كنيد . بايد ابتدا ويژوال استديو را باز كنيد و سپس يك پروژه جديد ايجاد كرده و كد خود را تست كنيد . انجام اين چند مرحله واقعا در بعضي مواقع كلافه كننده است . حالا با استفاده از اين برنامه كوچك و كم حجم ميتوانيد به سرعت قطعه كد مورد نظر خود را آزمايش كنيد . همچنين اين برنامه قابليت اينتلايزنس را نيز دارا ميباشد . بعد از اينكه برنامه را دانلود كرديد قطعه كد خود را در قسمت RunSnippet قرار دهيد و با فشردن كليد F5 كد مورد نظرتان را آزمايش كنيد . 

سايت سازنده 
لينك دانلود مستقيم با حجم 1.2 مگابايت
منبع : فراسان

----------


## Netsky

سلا بر همه رفقا .
يه چند مدتي بود كه تاپيك هايي راجع به جداسازي سه رقم سه رقم اعداد مطرح ميشد . يه كد كه با سي شارپ نوشته شده بود رو به VB تبديلش كردم و الان ميزارمش اينجا تا تمامي دوستان عزيز ازش استفاده كنن : 
Dim S As String
Dim N As Int64
S = TextBox1.Text.Replace(",", "")
N = Convert.ToInt64(S)
TextBox1.Text = N.ToString("#,#")
TextBox1.Select(TextBox1.Text.Length, 1)

موفق باشيد ...........

----------


## Mehdi6052

> سلام
> من بیشتر از این راهکار استفاده می کنم که خیلی نرم تر وبهتره:
>     Dim moving As Boolean = False
>     Dim dleft, dtop
> 
> 
>     Sub startMooving() Handles Button1.MouseDown
>         moving = True
> 
> ...


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

با تشکر از کسانی که چنین مطالب جالبی را در این تاپیک قرار داده اند.

----------


## sepehr.net

سلام

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

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

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

با تشکر

----------


## sepehr.net

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

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

بر خلاف تصور اولیه ، ساختن برنامه ایی که این کار را برای ما انجام بده ، با امکاناتی که دات نت به ما داده خیلی راحته

کنترل FileSystemWatcher که در پنچره Toolbox موجود هست ، این امکان را در اختیار ما قرار میده.
کار با این کنترل خیلی راحته. فقط چند تا Property کوچیک داره که کار اونها رو میگم :

پس از اینکه این کنترل را به برنامه اضافه کردین به پنجره Property اون برید و این تنظیمات را Set کنین 

Path : این پروپرتی تعیین میکنه که گزارش از چه پوشه یا مسیری گرفته شود.

IncludeSubdirectories : اگر این پروپرتی  True  شود ،از زیر پوشه های مسیر انتخاب شده هم گزارش تهیه میکند.

Filter : بعضی از مواقع هست که لازم است تغییرات روی یک فایل خاص را گزارش کنین. برای این کار این پروپرتی را با نام و پسوند فایل مورد نظر تنظیم میکنین مثلا Test.txt یک فایل متنی با نام Test در مسیری که قبلا مشخص شده رو مورد نظر قرار میدهد.

NotifyFilter : این پروپرتی مشخص میکنه که چه مشخصاتی از فایل یا پوشه رو به ما برگردونه

EnableRaisingEvents : این پروپرتی مشخص میکنه که رویداد های این کنترل فعال شوند یا خیر. در واقع یک جوری Start و Stop این کنترل محسوب میشه.

Event های این کنترل :

این کنترل 4 تا رویداد اصلی داره که از اسم اونها کاملا مشخصه که چه مواقعی اتفاق می افتند.
Changed و Created و  Deleted و  Renamed

وقتی هر کدام از این موارد روی یک فایل یا پوشه اتفاق می افتد ، رویداد مربوطه فراخوانی میشود که شما میتوانین کد های مورد نظر خودتون رو اونجا بنویسین

امیدوارم که مفید باشه

با تشکر

----------


## اباصلتی

با سلام 
من جهت حرکت در داتا گرید مشکل داشتم  ( با اینتر و پس از اتمام  ادیت ) و  به جائی که در  سلول سمت راست  حرکت کند  به سلول زیرین هدایت میشد.
راهنمائی های زیادی دیدم  , تا اینکه خودم با  این کد   موفق به رفع مشکلم شدم  . امیدوارم به درد شما هم بخورد.

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

Me.KeyPreview = True

سپس 


Private Sub grd1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grd1.CellEndEdit
        SendKeys.Send("{up}")
        SendKeys.Send("{left}")
    End Sub


    Private Sub grd1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles grd1.KeyPress
        If e.KeyChar = Chr(Keys.Enter) Then
            SendKeys.Send("{up}")
            SendKeys.Send("{left}")
        End If

    End Sub

----------


## محمد فدوی

> سلام
> 
> نخ ها :(Thearding) یکی از بهترین امکان برای استفاده بهینه منابع هست با این حال خیلی مورد بی توجهی قرار می گیره.
> مثلاً با این موضوع بر خرده باشید که وقتی حلقه ای بینهایت یا طولانی داریم و نیاز هست که در هنگام پردازش حلقه به رویداد های دیگه رسیده مورد تقاضای کاربر جواب بده در این حالت یا شما باید از دستور Doevents استفاده کنید که اصلاً توصیه نمی شه چون اجرای این دستور حدوداً یک میلی ثانیه تاخیر ایجاد می کنه و اگر حلقه من 10000 هزار بار تکرار بشه در برنامه من به صورت ناخواسته 10 ثانیه وقت تلف می شه (برای پاسخ به رویداد های دیگر )
> برای این منظور از نخ ها استفاده که کارایی برنامه شما رو به صورت چشم گیری افزایش می دهد 
> من یک حلقه بزرگ رو مثال می زنم ک من در اینجا قصد دارم یک جستجو در یک مسیر خاص در درایوم رو به شما نشون بدم لازم به ذکر هست که این برنامه تمام مسیر یعنی تمام زیر شاخه ها رو هم در بر می گیره:
> این کد کاملش :
> ضمیمه 25299 
> این هم یک مثال ساده تا بهتر متوجه بشیم: 
> ...


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

----------


## sh2007

دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره

----------


## resanehmehr

> دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره


دوست عزیز لطفاً منظور خودتون رو از اطلاعات رو روشن تر توضیح بدین. اگر منظورتون تبدیل فایل های با کد اسکی و یا فایلهای فارسی تحت Dos به Unicode هستش جواب شما مثبته و من برنامه تبدیل فایلهای فارسی که با فارسی ساز Vegaf ایجاد شده باشن رو نوشتم که اگر نیاز داشتین پیغام بدین تا براتون Up کنم.

----------


## sh2007

با سلام اگه زحمتي نيست اون برنامه رو Up كن
ممنون

----------


## mc_laren

سلام من براش عنوان مناسبی پیدا نکردم و لی اگه کد رو بخونین متوجه میشین
  Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click, TextBox13.TextChanged
        MsgBox(MyClsDate.Num2ShamsiDate(Val(Me.TextBox13.T  ext)))
    End Sub

با این روش من  عملی که می خواستم با کلیک روی دکمه و همچنین در رویداد change تکست باکس اتفاق بیافته رو با گذاشتن  TextBox13.TextChanged بعد ازHandles Button5.Click باعث شدم با تغییر تکست باکس و یا کلیک روی دکمه یک اتفاق بیافته .

----------


## Mehdi6052

> سلام من براش عنوان مناسبی پیدا نکردم و لی اگه کد رو بخونین متوجه میشین


دوست عزیز مطلبی که شما نوشته بودید خیلی ساده بود. ولی از آنجایی که ممکن است بعضی از برنامه نویسان تازه کار این روش را خوب بلد نباشند، من مثال دیگری از آن را در اینجا ذکر می کنم. 
این تکه کد را از داخل برنامه خودم بیرون آورده ام که در آن به رویداد فشردن کلید Enter در تکست باکس ها جواب داده می شود (به نحوه ی تشخیص تکست باکس های مختلف از طریق متد GetHashCode دقت نمایید).

Private Sub Sanad_Textbox_Control_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtPeyNum.KeyDown, txtSharhRoz.KeyDown, SanadTypeComboBox.KeyDown, txtSanadNum_View.KeyDown, txtAtf_View.KeyDown, txt_Date.KeyDown
        Try
            Select Case e.KeyCode

                Case Keys.Enter
                    Select Case sender.GetHashCode

                        Case txtPeyNum.GetHashCode
                            txtSharhRoz.Focus()

                        Case txtSharhRoz.GetHashCode
                           dGrid.Focus() 

                        Case SanadTypeComboBox.GetHashCode
                            txtPeyNum.Focus()

                        Case txtSanadNum_View.GetHashCode
                            txtAtf_View.Focus()

                        Case txtAtf_View.GetHashCode
                           dGrid.Focus()

                        Case txt_Date.GetHashCode
                            If Sanad_Date_Control() = True Then SanadTypeComboBox.Focus()


                    End Select

                    ''Case Keys.F2
                    ' ...
                Case Else
                    ' ...
            End Select
        Catch ex As Exception

        End Try
    End Sub ' Enter فشردن دکمه

----------


## Mani_rf

در هر زبان برنامه نویسی چندین کلمه کلیدی وجود دارد که در طول برنامه نمی توان از آنها به عنوان اسم متغییر، تابع و ... استفاده کرد.
برای مثال نمی توانیم از کلمه کلیدی True و یا Integer و... به عنوان اسم متغییر استفاده کرد. 
اما روشی هست که با استفاده از آن می توان این کار را هم انجام داد. فقط کافی است تا نام مورد نظر را درون [ ] قرار دهید تا بدون هیچ مشکلی آن را به عنوان نام در نظر گیرد.
برای مثال :

Dim Integer asInteger
متغییری با این نام را در حالت عادی نمی توان تعریف کرد.
برای تعریف متغییری با استفاده از نام های کلیدی به این شکل عمل می کنیم :
Dim [Integer] asInteger

----------


## tizboy2010

سلام
دوست عزیز خیلی ازت ممنونم.واقعا پستهای خوبی گذاشتی.
من برنامه نویسما وی بی و سی شارپ برنامه نویسی میکنم.این تاپیک جزء معدود تاپیکهایی هست که من توش مطالبی خوندم که قبلا نمی دونستم.
خیلی از سوالایی که اعضا می پرسن، جوابش رو میدونم ولی نمیرسم جوابشونو بدم
اگه سوالی داشتی در خدمتم.تاپیک هم خیلی عالیه.به نظر من مطالبی که واقعا ناگفته هست بذار.به اندازه کافی پستهای مبتدی در این سایت هست
ممنون

----------


## lastgoldentiger

با سلام
:*زکات علم به آموختن آن است.*

*کد اول :* تابعی برای برگرداندن تعداد سطر های جدول بدون دیتاست و ملحقاتش (ExecuteScaler RowCount) در ado.net



        Private Function zonkanCountF() As String
        Dim ConnClient As SqlConnection = New SqlConnection("server=" + StrServerPath + "; database=VF; Uid=" + StrUID + "; pwd=" + StrPWD + ";")
        Try
            Dim CmdInsertToZonkan As SqlCommand = New SqlCommand("", ConnClient)
            CmdInsertToZonkan.CommandType = CommandType.Text
            CmdInsertToZonkan.CommandText = "SELECT COUNT (*) AS row_count FROM  Zonkan  WHERE UserName = '" + StrUserName.Trim + "'"
            CmdInsertToZonkan.Connection.Open()
            Return CmdInsertToZonkan.ExecuteScalar().ToString()
            CmdInsertToZonkan.Connection.Close()

        Catch ex As Exception
            Return "Err"
            'MsgBox("خطا در ثبت اطلاعات زونکن در بانک اطلاعاتی سرور" + vbCrLf + ex.Message, MsgBoxStyle.MsgBoxRight)
        End Try

   
    End Function

----------


## Hybrid

سلام ، کلاس ServiceController در فضای نامی System.ServiceProcess تعریف شده و برای کار با Service ها تدارک دیده شده ، متد Shared شده GetServices از این کلاس لیست کلیه Service های نصب شده بر روی ماشین رو بر میگردونه ، کد زیر تمامی سرویس های نصب شده بر روی ماشین رو بر میگردونه و اونا رو در Listbox نشون میده ، 

یک پروژه از نوع WindowsFormApplication ایجاد کنید و یک کنترل ListBox را روی فرمتون قرار بدین ، سپس روی آیکن پروژه در SolutionExplorer کلیک راست کنید و اسمبلی System.ServiceProcess رو به پروژه اضافه کنید سپس میتونید از متد زیر استفاده کنید ، 

Private Sub GetAllServices()
        For Each service As ServiceController In ServiceController.GetServices()
            Dim serviceName As String = service.ServiceName
            Dim serviceDisplayName As String = service.DisplayName
            Dim serviceType As String = service.ServiceType.ToString()
            Dim status As String = service.Status.ToString()
            ListBox1.Items.Add(serviceName + "  " + serviceDisplayName +
                serviceType + " " + status)
        Next
    End Sub

----------


## Alirezanet

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


همیشه برای نوشتن یک String در هنگام کدنویسی اگر به صورت چند خط بود مشکل داشتیم. به طور مثال فرض کنید میخواید یک متغیر ایجاد کنید و تکه کد SQL زیر رو توش بزارید. 

WITH tree (pk_groupid, fk_parentid, level, name) as 
(
SELECT pk_groupid, fk_parentid, 0 as level, name
FROM ClientGroup
WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'




UNION ALL




SELECT c2.pk_groupid, c2.fk_parentid, tree.level + 1, c2.name
FROM ClientGroup c2 
INNER JOIN tree ON tree.fk_parentid = c2.pk_GroupID
)
SELECT *
FROM tree





اگر بخوایم این کارو انجام بدین مجبوریم یا تمام رشته متن مورد نظر رو توی یک خط بنویسیم ویا تو هر کد که به پایان میرسه با علائم + یا & خطوط رو بهم متصل کنیم. به شکل زیر:

            Dim MyCommand = " WITH tree (pk_groupid, fk_parentid, level, name) as " & _
            "(" & _
            "SELECT pk_groupid, fk_parentid, 0 as level, name" & _
            "FROM ClientGroup" & _
            "WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'"
                .
                .
                .
                .
. 

و وای به روزی که توی همچین متنی از علائم "" استفاده شده باشه !!


بریم سر اصل مطلب ... ترفند :
برخلاف زبان C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎  ‎‎ در زبان VB.Net امکان تعریف و نوشتن Xml به صورت مستقیم در محیط کدنویسی vb محیاست که این امکان به ما اجازه میده تا همچین متنی رو با قالب Xml در کدمون قرار بدیم و به راحتی بتونیم به عنوان یک رشته از Xml خارجش کنیم... به شکل زیر : 



 
Dim MyCommand As String = (<MyQuery>
WITH tree (pk_groupid, fk_parentid, level, name) as 
(
SELECT pk_groupid, fk_parentid, 0 as level, name
FROM ClientGroup
WHERE pk_GroupID = '874F5359-39A1-4E57-AC21-FE162F19B64D'


UNION ALL


SELECT c2.pk_groupid, c2.fk_parentid, tree.level + 1, c2.name
FROM ClientGroup c2 
INNER JOIN tree ON tree.fk_parentid = c2.pk_GroupID
)
SELECT *
FROM tree
</MyQuery>).Value


 
به همین سادگی با اضافه کردن یک تگ با هر نامی (که اینجا من MyQuery استفاده کردم) میتونیم متنمون رو در محیط کدنویسی قرار بدیم. مقدار Value بازگشتی از این Xml همان متن ما خواهد بود.

نکته : این ترفند درصورتی قابل استفاده است که از علامت <> و علائم معنی دار برای Xml در متن استفاده نشده باشد.


موفق باشید

----------


## a_mohammadi_m

سلام
گرینه Inherit  یعنی از شیء والدش ارث ببره
مثلا یک فرم Mdi Child از فرم Parent خودش این خاصیت رو ارث میبره و نیاز به تنظم دوباره اون نیست

----------


## a_mohammadi_m

> دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره


سلام 

اینجا پست شماره 10 رو ببینید
https://barnamenevis.org/showthread.p...27#post2082027

----------


## داودباقری

چطور می توان فایل با پسوند rpt رو در ویندوز باز کرد؟

----------

