PDA

View Full Version : آموزش: پاسخ به سوالات تكراري



mansourii
یک شنبه 30 آبان 1389, 15:46 عصر
جديدا هر موقع تايپيك هاي جديد رو مطالعه ميكنم همه تكراري شده. و همه يكجور سوال ميپرسن
خواهشي كه دارم هر كسي سوال تكراري پرسيد اين تايپيك رو براشون ارسال كنيد!
فكر كنم بهتره درمورد موضوعات ديگه اي بحث كنيم:متفکر:
اطلاعات بيشتر
http://www.regular-expressions.info/characters.html
http://msdn.microsoft.com/en-us/vbasic/default.aspx
www.uop.edu.jo/download/PdfCourses/vb.net/mcsd_vb.pdf
a1vbcode.com
===========
فارسي كردن زبان هنگام ورود به برنامه
چند تا راه داره كه متداول ترين اونها اينه
روش اول: (پيشنهادي)
تو رويداد Enter يك Textbox اين كد رو بنويسيد



Application.CurrentInputLanguage = InputLanguage.FromCulture(New CultureInfo("fa"))

فقط در قسمت جنرال
Imports System.Globalization
يادتون نره

راه دوم:


Private Declare Function MYKEYBOARD Lib"USER32" Alise "LoadKeyboardA"(Byaval str as string,Byaval int as integer) as integer

و تو قسمت Form_load بنويسيد


dim a as integer
a=MYKEBOARD("0000429",1)

---------------
جابجا شدن كنترل ها در زمان اجرا

دراین برنامه فرض شده است که کنترلی به نام ListBox1 دارید و می خواهید به کاربر امکان جابجایی آن درزمان اجرا را بدهید)
ابتدا متغیری مانند T را به صورتی سراسری مانند زیر تعریف کنید:

Dim T As Boolean = False
سپس در رویداد MouseDown کنترل ListBox دستورات زیر را وارد کنید:

If e.Button = Windows.Forms.MouseButtons.Left Then
T = True
ListBox1.Cursor = Cursors.SizeAll
End If
سپس دررویداد MouseMove کنترل ListBox دستورات زیر را وارد کنید:

If T = True Then
ListBox1.SetBounds(ListBox1.Left + e.X, ListBox1.Top + e.Y, ListBox1.Width, ListBox1.Height)
End If

سپس در رویداد MouseUp کنترل ListBox دستورات زیر را وارد کنید:

T = False
ListBox1.Cursor = Cursors.Default
------

وارد شدن فقط عدد در TextBox . ( ايزنامريك رو نميگم)

کنترل شما از نوع textbox است در این صورت در رویداد keypress دستورات زیر را بنویسید


If (Char.IsDigit(e.KeyChar) Or e.KeyChar = Convert.ToChar(Keys.Back)) Then
e.Handled = False
Else
e.Handled = True
End If
کنترل شما از نوع datagridview است در این حالت نمی شه از رویداد keypress همانند بالا عمل کرد چون رویداد keypress کنترل datagridview در هنگام وارد کردن اعداد در cell ها فراخوانی نمی شود برای حل این مشکل باید ابتدا تابعی را به صورت زیر تعریف کرد:



