بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
يوجد للتكست بوكس خاصية اسمها PassWordChar
ان تم وضع * بها
فهذا معناه، ان الادخال سوف يكون عبارة عن نجوم
ولكن ارغب ان اطبق طريقة مغايرة، هي اظنها افضل من الطريقة التقليدية ( ********** ) على النحو التالي
بفرض ان كلمة السر هي 123456
عند كتابة الرقم 1 يجب ان يكون 1 وليس *
عند كتابة الرقم التالي وهو 2 يصبح 1 على شكل نجمة والرقم 2 ظاهر اي هكدا *2
عند كتابة الرقم التالي وهو 3 يصبح الرقم السابق (2) عبارة عن * اي هكدا **3
وهكذا
ودلك كما هو في البرامج الحديثة ، حيت فيها اتاحة مجال متميزة للمستثمر برؤية مايدخل من قيم
ملاحظة
( كل رقم يتم ادخاله ......بعد فاصل زمني معين ) يجب ان يتحول الى *
وذلك حتى نضمن ان اخر رقم من كلمة السر يتحول الى *
ارجو ممن اتضحت له الفكرة، تزويدي بالكود المناسب
والف شكر
السلام عليكم ورحمة الله وبركاته
لدي فكرة لكن لا يسعنى تذكر طريقة الكود وهو القيام برسم الرمز داخل الحدث KeyPressبدلالة موضع مؤشر الكتابة بواسطة GetPositionFromCharIndex الخاص بـ TextBox مع تشغيل المؤقت Timer1 الذي بدورة يعمل Refresh لاستعادة الشكل السري للرموز مع إيقاف نفسه
السلام عليكم ورحمة الله وبركاته
السلام عليكم ورحمة الله وبركاته
طريقة غير احترافية وغير مكتملة 100% اتمنى نصائحكم بها؟
كود :
Private Sub Wait(ByVal n As Short)
On Error Resume Next
Dim S As New Stopwatch
S.Start()
Do While S.ElapsedMilliseconds < n
Application.DoEvents()
Loop
S.Stop()
End Sub
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
On Error Resume Next
TextBox1.PasswordChar = ""
TextBox1.Select(TextBox1.TextLength, TextBox1.TextLength)
TextBox1.Text = TextBox1.Text.Replace(TextBox1.Text.Chars(TextBox1.TextLength - 2), "*")
Wait(500)
TextBox1.PasswordChar = "*"
End Sub
Dim pass As String = ""
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
On Error Resume Next
If e.KeyChar.ToString = " " Then
e.Handled = True
Exit Sub
End If
If e.KeyChar = Chr(8) Then
If TextBox1.SelectedText = 0 Then
pass = pass.Substring(0, pass.Length - 1)
Else
'مشكلة في حال تحديد نص وازالته
End If
Else
pass &= e.KeyChar.ToString
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(pass)
End Sub
و عليكم السلام و رحمة الله
جرب هذا الكود أولا ضع تاكست بوكس واحد و واحد تايمر و شاك بوكس على الفورم + اترك الأسماء الإفتراضية كما هي
ثم ضع هذا الكود
كود :
Private passKey As String = String.Empty
Private ignoreKeys As New List(Of Keys) From {Keys.Left, Keys.Up, Keys.PageUp, Keys.Home, Keys.Space}
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim emptyMenu As New ContextMenu
TextBox1.ContextMenu = emptyMenu
Timer1.Interval = 1000
Timer1.Stop()
End Sub
Private Sub TextBox1_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles TextBox1.PreviewKeyDown
If e.KeyData = Keys.Tab Then
e.IsInputKey = True
End If
End Sub
Private Sub TextBox1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseUp
TextBox1.SelectionStart = TextBox1.TextLength
End Sub
Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
Timer1.Stop()
If ignoreKeys.Contains(e.KeyCode) OrElse e.Control OrElse e.KeyData = Keys.Tab Then
e.SuppressKeyPress = True
Return
End If
End Sub
Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
e.Handled = True
If e.KeyChar = ChrW(Keys.Escape) Then
passKey = String.Empty
ElseIf e.KeyChar = ChrW(Keys.Back) Then
If passKey.Length = 1 Then
passKey = String.Empty
ElseIf passKey.Length > 1 Then
passKey = passKey.Substring(0, passKey.Length - 1)
Else
Return
End If
ElseIf e.KeyChar = ChrW(Keys.Return) Then
HideAllKeys()
MessageBox.Show(passKey)
Return
Else
passKey &= e.KeyChar.ToString
End If
If passKey.Length = 0 Then
TextBox1.Text = ""
ElseIf passKey.Length = 1 Then
TextBox1.Text = passKey
Else
TextBox1.Text = New String("*"c, passKey.Length - 1) & passKey(passKey.Length - 1)
End If
TextBox1.SelectionStart = TextBox1.TextLength
If passKey.Length > 0 Then
Timer1.Start()
End If
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Timer1.Stop()
HideAllKeys()
End Sub
Private Sub HideAllKeys()
TextBox1.Text = New String("*"c, passKey.Length)
TextBox1.SelectionStart = TextBox1.TextLength
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked = True Then
TextBox1.Text = passKey
Else
HideAllKeys()
End If
End Sub
بالتوفيق
السلام عليكم و رحمة الله و بركاته,
أخي محمد, جزاك الله خيراً على هذا الكود الرائع و السريع و الخفيف
لقد إستعملته في مشروع صغير أود طرحه في المنتدى عن قريب إن شاء الله, و كان ممتازاً.
تحياتي
السلام عليكم
عالسريع مارأيكم بهذا الكود:
PHP كود :
Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged
Thread.Sleep(300)
TextBox2.PasswordChar = "*"
End Sub
Private Sub TextBox2_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox2.KeyPress
TextBox2.PasswordChar = ""
End Sub
كود حلو أخوية سجاد, بس شنو الفرق بينه و بين كود الأخ محمد؟
يعني أيهما أفضل من ناحية الصح و الخطأ و من ناحية السرعة و عدم تحميل معالج الحاسوب أو الذاكرة المؤقتة للحاسوب إلى ثقل؟
تحياتي
مثل متشوف عدد الاسطر قليل وتستطيع ان تزيد او تقلل السرعة عن طريق الـThread بزيادة الملي ثانية
لم اجرب كود الاخ محمد لكن عالسريع كتبت هذا الكود اعلاه
السلام عليكم
بدات بتجريب الكود الاخ sajed
ولكن لم استطع تجربته بسبب ظهور رسالة خطأ
على ما يبدو ان هناك مكتبة يجب استدعاؤها، ولكن لا اعلمها
ارجو الارشاد
السلام عليكم
قم بتضمين هذه المكتبة: