تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[مقال] شرح الدالة String.Format
#1
بسم الله الرحمن الرحيم

الحمد لله رب العالمين والصلاة والسلام على سيدنا محمد وعلى آله وصحبه أجمعين ... وبعد

السلام عليكم ورحمة الله وبركاته

الدالة
String.Format

إقتباس :Public Shared Function Format(ByVal format As String, ByVal arg0 As Object) As String

وظيفتها أنها تقوم باستبدال كل صيغة موجودة ضمن نص معين بما يقابلها من القيم
الفائدة منها: إذا كان لديك نص موحد ولكن تختلف فيه بعض القيم فعندها يمكنك كتابة صيغة مشتركة وتجعل في خانات القيم المتغيرة صيغ معينة لكي يتم استبدالها لاحقا...

مثال على ذلك/
إذا كان لدينا مجموعة من المستخدمين ونريد إظهار رسالة ترحيبية باسم كل مستخدم مع إظهار الوقت والتاريخ الحالي

كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim GeneralFormula As String = "مرحبا بك {0} " & vbNewLine & "تاريخ اليوم: {1}" & vbNewLine & "الوقت: {2}"
        Dim User As String = "خالد كريم"

        MsgBox(String.Format(GeneralFormula, User, Now.ToShortDateString, TimeOfDay.ToString("hh:mm:ss")), MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading)
    End Sub



لاحظ كيف تم استبدال الأقواس بالقيم التي تم تمريرها إلى الدالة كلٌّ بحسب القيمة التي بين الأقواس "{}"

الآن ماذا لو أردنا عمل المزيد من الاختصار بأن نكتفي بتمرير التاريخ فقط والدالة تقوم باستخراج التاريخ والوقت مباشرة وبحسب الصيغة المطلوبة لاحظ معي كيف سنعيد كتابة الجملة العامة

كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim GeneralFormula As String = "مرحبا بك {0} " & vbNewLine & "تاريخ اليوم: {1:dd/MM/yyyy}" & vbNewLine & "الوقت: {1:hh:mm:ss}"
        Dim User As String = "خالد كريم"
        MsgBox(String.Format(GeneralFormula, User, Now), MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading)
    End Sub




الآن بدأت الأمور تتضح أكثر فأكثر فالدالة تقوم بالبحث عن الأقواس "{}" فإذا وجدتها قامت باستبدال الرقم الذي بداخلها بما يناسبها من القيم التي تم تمريرها بحسب ترتيبها أي أن الأول سيأخذ القيمة صفر والثاني سيأخذ القيمة واحد .... وهكذا، وبعد أن يأخذ القيمة سيطبق عليها الصيغة المشروطة داخل الأقواس...

سؤال: ماذا لو كان لدينا مجموعة من البيانات حول مستخدم معين تحتوي على الاسم، وآخر استعمال للبرنامج, ومجموع عدد ساعات العمل على البرنامج، كيف ستكون الصيغة ... انظر المثال التالي:

كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim UserData As String() = {"خالد كريم",
                                  "Khaled@gmail.com",
                                    "22/11/1434",
                                    "48",
                                    "سوري"}
        Dim GeneralFormula As String = "مرحبا بك {0} " & vbNewLine & "آخر استعمال للبرنامج: {2}" & vbNewLine & "مجموع عدد ساعات العمل: {3} ساعة"
        MsgBox(String.Format(GeneralFormula, UserData), MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading)
    End Sub



في المثال السابق قمنا بتعريف مصفوفة مؤلفة من خمسة عناصر تحتوي على بيانات لموظف وأردنا بإظهار العنصر الأول وموقعه في المصفوفة صفر، والعنصر الثالث وموقعه في المصفوفة اثنان، والعنصر الرابع وموقعه في المصفوفة ثلاثة... فقمنا باستعمال مواقع هذه المعلومات في المصفوفة لتقوم الدالة بدورها باستبدال هذه الأرقام بما يناسب موقعها في المصفوفة...

النقطة الأخيرة في شرح هذه الدالة هو تنسيق المسافات بين النص والقيم المستبدلة، فلو لاحظت في الأمثلة السابقة كانت القيمة تظهر بجانب النص الذي قبلها....
السؤال ماذا لو أردنا تنسيق ظهورها داخل النص