Private Sub validatecell(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso Not IsNumeric(e.KeyChar) Then
e.Handled = True
End If
End Sub

حال در رویداد EditingControlShowin کنترل datagridview دستورات زیر را بنویسید



If (DataGridView1.CurrentCell.ColumnIndex = 0) Then
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell
AddHandler e.Control.KeyPress, AddressOf validatecell
Else
RemoveHandler e.Control.KeyPress, AddressOf validatecell
RemoveHandler e.Control.KeyPress, AddressOf validatecell
End If


---------

برای پاراگراف به پاراگراف خواندن کنترل : برای این کار از دستورات زیر استفاده می کنیم:

For Each s As String In RichTextBox1.Lines
MessageBox.Show(s)
Next
خط به خط خواندن کنترل : برای این کار از دستورات زیر استفاده می کنیم:

Dim srichline As New ArrayList
Dim indexLine As Int16
Dim srich As String
Dim index As Int16 = 0
srich = RichTextBox1.Text
For counter As Int16 = 0 To
RichTextBox1.GetLineFromCharIndex(RichTextBox1.Tex tLength)
indexLine = RichTextBox1.GetFirstCharIndexFromLine(counter + 1)
If indexLine = -1 Then
indexLine = RichTextBox1.TextLength
End If
srichline.Add(srich.Substring(index, indexLine - index))
index = indexLine
Next
For Each srich In srichline
MessageBox.Show(srich)
Next
توضیح : دستورات بالا محتویات کنترل richtextbox را به صورت خط به خط و بدون توجه به پاراگراف می خواند البته دستورات جدیدی دارد که در ادامه توضیح داده می شود.
محاسبه تعداد خطوط کنترل : برای این کار می توان ار دستور زیر استفاده کرد:
MessageBox.Show(RichTextBox1.Lines.Count)
البته این دستور بیشتر به محاسبه تعداد پاراگراف ها می پردازد برای محاسبه تعداد خطوط بدون توجه به پاراگراف باید از دستور زیر استفاده کرد:

MessageBox.Show(RichTextBox1.GetLineFromCharIndex( RichTextBox1.TextLength) + 1)

--------------
ساختمان داده ها (پشته) Stack
ديگه نميگم پشته چي و چي كار ميكنه فقط نحوه كد نويسيش:

Dim نام پشته As New Stack
مانند : Dim stack1 As New Stack
2- افزودن عنصر به بالای پشته :
براي اينكار از دستور زير استفاده می كنيم:

stack1.Push(10)
stack1.Push("ab")
نكته : در اضافه كردن عنصر به پشته نوع عنصر لازم نيست كه از يك نوع باشد.

3 – حذف عنصر از بالای پشته :
براي اينكار از دستور زير استفاده می كنيم:
stack1.Pop()
4 – بازيابی عنصر بالای پشته
براي اينكار از دستور زير استفاده می كنيم:
TextBox1.Text = stack1.Peek
5- تست خالی بودن پشته :

براي اينكار از دستور زير استفاده می كنيم:
If stack1.Count = 0 Then
MessageBox.Show("Stack is empty.")
End If

---------------
ساختمان داده صف Queue
از دستور زير استفاد می كنيم :

Dim نام صف As New Queue
مانند : Dim Queue1 As New Queue
2- افزودن عنصر به آخر صف :
براي اينكار از دستور زير استفاده می كنيم:
Queue1.Enqueue(10)
Queue1.Enqueue("ab")
3- حذف عنصر از ابتدای صف :

براي اينكار از دستور زير استفاده می كنيم:
Queue1.Dequeue()
4- بازيابی عنصري از ابتدای صف :
براي اينكار از دستور زير استفاده می كنيم:
TextBox1.Text = Queue1.Peek
5- تست خالی بودن صف :
براي اينكار از دستور زير استفاده می كنيم:

If Queue1.Count = 0 Then
MessageBox.Show("Queue is empty.")
End If

-------------
ايجاد يك ستون رديف در ديتا گيرد ويو


Private Sub DataGridView1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.Enter

DataGridView1.Rows(0).Cells(0).Value = 1

End Sub

Private Sub DataGridView1_RowsAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArg s) Handles DataGridView1.RowsAdded

DataGridView1.Rows(e.RowIndex).Cells(0).Value = DataGridView1.Rows.Count

End Sub

Private Sub DataGridView1_RowsRemoved(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsRemovedEventA rgs) Handles DataGridView1.RowsRemoved

Dim x As Int32
x = e.RowIndex

For counter As Int32 = x To DataGridView1.Rows.Count - 1
DataGridView1.Rows(counter).Cells(0).Value = x + 1
x += 1
Next

End Sub




------------


ايجاد فرم لاگين


Imports System.Data.OleDb




Imports System.Threading




Private con As OleDbConnection




Private com As OleDbCommand




con = New OleDbConnection




con.ConnectionString = "provider=microsoft.ace.oledb.12.0;data source=TEST.accdb




