تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] مشكلة عند فقدان التركيز ؟
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

لدي نموذج يتم من خلاله ادخال
اسم المادة
سعر الشراء
سعر المبيع
ملاحظات

ان كل من حقل الشراء وحقل المبيع، تم كتابة كود مشابه لهما عند فقدان التركيز، ودلك من اجل العمل على تنسيق الرقم المدخل
اي ادا الرقم 2500 سوف يظهر 2,500

والكود هو
كود :
Private Sub txt_Mabee_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_Mabee.LostFocus
        If sender.Text.Trim <> "" Then
            sender.Text = FormatNumber(Val(sender.Text), 0)
        End If

        txt_Mabee.BackColor = Color.White
        show_rabeh()
    End Sub

الامور كلها سليمة ورائعة......

ولكن لاحظت ان تمت العودة لسبب ما الى تلك الحقول، فانه عند فقدان التركيز عنها تحصل المشكلة وهي ان الرقم المدخل من قبل المستثمر يتغير
ادا كان المدخل مثلا 1850 يصبح 1
واذا كان المدخل مثلا 2400 يصبح 2
وادا كان المدخل مثلا 4800 يصبح 4


ارجو تصحيح الكود لتجنب حدوث لتغيير في مدخلات المستثمر

والف شكر


الملفات المرفقة صورة/صور
               
الرد }}}
تم الشكر بواسطة:
#2
اخى الكريم

اسف لردى بدون ان افهم المطلوب جيدا

ولكن الكود الذى وضعته يقول انه عند فقدان التركيز يصبح فورمات الرقم فى التكست بوكس رقم صحيح بدون فواصل عشريه لانك وضعت صفر هنا فى هذا السطر

sender.Text = FormatNumber(Val(sender.Text), 0)

ارجو التوضيح اكثر (ومن الممكن ان يكون احد من الاعضاء فهم المطلوب اكثر منى)
"الناس نيام فإذا ماتوا إنتبهوا"
الرد }}}
تم الشكر بواسطة: @@أبورائد@@ , sherif khalid
#3
السلام عليكم ورحمة الله وبركاته


لأن التنسيق يصلح للعرض فقط وليس لإدخال البيانات

زيادة توضيح: إذا كان الموجود في مربع النص 123,456 فعند محاولة قراءته سينقطع الرقم عند الفاصلة التنسيقية وسيجد أول رقم وهو هنا 123 ويتجاهل 456, لها لا تتم قراءة الرقم المعروض كتنسيق لحفظه في قاعدة البيانات فهذه كارثة.

هناك حل إذا كنت تقوم بقراءة الرقم قبل وضعه في قاعدة البيانات وهو أن تحذف الشكل التنسيقي قبل وضعه في قاعدة البيانات كالتالي
كود :
Dim d As Integer = Me.TextBox1.Text.Replcae("," , "")



السلام عليكم ورحمة الله وبركاته
الرد }}}
#4
السلام عليكم...

* سبقني أخي أبو رائد - و لكن في الزيادة إفادة *

السبب هو وجود فاصلة الآلاف بعد استعمال الدالة FormatNumber. فعند العودة إلى مربع النص (بعد أن ظهرت به فاصلة الآلاف) ثم الخروج منه فإنه عند استدعاء الدالة FormatNumber هذه المرة سيعتبر أن فاصلة الآلاف رمز غير رقمي، و بالتالي سيتم تجاهل كل ما بعدها ما يؤدي إلى بتر العدد!

يمكن التحايل على الأمر بتخزين محتوى مربع النص دون فاصلة الآلاف في الخاصية Tag لمربع النص عند فقدان التركيز (LostFocus) و استعادة تلك القيمة عند عودة التركيز (GotFocus). مثلاً:

كود :
Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
        sender.Text = sender.Tag
    End Sub

    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        If sender.Text.Trim = "" Then
            sender.Tag = ""
        Else
            sender.Tag = sender.Text.Replace(",", "")    ' نحتفظ بالعدد دون فاصلة الآلاف
            sender.Text = FormatNumber(Val(sender.Text), 0)
        End If
    End Sub

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
#5
وعليكم السلام ورحمة الله وبركاته

اخي جرب هذا الكود وبأذن لله سينجح تفضل :

PHP كود :
Private Sub TextBox1_LostFocus(sender As ObjectAs EventArgsHandles TextBox1.LostFocus
        Dim val 
As Integer
        val 
TextBox1.Text

        TextBox1
.Text val.ToString("###,###")

    
End Sub 
الرد }}}
تم الشكر بواسطة: ناجي إبراهيم , learning.net , kafi2030 , kslawy
#6
الف شكر لكافة الاخوة الزملاء
على التوضيح الاكثر من رائع


بارك الله فيكم، وبهذا المنتدى الرائع

احب ان انوه الى انه بعد تجربة المقترحات
وجدت مايلي

بالنسبة الى الاخ eng.khalidvb
الكود الذي تفضلت به رائع وعمل بشكل جيد، ولكنه كان بحاجة الى اضافة سطر واحد، لتجنب حدوث خطأ في حال عدم قيام المستثمر بادخال اي قيمة
وذلك باسناد القيمة 0 للحقل في كان الحقل فارغ

'ok
كود :
'Dim val As Integer
        'If Trim(txt_Shra.Text) = "" Then txt_Shra.Text = 0
        'val = txt_Shra.Text
        'txt_Shra.Text = val.ToString("###,###")


الكود والحل المقدم من الاخ ناجي ابراهيم عمل بشكل رائع

الكود المقدم من الاخ / ابو رائد
من خلال كتابة الكود، ظهرت رسالة خطأ
وفق الصورة المبينة


الملفات المرفقة صورة/صور
   
الرد }}}
تم الشكر بواسطة:
#7
السلام عليكم...

الخطأ في كود الأخ أبو رائد هو خطأ إملائي فقط Big Grin حيث كتب الحرف c قبل الحرف a (أي Replcae و الصحيح هو Replace)

سلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة: kafi2030 , @@أبورائد@@



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم