PDA

View Full Version : نا گفته ها در Visual Basic.Net



sepehr.net
پنج شنبه 16 آبان 1387, 18:29 عصر
سلام
پس از این همه وقت گذاشتن برای یادگیری ویژوال بیسیک هنوز به مواردی برخورد میکنم که برای من کاملا ناشناخته و جالب است.
برای همین تصمیم گرفتم تا تاپیکی رو شروع کنم که هدف ان نشان دادن امکانات و توانایی های از ویژوال بیسیک است که کمتر کسانی اونها رو میشناسند .
از شما خواهش میکنم تجربیات و نکاتی که در برنامه نویسی با ویژوال بیسیک بدست اورده اید و به نظر خودتان جالب و اموزنده هستند رو برای استفاده ی همه ی برنامه نویسان روی سایت قرار دهید.
با تشکر

sepehr.net
پنج شنبه 16 آبان 1387, 18:35 عصر
برای شروع من کلاسی رو معرفی میکنم که مشکل تعداد زیادی از برنامه نویسان در مورد تاریخ شمسی رو حل میکنه. در دات نت کلاسی به نام 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
پنج شنبه 16 آبان 1387, 18:47 عصر
مشکلی که خیلی از برنامه نویسان با ان مواجه هستند این است که عملکرد 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
پنج شنبه 16 آبان 1387, 19:09 عصر
این دفعه میخوام Property هایی رو براتون بگم که کمتر با انها اشنا هستیم
AutoCompleteCustomSource , AutoCompleteMode , AutoCompleteSource
این مشخصات که مخصوص TextBox هستند میتوانند کار ورود داده به برنامه ها رو خیلی سریع تر کنند. بدین صورت که ما بوسیله ی آنها میتوانیم مثل یک ComboBox بلکه در زمینه هایی بهتر از ان عمل کنیم.
کار این مشخصات این است که با تایپ کردن قسمتی از متن درون Textbox برنامه بقیه ی آن متن را به کاربر نشان دهد.
برای کار شما ابتدا باید برای AutoCompleteCustomSource آیتم هایی رو تعریف کنین.
سپس AutoCompleteMode را انتخاب کنین
و در آخر AutoCompleteSource را برابر CustomSource قرار دهید.
با این کار وقتی کاربر حرف اول کلمه ایی رو تایپ میکنه برنامه در AutoCompleteCustomSource آن کلمه رو پیدا میکنه و به کاربر نمایش میده.
حالت های مختلفی وجود داره مثلا اگه AutoCompleteSource رو برابر FileSystem قرار دهیم با تایپ "C:\" برنامه زیر پوشه های درایو C رو برای نوشتن ادرس باز میکنه که این کار کاربر رو خیلی راحت تر میکنه:چشمک:

sepehr.net
پنج شنبه 16 آبان 1387, 23:56 عصر
بعضی وقت ها پیش میاد که میخواهیم یک نوع داده ی خاص رو از کاربر بگیریم که شکل خاصی داره (مثلا کد ملی یا کد پستی و ...) . برای اینکه ببنیم کاربر اون متن ورودی رو طبق قاعده وارد کرده یا نه از کلاس 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
جمعه 17 آبان 1387, 00:34 صبح
مثل اینکه کسی مایل نیست مطلبی قرار بده !!!
چرا دوست عزیز . ولی مطالبی که شما پست میکنی خیلی پیشرفته هستش و نشانه نکته سنجی شماست . بنده به شخصه با این مدل مطالب تکمیلی کمتر برخورد کردم .. ضمنا کمی صبر کنید چون اکثر دوستانی که من میشناسم 1-2 روز در میان مطالب این سایت رو چک میکنند .

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

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

علیرضا مداح
جمعه 17 آبان 1387, 08:31 صبح
سلام دوستان عزیز،
لطفا" در این تاپیک تنها به ارائه ی نکات بپردازید و سوالات خود را در تاپیک جدید مطرح نمایید ،/

mojtaba-saleh
جمعه 17 آبان 1387, 13:54 عصر
امیدوارم تاپیک خوب پیش بره.
این هم یک کد که در خاصیت 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
جمعه 17 آبان 1387, 14:03 عصر
ساختن Help در برنامه ، میتونه ارزش اون برنامه رو بالا ببره. مخصوصا اگه Help ایی قوی داشته باشه . و بخوبی با کاربر ارتباط برقرار کنه
این دفعه میخوام چند کنترل که برای ساختن Help بکار میروند را معرفی کنم . Sample زیر نحوه ی کار با این کنترل ها رو نشان میده.(بر گرفته از سایت Microsoft)
کنترل های HelpProvider , ToolTip , MenuStrip ,ErrorProvider

mojtaba-saleh
جمعه 17 آبان 1387, 14:07 عصر
این هم یک کد خیلی مفید برای حلقه ها و loop ها
اگر توجه کرده باشید توی دات نت وقتی یک حلقه ی بزرگ , مثلا 1000000 رکورد رو بخواید توی یه لیست باکس بریزید , یا از دیتابیس فرا بخونید , تا قبل از تموم شدن حلقه برنامه اگر Not Response نشه , حداقل دیگه نمی تونید توش کاری انجام بدید.
برای رفع این مشکل , کافیه در حلقه خود از متد Application.DoEvents استفاده کنید
مثال :



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

sepehr.net
جمعه 17 آبان 1387, 14:49 عصر
این هم نمونه کدی برای کار با پست شماره ی 4
البته من فقط 2 تا از حالت هاش رو قرار دادم . بقیه ی حالت هاش مشخص هستند و احتیاجی به گفتن نداره. در ضمن من تمامی کار ها رو در کد انجام دادم تا دوستان متوجه بشوند.

mostafaaa
جمعه 17 آبان 1387, 17:56 عصر
سلام
این هم یه پروپرتی 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اینم نمونه کنترل که توش از این کد استفاده کردم
25277

sepehr.net
شنبه 18 آبان 1387, 22:29 عصر
سلام
این هم نمونه کدی برای تغییر زبان کامپیوتر. بعضی از افراد از 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
شنبه 18 آبان 1387, 23:48 عصر
سلام
نخ ها :(Thearding) یکی از بهترین امکان برای استفاده بهینه منابع هست با این حال خیلی مورد بی توجهی قرار می گیره.
مثلاً با این موضوع بر خرده باشید که وقتی حلقه ای بینهایت یا طولانی داریم و نیاز هست که در هنگام پردازش حلقه به رویداد های دیگه رسیده مورد تقاضای کاربر جواب بده در این حالت یا شما باید از دستور Doevents استفاده کنید که اصلاً توصیه نمی شه چون اجرای این دستور حدوداً یک میلی ثانیه تاخیر ایجاد می کنه و اگر حلقه من 10000 هزار بار تکرار بشه در برنامه من به صورت ناخواسته 10 ثانیه وقت تلف می شه (برای پاسخ به رویداد های دیگر )
برای این منظور از نخ ها استفاده که کارایی برنامه شما رو به صورت چشم گیری افزایش می دهد
من یک حلقه بزرگ رو مثال می زنم ک من در اینجا قصد دارم یک جستجو در یک مسیر خاص در درایوم رو به شما نشون بدم لازم به ذکر هست که این برنامه تمام مسیر یعنی تمام زیر شاخه ها رو هم در بر می گیره:
این کد کاملش :
25299


این هم یک مثال ساده تا بهتر متوجه بشیم:




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
شنبه 18 آبان 1387, 23:57 عصر
این کد زمان روشن بودن کامپیوتر رو بر حسب میلی ثانیه بر میگرداند. این قابلیت میتونه خیلی کارامد باشه در ضمن چون در یک متغیر 32 بیتی ذخیره میشود پس از 24 روز مقدار آن صفر میشود.

System.Environment.TickCount

rooshan2008
یک شنبه 19 آبان 1387, 00:22 صبح
این هم ایجاد یک شی در زمان اجرا و انتصاب رویداد کلید در زمان اجرا به آن شی :




Dim Bt As New Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Bt.Parent = Me

Bt.Location = New Point(Me.Width / 2, Me.Height / 2)
Bt.Text = "Ok"