حال در رویداد Click دکمه OK دستورات زیر را بنویسید:





com = New OleDbCommand






con.Open()

com.Connection = con


com.CommandText = "select count(*) from users where username='" & UsernameTextBox.Text & "' and password='" & PasswordTextBox.Text & "'"


Dim value As Int16


value = com.ExecuteScalar


If value = 1 Then


Dim form As New Thread(AddressOf MainForm)


form.Start()


Me.Close()


Else


MessageBox.Show("نام کاربری یا رمز ورودی اشتباه است")


End If


con.Close()




حالا باید تابعی (تابع MainForm) به صورت زیر تعریف کنید:

PrivateShared Sub MainForm()
Dim frmm As New frmmain
Application.Run(frmm)
End Sub
--------------

جدا كردن سه رقم سه رقم Text Box



Textbox1.text=formatnumber(textbox1.text)
textbox1.selecttionstart=textbox1.textleght


--------------
تاريخ فارسي

چندين راه براي اين كار وجود داره

در .net3.5کلاسی به نام persiancalendar وجود دارد که به راحتی با استفاده از آن می توان به تاریخ شمسی دسترسی پیدا کرد . بنابراین برای شروع یک textbox و یک button روی فرم قرار دهید و در رویداد click دکمه button دستور زیر را بنویسید:








DimShamsiAsNewGlobalization.PersianCalendar


textBox1.Text = Shamsi.GetYear(Now) & "/" & Shamsi.GetMonth(Now) & "/" & Shamsi.GetDayOfMonth(Now)



راه ديگه اي هم داره اما بعلت محدود بودن كاركتر نمتونم بنويسم (اگه نيازه بگيد تا ادامه تايپيك بذارم)


------------




بكاپ گيري كه يه خورده بايد توضيح بدم




براي اين كار خيلي راه وجود داره



اول مثال براي بكاپ گيري:



مثلا فرض كنيد براي يك كمدرسه داريد برنامه مينويسيد . برنامه نويسي شما بايد طوري باشه كه وقتي كابر خواست ويندوزش رو عوض كنه اطلاعات شما از بين نره



بنابر اين



بايد در همه درايو هاي هارد ديسك يك نسخه بكاپ كپي بشه (برنامه نويسي بهتر اينكه كه در كول ديسك نيز كپي شه)



((((((( دقت كنيد كه بحث ما اينطوره كه شبكه اي در كار نيست . اگه شبكه باشه كه كار خيلي راحت ميشه)))))))




چند تا راه ميگم



1- نرم افزارات زيادي براي بكاپ گيري هست كه ميتونيد بصورت ويزارد از اونها استفاده كنيد



2- استفاده از DMO



طريقه كار



از Reference برنامه Microsoft SQLDMO 8.5




حالا من يك مثال براتون ميزنم




PrivateSub btnBackup_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnBackup.Click
'-- Create a connection to the server
Dim osvr AsNew SQLDMO.SQLServer
osvr.LoginSecure = True
osvr.Connect(Me.lstSQLServers.SelectedItem)
'-- Create a Backup object, and set the necessary properties based on options chosen on the form.
Dim oBackup AsNew SQLDMO.Backup
With oBackup
IfMe.rbFull.Checked Then
.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database
Else
.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Differentia l
EndIf
.BackupSetDescription = Me.txtBUSetDescription.Text
.BackupSetName = Me.txtBUSetName.Text
.Database = Me.lstDatabases.SelectedItem
.Devices = "[" & Me.lstBackupDevices.SelectedItem & "]"
IfMe.rbNoLog.Checked Then
.TruncateLog = SQLDMO.SQLDMO_BACKUP_LOG_TYPE.SQLDMOBackup_Log_NoL og
ElseIfMe.rbNoTruncate.Checked Then
.TruncateLog = SQLDMO.SQLDMO_BACKUP_LOG_TYPE.SQLDMOBackup_Log_NoT runcate
Else
.TruncateLog = SQLDMO.SQLDMO_BACKUP_LOG_TYPE.SQLDMOBackup_Log_Tru ncate
EndIf
.Initialize = Me.chkInitialize.Checked
'-- Execute the backup
.SQLBackup(osvr)
EndWith
'-- Disconnect from the server and clean up.
osvr.DisConnect()
osvr = Nothing
oBackup = Nothing
MessageBox.Show("Database Backed Up", "Task Completed", MessageBoxButtons.OK)
EndSub