كود :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim UserData As String() = {"خالد كريم",
                                  "Khaled@gmail.com",
                                    "22/11/1434",
                                    "48",
                                    "سوري"}

        Dim GeneralFormula As String = "مرحبا بك {0,37} " & vbNewLine & "آخر استعمال للبرنامج: {2,18}" & vbNewLine & "مجموع عدد ساعات العمل: {3,5} ساعة"
        MsgBox(String.Format(GeneralFormula, UserData), MsgBoxStyle.MsgBoxRight + MsgBoxStyle.MsgBoxRtlReading)
    End Sub



هنا استخدمنا تحديد المسافة عن النص الذي يسبق القيمة داخل الأقواس فالدالة ستقوم بتحويل هذه الأرقام إلى مسافات تسبق ظهور القيمة وذلك لغرض التنسيق للرسالة
إذن فالصيغة العامة للدالة هو

كود :
{index[,alignment][ : formatString] }
حيث أن:
Index = مؤشر موقع القيمة
alignment= موقع ظهور القيمة يعبر عنه بعدد المسافات
formatString= الهيئة التي ستظهر فيها القيمة

هذا الموضوع باختصار شديد وإلا فالدالة تحتاج إلى شرح أكثر وخصوصا ما يتعلق بـ formatString

ولكن المهم أن يتم استيعاب الأساسيات وأترك لكم التوسع في الفروع ...

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




ما شاء الله - عندك ملكة الشرح المرتب - بارك الله فيك وزادك من فضله




السلام عليكم ورحمة الله وبركاته
الرد }}}
تم الشكر بواسطة: sooriaty03
#3
(28-09-13, 05:06 PM)@@أبورائد@@ كتب : السلام عليكم ورحمة الله وبركاته




ما شاء الله - عندك ملكة الشرح المرتب - بارك الله فيك وزادك من فضله




السلام عليكم ورحمة الله وبركاته


السلام عليكم ورحمة الله وبركاته

جزاك الله خيرا أخي الحبيب أبورائد
سعيد جدا بمرورك

واجهتني مشكلة لم أجد لها حلا فالموضوع الذي كتبته مدعم بالصور ومنسق

ولكن لم تظهر كثير من أجزائه
ولا أستطيع حتى تعديله ما أدري ما المشكلة Sad
الرد }}}
تم الشكر بواسطة: @@أبورائد@@
#4
مشاءلله عليك شرح رائع استفدت منه انا شخصيا .. شكر لك اخي الغالي

تحياتي
الرد }}}
تم الشكر بواسطة: sooriaty03
#5
ما شاء الله أخي sooriaty03,
الشرح ممتع و منسق و جميل ... جزاك الله خيراً على هذا الطرح Smile

تحياتي
الرد }}}
تم الشكر بواسطة: sooriaty03
#6
السلام عليكم و رحمة الله
ما شاء الله شرح وافي و كافي بارك الله فيك
صراحة روعة
الرد }}}
تم الشكر بواسطة: sooriaty03
#7
بارك الله فيك
من زمان ابحث عن محاذات النص لليمين
لكن يبدو اني لم افهم الطريقة الى الان.
هل بكود صغير فقط لنص محاذاته يمين؟
الرد }}}
تم الشكر بواسطة: sooriaty03
#8
(03-10-13, 09:57 PM)سعود كتب : بارك الله فيك
من زمان ابحث عن محاذات النص لليمين
لكن يبدو اني لم افهم الطريقة الى الان.
هل بكود صغير فقط لنص محاذاته يمين؟

السلام عليكم ورحمة الله وبركاته

هل تقصد محاذاة الرسائل أثناء ظهورها في MessageBox؟؟

لأن هذه الدالة ليس لها علاقة بمحاذاة النص هي فقط ستحدد المسافات بين النص والقيم

ولكن في MessageBox:
هناك خيارين نستخدمهما في حال أردنا ظهور الرسالة من اليمين إلى اليسار وهما:

كود :
MsgBoxStyle.MsgBoxRight= محاذاة النص إلى اليمين...
MsgBoxStyle.MsgBoxRtlReading= لإظهار مربع الرسالة من اليمين إلى البسار...
الرد }}}
تم الشكر بواسطة: سعود
#9
ما شاء الله شرح رائع اخى
قال تعالى : يَامَعْشَرَ الْجِنِّ وَالإِنسِ إِنْ اسْتَطَعْتُمْ أَنْ تَنفُذُوا مِنْ أَقْطَارِ السَّمَاوَاتِ وَالأَرْضِ فَانفُذُوا لا تَنفُذُونَ إِلاّ بِسُلْطَانٍ
الرد }}}
تم الشكر بواسطة: sooriaty03
#10
جزاك الله كل خير أخي الكريم
الرد }}}
تم الشكر بواسطة: sooriaty03



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


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