AddHandler Bt.Click, AddressOf BtClick
End Sub

Private Sub BtClick(ByVal sender As Object, ByVal e As EventArgs)
MsgBox("Hello ...")
End Sub

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

sepehr.net
یک شنبه 19 آبان 1387, 09:00 صبح
دوست عزیزمان ساختن باتون در زمان اجرا را گفتند ، من هم 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
یک شنبه 19 آبان 1387, 20:59 عصر
این دفعه شما رو با Code Snippet ها اشنا میکنم.
Code Snippet ها کد های کوچک شده ایی هستند که باعث تسهیل در کد نوشتن میشوند. برای اینکه با این کد ها آشنا بشین در محیط کد نویسی ویژوال استادیو کلیک راست کنید و گزینه ی Insert Snippet ر وانتخاب کنید . ملاحضه میکنین که لیستی از این کد ها رو براتون میاره
برای نمونه ایتم Windows Operating System\Find the current user رو انتخاب بکنین
ملاحضه میکنین که متغیری تعریف میکنه که نام کاربر جاری در آن ذخیره شده.
این کدها کار برنامه نویس رو خیلی راحت تر میکنه. (به زودی نحوه ی ساخت این کد ها رو کامل بهتون میگم.). یکی از تفاوت هایی که ویژوال 2005 با نسخه های قبلی داره همین Code Snippet هاست.
مثلا در دات نت حلقه ی For یک CodeSnippet هست.
برای اینکه بتونید سریع تر به ساختار این کد ها دسترسی داشته باشین پس از نوشتن اسم انها(مثلا For) کلید TAB رو بزنید ملاحضه میکنین که چه اتفاقی صورت میگیره.

sepehr.net
یک شنبه 19 آبان 1387, 22:57 عصر
تصمیم گرفتم که همین حالا آموزش ساخت 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
دوشنبه 20 آبان 1387, 13:22 عصر
تغییر اندازه خودکار فرم

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

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

mostafaaa
دوشنبه 20 آبان 1387, 18:43 عصر
سلام
آیا تا حالا توی برنامه هاتون نیاز داشتین که یه یه کد برنامه نویسی توسط کاربرتون وارد بشه و برنامتون اون رو کمپایل کنه؟
آیا تا به حال نیاز داشتین که توی برنامتون یه سری فرمول ریاضی از کاربرتون دریافت کنید و حلش کنید؟
آیا تا به حال به فکرتون رسیده که یه ماشین حسابی بنویسید که وقتی 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
شکل کلی فرمتون هم به شکل زیر باید باشه.
25375
امیدوارم به دردتون بخوره

sepehr.net
دوشنبه 20 آبان 1387, 22:17 عصر
تا حالا درمورد 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
دوشنبه 20 آبان 1387, 23:35 عصر
سلام
با تشکر از sepehr.net
این تاپیک رو درباره تراکنش قبلاً تقربا
http://barnamenevis.org/forum/showthread.php?t=126454&highlight=%D8%AA%D8%B1%D8%A7%DA%A9%D9%86%D8%B4

sepehr.net
سه شنبه 21 آبان 1387, 00:01 صبح
بنا به درخواست بعضی از دوستان در این پست اموزش 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
سه شنبه 21 آبان 1387, 00:11 صبح
دوستان هرکس مایل به یادگیری مطالب بیشتری در مورد تراکنشها (transaction)هست میتونه به این تاپیک (http://barnamenevis.org/forum/showth...A9%D9%86%D8%B4)
که جناب Rooshan2008 لطف کردن آموزش کامل اونرو قرار دادن مراجعه کنه

mc_laren
سه شنبه 21 آبان 1387, 13:08 عصر
با سلام
حل مشکل 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
شنبه 25 آبان 1387, 11:47 صبح
تبدیل تاریخ از/به شمسی و دیگر تقویم ها :

تبدیل به میلادی:

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
دوشنبه 27 آبان 1387, 18:43 عصر
سلام
برای اینکه برنامه ایی که نوشتین فقط یک بار باز بشه (به صورت همزمان) تنظیمات زیر را انجام بدین:چشمک:
در داخل ویژوال استادیو در Solution Explorer بر روی آیتم My Project دابل کلیک کنید تا یک پنجره برگه دار (tabbed window) باز شود. در این پنجره تنظیمات برنامه شما قرار دارد.بر روی برگه tab Application کلیک کنید و در قسمت windows application framework properties بر روی چک باکس Make Single instance application کلیک کنید تا انتخاب گردد.

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

sepehr.net
سه شنبه 28 آبان 1387, 17:58 عصر
بازم سلام
تا حالا در مورد کلاس 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 در متغیر ریخته میشه.
برای کسب اطلاعات بیشتر به تاپیک زیر مراجعه کنید
http://barnamenevis.org/forum/showthread.php?p=635235#post635235

sepehr.net
جمعه 08 آذر 1387, 09:31 صبح
این هم تمامی کلید های ترکیبی که در VisualBasic 2005 وجود دارند.:چشمک:

Morteza_s
جمعه 08 آذر 1387, 19:01 عصر
یک نمونه برنامه برای کار با مقادیر پولی

http://irapic.com/uploads/1227985705.gif

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

sepehr.net
شنبه 09 آذر 1387, 20:55 عصر
اضافه کردن رویداد سه بار کلیک به یک کنترل

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
چهارشنبه 20 آذر 1387, 21:49 عصر
یکی از مشکلاتی که افراد زیادی با اون درگیر هستند اینه که :
ما در بانک یک جدول داریم که مشخصات افراد رو در اون ثبت میکنه

حالا میخوایم رو فرم یک ComboBox داشته باشیم که در اون نام افراد نشان داده بشه و با انتخاب هر فرد از این ComboBox یک ID که مربوط به همون فرد هست رو به ما نشون بده
خب برای این کار در ابتدا ما اطلاعات جدول را در یک DataSet یا DataTable میریزیم سپس کد زیر رو مینویسیم

ComboBox1.DataSource=Dt
ComboBox1.DisplayMember="Name"
ComboBox1.ValueMember="ID"
ComboBox1.Show()

sepehr.net
پنج شنبه 21 آذر 1387, 16:48 عصر
این دفعه یک پروپرتی جالب از 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
شنبه 30 آذر 1387, 16:09 عصر
سلام
حتما" تا حالا عبارت 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
دوشنبه 02 دی 1387, 23:00 عصر
سلام
دوست عزیز Nevron یک سری ابزاره که متعلق به VisualBasic.net نیستند
این تاپیک در مورد ابزار های خود دات نت توضیح میده
اگه شما درخواستتون رو در این تاپیک (http://barnamenevis.org/forum/showthread.php?t=69916) مطرح کنید به نتیجه میرسه

sepehr.net
سه شنبه 03 دی 1387, 00:01 صبح
سلام
شاید شما هم از نوشتن دستورات 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
پنج شنبه 19 دی 1387, 15:37 عصر
سلام
حتما" بعضی از متد ها را دیدید که میتونید یک یا چند پارامتر به انها پاس کنید؟
یعنی اگر یک پارامتر به ان ارسال کنید برنامه کامپایل میشود و اگر هم دو یا بیشتر پارامتر به انها ارسال کنید باز هم برنامه کامپایل میشود.
پیش بار گذاری یا 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
شنبه 28 دی 1387, 09:52 صبح
سلام دوستان
یکی از کار هایی که در خیلی از برنامه ها ی روتین مورد استفاده قرار میگیره تبدیل دیتاگرید و اطلاعات اون به فرمتهای مختلفی مثل Word,Excel و PDF هست که در این بین تبدیل اطلاعات به فرمت PDF از بقیه مشکل تر به نظر میاد. برنامه ای گذاشتم این کار رو با استفاده از کامپوننت rzPDFCreator.dll خیلی راحت کرده.

mehrnoosh_al62
چهارشنبه 02 بهمن 1387, 10:43 صبح
یه راهه خیلی ساده برای تبدیل اطلاعات دیتاگرید به 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
سه شنبه 08 بهمن 1387, 09:26 صبح
گاهی اوقات نیازه که متن داخل 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
شنبه 19 بهمن 1387, 09:45 صبح
اين يك sample هست براي ساختن متن هاي متحرك
براي زيبا سازي فرم ها و استفاده در splash ها كاربرد داره

my_blithe
دوشنبه 28 بهمن 1387, 19:31 عصر
اگر بخواهیم از طریق کد textbox یا label و یا هر کنترل دیگه رو طوی فرم ایجاد کنیم از طریق کد زیر میشه :


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


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

saeid4462
چهارشنبه 19 فروردین 1388, 14:48 عصر
دوست عزيز با كد زير ميتوني اينكار رو انجام بدي.
فقط رنگ زمينه پیکچر باکس رو تغيير بده تا بدوني كه كجا بايد خط بكشي
با كد زير تا زماني كه دكمه چپ ماوس پاين باشه ميتوني بدون محدوديت خط بكشي
اميدوارم تونسته باشم كه كمك كرده باشم
برام فقط دعا كن و يه فاتحة براي مادرم بخون.
:افسرده::لبخندساده:

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
دوشنبه 01 تیر 1388, 14:53 عصر
سلام ...
ديدم بعضي از دوستان در رابطه با export , import كردن از برنامه به excel سوال مي كنند .
براي همين يه سري فايل از سايت code project پيدا كردم گفتم بزارم اينجا شايد به كار كسي بياد .


http://barnamenevis.org/forum/showthread.php?t=165068


(http://barnamenevis.org/forum/showthread.php?t=165068)

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

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

toopak
جمعه 13 شهریور 1388, 21:24 عصر
حرکت دادن فرم با کلیک روی هر نقطه از فرم
امیدوارم تکراری نباشه

اینها رو هم تو 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
سه شنبه 17 شهریور 1388, 18:23 عصر
نقل قول از : http://www.forum.p30world.com/showpost.php?p=4186687&postcount=1

__________________________________________________ ______________________


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

http://img98.com/images/g91ycqip8pjv1e9isgl6.jpg
وبا انتخاب گروه کد؛ و پیدا کردن کد مورد نیاز خود را وارد کنید (دابل کلیک کنید) و قسمت های مشخص شده با رنگ سبز را طبق نیاز خود تعغییر دهید.
http://forum.p30world.com/images/statusicon/wol_error.gif
http://img98.com/images/vfz9b9zooplz3v28iu.jpg
شما با رفتن به منوی Tools و انتخاب Code Snippets Manager این کد ها را مدیریت کنید شما میتوانید با زبان XML کد هایی که دوست دارید بنویسید و در این قسمت وارد کنید.
2.امکان دیگر این است که در صفحه کد؛ کدی که نوشته اید را انتخاب کنید و به سمت نوار ابزار بکشید تا کد شما در نوار ابزار قرار بگیرد و از این به بعد شما هر وقت که به این کد نیاز داشتید کافی است که برروی آن در نوار ابزار دابل کلیک کنید یا به سمت صفحه کد بکشید تا کد به مکانی که اشاره گر است انتقال یابد.http://www.forum.p30world.com/images/New-smile/N_aggressive%20%2816%29.gifhttp://www.forum.p30world.com/images/New-smile/N_aggressive%20%2817%29.gif

hossein-khoshseyar
سه شنبه 01 دی 1388, 13:46 عصر
شاید این مطلبی که می خوام بگم خیلی ساده باشه ولی خودم که خیلی به دردم می خوره
خیلی وقتا پیش میاد من یه کدی رو توی vb6 بلدم اما معادل اون توی دات نت رو نمی دونم چی می شه
برای اینکار می تونیم از توی منوی tools گزینه Upgrade Visual Basic 6 code... رو انتخاب کنیم و توی صفحه ای که باز شد کد vb6 رو بنویسیم تا دات نت اون رو از vb6 به دات نت ترجمه کنه

Alirezanet
جمعه 09 بهمن 1388, 19:50 عصر
سلام قبلا توی یه تاپیک جداگانه این مطلب مطرح شده بود ولی فکر میکنم جاش اینجا باشه!

قبلا اگه میخواستیم برنامه رو هم فارسی هم انگلیسی بنویسیم باید مدتها روی کدهاش کار میکردیم ولی توی .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
شنبه 10 بهمن 1388, 08:30 صبح
این مطلب حذف شده است.

pingsft
یک شنبه 11 بهمن 1388, 21:39 عصر
برای شروع من کلاسی رو معرفی میکنم که مشکل تعداد زیادی از برنامه نویسان در مورد تاریخ شمسی رو حل میکنه. در دات نت کلاسی به نام 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


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

pingsft
یک شنبه 11 بهمن 1388, 22:05 عصر
سلام
من بیشتر از این راهکار استفاده می کنم که خیلی نرم تر وبهتره:
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
دوشنبه 12 بهمن 1388, 01:44 صبح
با سلام.
دوست عزیز،کلاس PersianCalendar به خاطر یک ocxجداگانه به برنامه شما اضافه شده و به طور پیشفرض در visual stadioنصب نیست....:متفکر:
Imports System.Globalization
توی این فضای نامی هست ...
خواهشا سوالهارو جای دیگه مطرح کنین...

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

Netsky
شنبه 18 اردیبهشت 1389, 14:04 عصر
Snippet Compiler برنامه كوچكي است كه قابليت اجراي كدهاي كوچك VB.Net و ‍‍C# را دارا ميباشد . فرض كنيد كه ميخايد يك قطعه كد كوچك را تست كنيد . بايد ابتدا ويژوال استديو را باز كنيد و سپس يك پروژه جديد ايجاد كرده و كد خود را تست كنيد . انجام اين چند مرحله واقعا در بعضي مواقع كلافه كننده است . حالا با استفاده از اين برنامه كوچك و كم حجم ميتوانيد به سرعت قطعه كد مورد نظر خود را آزمايش كنيد . همچنين اين برنامه قابليت اينتلايزنس را نيز دارا ميباشد . بعد از اينكه برنامه را دانلود كرديد قطعه كد خود را در قسمت RunSnippet قرار دهيد و با فشردن كليد F5 كد مورد نظرتان را آزمايش كنيد .


http://barnamenevis.org/forum/attachment.php?attachmentid=48650&stc=1&d=1273312984
سايت سازنده (http://www.sliver.com/)
لينك دانلود مستقيم (http://www.sliver.com/Downloads/SnippetCompiler_3.0.2.zip) با حجم 1.2 مگابايت
منبع : فراسان (http://farasun.wordpress.com/2010/04/24/snippet-compiler/)

Netsky
جمعه 24 اردیبهشت 1389, 23:11 عصر
سلا بر همه رفقا .
يه چند مدتي بود كه تاپيك هايي راجع به جداسازي سه رقم سه رقم اعداد مطرح ميشد . يه كد كه با سي شارپ نوشته شده بود رو به 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
دوشنبه 27 اردیبهشت 1389, 22:00 عصر
سلام
من بیشتر از این راهکار استفاده می کنم که خیلی نرم تر وبهتره:
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
دوست عزیز این چه نوع نوشتن مطلب است.
من که به سختی توانستم بفهمم شما در چه موردی کد نوشته اید.
لطفا مطالب خود را با توضیحات کامل بنویسید و مطالبی را در این تاپیک قرار دهید که به موضوع آن ربط داشته باشد.

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

sepehr.net
جمعه 31 اردیبهشت 1389, 11:30 صبح
سلام

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

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

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

با تشکر

sepehr.net
جمعه 31 اردیبهشت 1389, 12:34 عصر
بعضی از مواقع لازم میشه که یک گزارش از عملکرد یک کاربر در ویندوز داشته باشیم. مثلا کاربر چه فایل هایی رو مشاهده کرده یا چه فایل ها یا پوشه هایی رو ساخته ، یا تغییر نام داده و ... .

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

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

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

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

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

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

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

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

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

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

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

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

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

با تشکر

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

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


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

محمد فدوی
شنبه 15 خرداد 1389, 12:23 عصر
سلام

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


این هم یک مثال ساده تا بهتر متوجه بشیم:




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








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






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

sh2007
جمعه 25 تیر 1389, 16:38 عصر
دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره

resanehmehr
یک شنبه 27 تیر 1389, 11:04 صبح
دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره


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

sh2007
یک شنبه 27 تیر 1389, 11:57 صبح
با سلام اگه زحمتي نيست اون برنامه رو Up كن
ممنون

mc_laren
سه شنبه 05 مرداد 1389, 12:10 عصر
سلام من براش عنوان مناسبی پیدا نکردم و لی اگه کد رو بخونین متوجه میشین

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
شنبه 09 مرداد 1389, 01:16 صبح
سلام من براش عنوان مناسبی پیدا نکردم و لی اگه کد رو بخونین متوجه میشیندوست عزیز مطلبی که شما نوشته بودید خیلی ساده بود. ولی از آنجایی که ممکن است بعضی از برنامه نویسان تازه کار این روش را خوب بلد نباشند، من مثال دیگری از آن را در اینجا ذکر می کنم.
این تکه کد را از داخل برنامه خودم بیرون آورده ام که در آن به رویداد فشردن کلید 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
یک شنبه 24 بهمن 1389, 16:46 عصر
در هر زبان برنامه نویسی چندین کلمه کلیدی وجود دارد که در طول برنامه نمی توان از آنها به عنوان اسم متغییر، تابع و ... استفاده کرد.
برای مثال نمی توانیم از کلمه کلیدی True و یا Integer و... به عنوان اسم متغییر استفاده کرد.
اما روشی هست که با استفاده از آن می توان این کار را هم انجام داد. فقط کافی است تا نام مورد نظر را درون [ ] قرار دهید تا بدون هیچ مشکلی آن را به عنوان نام در نظر گیرد.
برای مثال :

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

tizboy2010
سه شنبه 29 شهریور 1390, 19:38 عصر
سلام
دوست عزیز خیلی ازت ممنونم.واقعا پستهای خوبی گذاشتی.
من برنامه نویسما وی بی و سی شارپ برنامه نویسی میکنم.این تاپیک جزء معدود تاپیکهایی هست که من توش مطالبی خوندم که قبلا نمی دونستم.
خیلی از سوالایی که اعضا می پرسن، جوابش رو میدونم ولی نمیرسم جوابشونو بدم
اگه سوالی داشتی در خدمتم.تاپیک هم خیلی عالیه.به نظر من مطالبی که واقعا ناگفته هست بذار.به اندازه کافی پستهای مبتدی در این سایت هست
ممنون

lastgoldentiger
دوشنبه 23 مرداد 1391, 07:49 صبح
با سلام
:زکات علم به آموختن آن است.

کد اول : تابعی برای برگرداندن تعداد سطر های جدول بدون دیتاست و ملحقاتش (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
چهارشنبه 12 مهر 1391, 13:58 عصر
سلام ، کلاس 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
چهارشنبه 01 مرداد 1393, 07:50 صبح
سلام
امروز یک ترفند جالب که به جرات میتونم بگم کمتر کسی ازش استفاده میکنه رو میخوام بهتون معرفی کنم.


همیشه برای نوشتن یک 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
جمعه 24 مرداد 1393, 02:31 صبح
سلام
گرینه Inherit یعنی از شیء والدش ارث ببره
مثلا یک فرم Mdi Child از فرم Parent خودش این خاصیت رو ارث میبره و نیاز به تنظم دوباره اون نیست

a_mohammadi_m
جمعه 24 مرداد 1393, 02:48 صبح
دوستان بنظرشماتبديل اطلاعات ازداس به ويندوزتووي بي 2008 امكانپذيره
سلام

اینجا پست شماره 10 رو ببینید
http://barnamenevis.org/showthread.php?61446-%D9%85%D8%B4%DA%A9%D9%84-%D8%AE%D9%88%D9%86%D8%AF%D9%86-%D9%85%D8%AA%D9%86-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%DB%8C%D9%84&p=2082027#post2082027

داودباقری
دوشنبه 18 خرداد 1394, 12:35 عصر
چطور می توان فایل با پسوند rpt رو در ویندوز باز کرد؟