البته گفته باشم در رابطه با اين موضوع زياد بحث شده كه زياد به درد نميخوره . اما به نظر من ساده و كار راه اندازه


-----------





ارسال Massege با GSM MODEM




البته گفته باشم با GSM Tatong اصلا هم خوني نداره . نميدونم چرا!؟ اما تو مودم هاي MOTOROLA متحان شده و 100 درصد جواب ميده




قسمتي از كد ارسال SMS ( اگه نا مفهمومه بگيد تا مثال براتون بزنم)




PrivateSub cmdSendUniMsg_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSendUniMsg.Click
Dim strMsgToSend AsString
If txtUPhone.Text.Trim.Length = 0 Then
MsgBox("شماره مقصn باید معلوم باشد", MsgBoxStyle.Exclamation, fMain.gstrMyAppName)
ExitSub
EndIf
strMsgToSend = rtxtUMessage.Text
If strMsgToSend.Length > 0 Then
txtUPhone.Enabled = False
chkLanguage.Enabled = False
cboLanguage.Enabled = False
rtxtUMessage.Enabled = False
cmdSendUniMsg.Text = "... در حال ارسال""
cmdSendUniMsg.Enabled = False
System.Windows.Forms.Application.DoEvents()
fMain.SetCommParameters()
'16 - Bit)
fMain.objSMS.Character = 2
'validity period
fMain.objSMS.Validity = fMain.txtValidity.Text & fMain.cboValidity.Text.Substring(1, 1)
'Send the text message
fMain.objSMS.SendSMS(txtUPhone.Text, strMsgToSend, fMain.chkAlert.Checked)
IfNot fMain.objSMS.IsError(True, fMain.gstrMyAppName) Then
MsgBox("پيام با موفقيت ارسال شد", MsgBoxStyle.Information, fMain.gstrMyAppName)
EndIf
txtUPhone.Enabled = True
If chkLanguage.Checked Then
cboLanguage.Enabled = True
rtxtUMessage.Enabled = False
Else
cboLanguage.Enabled = False
rtxtUMessage.Enabled = True
EndIf
cmdSendUniMsg.Text = "پيام ارسال شده"
cmdSendUniMsg.Enabled = True


بعلت محدوديت كاركتر ديگه نميتونم كد بنويسم

mhdhp86
یک شنبه 23 بهمن 1390, 18:36 عصر
دوست عزیز با تشکر از مطالبتون.... یک دلیل تکرار سئوالات ضعیف بودن جستجوی پیشرفته این فروم است. من به شخصه با سرچ از گوگل مطلب مورد نظرم در این سایت را پیدا می کنم.

alirezapsd
جمعه 22 اردیبهشت 1391, 17:04 عصر
سلام من میخواهم یک اکسس را وارد ماکروسافت ویژوال بیسیک کنم لطفأ راهنمایی کنید!!:ناراحت::افسرده::خجالت:

Hossis
یک شنبه 24 اردیبهشت 1391, 07:15 صبح
سلام
تا وقتی تاپیک ها موضوع بندی و دسته بندی نشه, وضعیت همینه که هست
بارها و بارها هم مثل شما تاپیک زدن و از این مسئله شکایت کردند ولی نتیجه همین شده
به عبارتی, قالب انجمنی سایت اجازه دسته بندی رو نمی ده , اگه مثل سایت های خارجی (مثل کد پروجکت) دسته بندی شده بود, این مسائل پیش نمی اومد
البته جستجوی ضعیف سایت هم مزید برعلت هست
---------
این کدهایی هم که در پست اول نوشتید, بهتره توی اسنیپت ها بزارید تا خلاصه تر بشه
من همین کار رو کردم