• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

عبد الكريم

اعضاء
  • عدد المشاركات

    186
  • تاريخ الانضمام

  • تاريخ اخر زياره

كل شيء نشر بواسطة عبد الكريم

  1. اذا كنت قد استخدمت ون درايف سابقا فربما قد صادفتك مشكلة عندما أردت إضافة حساب شخصي آخر. حيث أن مايكروسوفت لا تسمح بربط أكثر من حساب شخصي واحد على نظام التشغيل. ولكن هناك طريقة أخرى نظامية تؤمن لك إضافة حساب ثاني وثالث إلى حاسبتك فقط اتبع الخطوات التالية: أدخل إلى حسابك الثانوي الجديد من خلال المتصفح ثم قم بإنشاء مجلد داخل الحساب يمكن أن تسميه مثلا "ملفات مشتركة" انقل محتويات ون درايف كاملا إلى هذا المجلد اختر المجلد الجديد واختر من القائمة "مشاركة" في نافذة المشاركة ، اختر مشاركة عبر البريد الإلكتروني (لاحظ الصورة التالية) أدخل عنوان البريد الإلكتروني الأساسي الذي تود من خلاله الوصول إلى محتويات ون درايف الثانوي ستصل لك رسالة إلى بريدك الإلكتروني الأساسي تعلمك أنه قد مشاركتك مجلد من حساب آخر (حسابك الثانوي) انقر على الزر داخل الرسالة ليقوم المتصفح بفتح المجلد المشارك معك ستلاحظ في الصفحة هناك زر "إضافة إلى ون درايف الخاص بك" ، انقر عليه (لاحظ الصورة التالية) وبعدها ستلاحظ أن المجلد الجديد قد ظهر ضمن حسابك الرئيسي في ون درايف على حاسبتك   المصادر: [1]. http://windowsreport.com/two-onedrive-accounts/   https://barmjah.wordpress.com/
  2. #c

    أحد القيم المدخلة في الحقول النصية ليس برقم
  3. هذا الكود مقتبس من كتاب مايكروسوفت Programming in C#. في هذا الكود فقط أود أن أتطرق إلى نقطة وهي أيّ (بتشديد الياء) التابعين أفضل من حيث البيانات (البرامترات) الممررة إليه؟ سأترك لك أولا وقت للتفكير،، //LISTING 1 Passing a complete customer to a method public Distance CalculateDistanceTo(Customer customer) {        Distance result = … // Some difficult calculation that uses customer.Address        return result; }   //LISTING 2 Passing only an address to a method public Distance CalculateDistanceTo(Address address) {        Distance result = … // Some difficult calculation that uses address        return result; } لكن إن أردت إشارات لتساعدك على الإختيار بنفسك فلك ذلك، سأطرح عليك بعض النقاط 1. أيّ الكودين يعتبر أوضح و أسهل للفهم من حيث البيانات المطلوبة لإجراء عملية حساب المسافة؟ 2. أيّ الكودين فيه سهولة في الصيانة مقارنة بالآخر؟ أو بمعنى آخر أي الكودين يمكننا استخدامه أكثر من الآخر دون إجراء تعديلات؟ مرة أخرى ركز على البيانات (البرامتر) الممرر لكلا التابعين. طبعا الإجابة على كلا السؤالين هو الكود الثاني. بالنسبة للسؤال الأول،، طبعا الكود الثاني أوضح وأسهل للفهم وذلك لأنه واضح من حيث متطلبات عمله فهو يطلب عنوان حتى يقوم بعملية حساب المسافة، في حين أن التابع الأول مبهم، فأنت ببساطة لا يمكنك استنباط أي البيانات التي يحتاجها التابع من الكائن من صنف Customer للعمل. بمعنى آخر لا تعلم أي البيانات المجودة داخل هذا الكائن من صنف Customer التي سوف يعتمد عليها في تقرير المسافة ربما يكون العنوان وقد يكون رمز المنطقة Postcode أو رمز الهاتف لتحديد المدينة أو… قد يتبادر إلى ذهنك وما المشكلة في ذلك؟ لنفترض أنك تريد حساب المسافة لكل الزبائن المعروضين في جدول للزبائن الذين أجروا عملية شراء خلال الشهر الماضي في أحد واجهات لتطبيقك الجميل. طبعا الجدول لن يحتوي جميع معلومات الزبائن وإنما يعرض فقط بعض المعلومات عنهم. عندما تريد أن تحسب المسافة لزبون معين ستضطر عندما تستخدم التابع الأول لتأمين معلومات الزبون كاملة من قاعدة البيانات قبل تمريرها للتابع الأول لتتم عملية الحساب، بينما التابع الثاني لا يتطلب منك سوى العنوان والذي في أغلب الظن قد يكون متوفر ولا تحتاج إلى الاستعلام عنه من قاعدة البيانات. على كل إن لم تقتنع فلا مشكلة فالسبب الثاني سيكون كفيل بتبيهك إلى أمر أكثر أهمية والذي ستخلص من خلاله إلى أن تصميم الكود الثاني هو الأفضل بلا منازع. بالنسبة للسؤال الثاني،، لنفترض بعد مدة من الزمن تم التعديل على الصنف Customer ليحتوي حقل جديد WorkAddress مالذي سوف يحدث؟! لن تكون قادرا على استخدام التابع الأول لحساب المسافة باستخدام الحقل الجديد WorkAddress. أليس كذلك؟! ومع ذلك إن ألححت بمقدرتك على استخدام التابع الأول سيتطلب منك تعديل التابع الأول حتى يتثنى لك حساب المسافة لكل من Address و WorkAddress. لن أتطرق إلى كيفية التعديل، إذا أنه ومع الشروع بالتعديل ستكتشف العديد من المشاكل الأخرى. في حين وبكل سهولة يمكنك حساب المسافة للحقل الجديد WorkAddress بتمريره كبرامتر إلىه. حالة أخرى توضح مدى المشاكل التي يمكن أن تحصل فقط جراء سوء تصميم التابع الأول. لنقل أننا أردنا استخدام التابع مع مشروع آخر أو مع صنف آخر مثل Student، مرة أخرى لا يمكنك استخدام التابع الأول حيث أن Customer غير Student وبالتالي سيتطلب إجراء تعديلات ليتلائم التابع الأول مع الصنف الجديد Student. بينما لو استخدمنا التابع الثاني لن نواجه أي من المشاكل السابقة وعلى العكس ستشعر بمتعة حسن تصميم التابع. الخلاصة: ان التابع الثاني أفضل من التابع الأول فهو سهل الفهم وأيضا لا يتطلب عملية تعديل على أقل تقدير للحالات آنفة الذكر.
  4. هل يمكن انشاء المصفوفات بشكل ديناميكي

    مصفوفه المصفوفات هي عبارة عن مصفوفه عادية كأي مصفوفه من نوع عدد حقيقي أو سلسله نصيه، مثال: مصفوفه عادية من نوع عدد صحيح ستكون على الشكل التالي: int[] a = new inte[4]; ولكن مصفوفه من مصفوفات عدد حقيقي هي على الشكل التالي: int[][] b = new int[3][5]; وبالتالي المصفوفه b هي عبارة عن مصفوفه تحوي 3 خلايا وكل خليه تحوي مصفوفه من 5 خلايا لاعداد جقيقية هي تدعى Jagged Arrays http://msdn.microsoft.com/en-us/library/2s05feca.aspx
  5. هل يمكن انشاء المصفوفات بشكل ديناميكي

    وعليكم السلام ورحمة الله وبركاته بالنسبه للطلب الاول وهو أن عدد المصفوفات غير معروف، فيمكن في هذه الحالة أن تنشئ مصفوفة المصفوفات وهي مصفوفه عناصرها مصفوفه. بالنسبه للنقطه الثانية وهي أن بعد المصفوفه غير معروف، ففي هذه الحالة أطلبي من المستخدم أن يحدد أبعاد المصفوفه. داخل الكود قومي بفحص خيار الذي اختاره المستخدم وعلى اساسه نفذي الكود المناسب وشكرا
  6. ربما تكون مثلي ومررت في حالة تصميم لواجهة تحتوي على العديد من الادوات التي أخذت تؤرقك كيف تصطف في الشكل والاماكن التي تريدها، دعني أخبرك أن حل مشكلتك غاية في السهولة وذلك باستخدام أحد الادوات الرائعة التي تريحك في توضع أدواتك من أزرار و غيرها الكثير، دعنا سوية نزيح الستار عن أداة تشبه الاداة التي يستخدمها أصحاب تصميم المواقع بشكل كبير، تكاد لا تفارق اي موقع إلا ما رحم ربي، إنها الاداة TableLayoutPanel، ربما أنك سريع البديهة بعد أن قرأت اسم الاداة ربما قد تبادر إلى ذهنك أنها أداة تشبه الجدول، بل هي جدول بحد ذلته إن أن الغاية هي تقسيم الفورم إلى خلايا مكونة من عدد من الأسطر والأعمدة، وبالتالي يمكنك تحديد كل اداة ترغب بإضافتها في الخلية التي تناسبك. دعنا ندع الحديث جانبا ونبدأ سوية بالتعرف على هذه الاداة، طبعا في بادئ الأمر بعد أن تقوم بإنشاء مشروع من نوع WindowsApplication ، نذهب إلى الفورم ونختار الاداة من شريط الادوات التي تحمل الاسم المذكور سابقا TableLayoutPanel لتظهر لنا الفورم على الشكل التالي: طبعا كما نلاحظ أن الاداة قد قسمت الفورم بشكل افتراضي إلى اربعة خلايا ناتجة، ولا بد التنويه أنني ضبط الخاصية Dock للأداة السابقة إلى القيمة Fill لكي تشغل كامل الحيز على الفورم. والان ماذا تعتقد بعد فلم يبقى لك سوى أن تقوم بسحب الاداة التي تريدها من شريط الادواة ووضها في الخلية التي تريدها لاحظ الشكل التالي: قد قمت بوضع زرين أحدهما في الخلية الاول من السطر الاول ولاخر في الخلية الاولى من السطر الثاني وهنا تجد الاشارة إلى أنه لا يمكنك وضع أكثر من عنصر واحد في الخلية الواحدة، ولكنك إن كنت تريد فعل ذلك فبكل بساطة يمكن وضع أحد أدوات الاحتواء مثل Panel و FlowLayoutPanel أو حتى TableLayoutPanel داخل خلية ما، ثم قم بما يتوجب عليك القيام به. أما إذا اردت اضافة العناصر من خلال الكود فيمكنك ذلك بكل بساطة، دعنا نستخدم الحدث Load للقيام بذلك، واضف الشيفرة التالية: private void Form1_Load(object sender, EventArgs e) { Button btn = new Button(); btn.Text = "Test"; tableLayoutPanel1.Controls.Add(btn, 2, 1); } قم بتشغيل البرنامج ولاحظ الشكل التالي: هل لاحظت الزر المكتوب عليه Test، ولان لتعد إلى الشيفرة السابقة ولتأملها سوية: Button btn = new Button(); btn.Text = "Test"; إذا من خلال السطرين السابقين قمنا بتعريف أو التصريح عن زر جديد واعطينا الخاصية Text له القيمة Test، هذا جميل، والان لنكمل ما تبقى من الشيفرة: tableLayoutPanel1.Controls.Add(btn, 2, 1); لقد استخدمنا التابع Add التابع للخاصة Controls، واعطناه الاداة التي نرغب بإضافتها بالاضافة إلى مكان توضع الاداة وهي في العمود الثاني من السطر الثاني مع الملاحظة إلى أن ترقيم الاسطر يبدأ من الصفر وترقيم الاعمدة يبدأ من الواحد. والان بقي شيء أخير أنه في حال رغبتنا في جعل العنصر (الزر) الأول button1 يحتل مساحة العمودين من السطر الأول، دعنا نقم بذلك سوية، حتى نلاحظ عمليات التغير التي ستطرأ على الزر دعنا نضبط الخاصية Dock للزر button1 إلى Fill ليصبح شكل الفورم على النحو التالي: والان كل ما عليك أن تقوم بما يلي إذهب إلى الخاصية ColumnSpan الخاصة بالزر button1 وغير قيمتها من 1 إلى 2 وهي تمثل عدد الاعمدة التي تريد ان يمتد الزر فيها، لتصبح الفورم على النحو التالي: وهناك خاصية مقابلة للأسطر وهي RowSpan شيئ أخير إذا اردت إضافة سطر أو عمود جديدين بشكل سريع ما عليك سوى الذهاب إلى Smart Tag الموضحة بالشكل التالي: والان أترك باقي التفاصيل لك لتستمتع بهذه الاداة الجميلة والجميلة جداً أرجوا أن لا تنسونا من صالح دعائكم... UsingTableLayoutPanel.zip
  7. Regular Expressions كيف اضع حد ادنى وحد اعلى للحروف

    الحمد لله :)
  8. Regular Expressions كيف اضع حد ادنى وحد اعلى للحروف

    :) جرب هذا <asp:TextBox ID="txt2" runat="server"></asp:TextBox> <asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationExpression="^[\u0621-\u064A\040]{3,6}$" runat="server" ControlToValidate="txt2" ErrorMessage="RegularExpressionValidator" /> حيث انه التعبير النظامي هو: ^[\u0621-\u064A\040]{3,6}$ يسمح هذا التعبير بإدخال من 3 إلى سته محارف عربية مع فراغاتها أرجوا أن اكون قد أجبت على السؤال بشكل صحيح. وإن لم يكن فلا تتردد. :)
  9. Regular Expressions كيف اضع حد ادنى وحد اعلى للحروف

    لا يا اخي, لاحظ ان المثال الذي كتب يحوي على فراغات فقد جربتها وهي تعمل بنجاح. أرجوا إعادة النظر في المثال, وأي سؤال آخر لا تتردد به. :)
  10. Regular Expressions كيف اضع حد ادنى وحد اعلى للحروف

    السلام عليكم ورحمة الله إن شاء الله, هذا ما تبحث عنه. string s = "ذهب التلميذ إلى المدرسة ليلعب كرة القدم مع زملائه"; Regex r = new Regex(@"\b[\u0621-\u064A]{3}\b"); foreach (Match m in r.Matches(s)) { Console.WriteLine(m.Value); }
  11. Regular Expressions كيف اضع حد ادنى وحد اعلى للحروف

    وعليكم السلام ورحمة الله وبركاته ^[\u0621-\u064A\040]+{minimum, maximum}$ جرب هذه الطريقة أرجوا أنها ستعمل بشكل صحيح. يمكنك ايضا الرجوع إلى هذه المقالة: http://www.radsoftware.com.au/articles/regexlearnsyntax.aspx وشكرا,,
  12. وعليكم السلام ورحمة الله وانت لشو بدك تخفيها, احذفها من الاصل اذا ما كانت لازمة؟
  13. http://www.codeproject.com/KB/miscctrl/csmarquee.aspx http://www.java2s.com/Code/CSharp/Components/MarqueeLabelDemo.htm
  14. ASCII CODE

    وعليكم السلام ورحمة الله ينمكنك استخدام MaskedTextBox في Windows Application أما بالنسبه للـ ASP.NET أعتقد انك بحاجة لكود JavaScript هذا مثال: http://www.webdoubt.com/how-to-create-a-masked-textbox-using-javascript/ مثال آخر: http://www.codeproject.com/answers/51736/Masked-textbox.aspx
  15. ASP.NET 4 - Meta Tags

    شكرا جزيلا لكم,, :)
  16. Immutable Types

    شكرا جزيلا لك اخ Mohamed Meshref شكرا,,
  17. Immutable Types

    لدي سؤال أخر. هل تعلم كتاب C# يعلم هذه المفاهيم؟ وليس كتاب تعليم C# كلغة برمجة. وشكرا،،
  18. ASP.NET 4 - Meta Tags

    وعليكم السلام ورحمة الله وبركاته جزاك الله خيرا على هذه المعلومات لدي سؤال: في الحقيقة لم اهتم بهذه الاشياء من قبل. ولكن اعلم انه يمكنك كتابة Meta في HTML . فما هو الفرق في كتابته في كود C#؟ وشكرا،،
  19. لماذا تنسى الموضوع؟ أعتقد انه سيتم تنفيد المنهج الافتراضي مالم تحدد ذلك بشكل صريح
  20. Immutable Types

    جزاك الله الخير, لدي سؤال, استاذنا علمنا انه Primitive Type لا يمكن القول انها mutable أو Immutable. هذه المصطلحات فقط للصفوف؟ شكرا,,
  21. مرحبا،، دعنا مباشرة نبدأ الحديث عن بعض هذه التقنيات بدون أية مقدمات 1) Automatic Properities: نعلم انه إذا أردنا إنشاء صف Point يحتوي على خاصيتين هما X و Y فإننا سوف نكتب الكود التالي: 1. public class Point 2. { 3. private int _x; 4. private int _y; 5. 6. public int X 7. { 8. get { return _x; } 9. set { _x = value; } 10. } 11. 12. public int Y 13. { 14. get { return _y; } 15. set { _y = value; } 16. } 17. } إذا فقد احتجنا لإنشاء هاتين الخاصيتن انشاء متحولات لهما من اجل تخزين القيم (خمن مالذي حدث!!!؟)، أصبح الآن بمقدورك كتابة الشيفرة السابقة بالشكل التالي: 1. public class Point 2. { 3. public int X{ get; set; } 4. public int Y { get; set; } 5. } (أهاكذا يكفي؟ نعم) هو سيتول عنك إنشاء متحولات لهذه الخصائص، للنتقل الآن إلى الميزة التالية. 2)Local Variable Type Inference (استنباط أنوع المتحولات المحلية): ماذا يعني استنباط أنواع المتحولات المحلية، دعني أوضح لك ذلك من خلال المثال التالي، إذا أردت إنشاء متحول من نوع عدد صحيح، وآخر من أجل عدد حقيقي وآخر من أجل تخزين سلسلة نصية ماذا تكتب؟ "طلب سخيف!!!" int n = 0; float f = 10.1F; string s = "Visual Studio Orcas 2008"; اما الان فقد اصبح لديك إمكانية كتابة مايلي لتحقيق نفس الشيفرة السابقة كما يلي: var n = 0; var f = 10.1F; var s = "Visual Studio Orcas 2008"; يمن اعتباره تصريح عن متحولات بشكل ديناميكي، أي أن المترجم هو الذي سيتولى تحديد أنواع هذه المتحولات وذلك من خلال القيم المسندة إلى هذه الى المتحولات، ربما يقول قائل أن المترجم قد اعتبر هذه المتحولات من نوع object لأنه يمكنك عندها استناد أي شيء، هذا الكلم غير صحيح على الاطلاق فالمترجم هنا في الشيفرة السابقة سوف يعرف المحتول n على أنه من نوع int، والمتحول f من نوع float، والكائن s من نوع string، (ربما يقول أحدنا أثبت ما تقول) يمكن أن تثبت صحة الكلام السابق بكتابة الشيفرة التالية: Console.WriteLine("n is: {0}", num.GetType()); Console.WriteLine("f is: {0}", f.GetType()); Console.WriteLine("s is: {0}", s.GetType()); سوف ينتج لديك هل اقنعنا الان؟ ("طيب شو هالميزة يلي ما لا طعمة كان بإمكاني أن أصرح عن هذه المتحولات بشكل الاعتيادي ويكفي") سوف تكتشف فائدة الميزة هذه في الفقرات التالية. 3) التصريح عن الكائنات والمجموعات Object Initializers & Collection Initializers: إذا أخبرتك يا عزيزي المبرمج أتذكر الصف Point السابق؟ أريد منك أن تنشئ كائنا منه وتضبط قيم خصائصة بقيمة الصفر. -شو هاشغلة ميت طلب مثل هالطلب- فستكتب الشكل التالي إلا إذا كنت قد سبقتني إلى التعرف ما سوف أخبرك عنه. Point p = new Point(); // var p = new Point(); p.X = 0; p.Y = 0; ولكن لو أخبرتك أنه هل هناك طريقة تبسط علي إعطاء القيم الابتدائية اهذه الخصائص؟ فسيكون جوابك: بكل تأكيد كل ما عليك هو إنشاء باني لهذا الصف وتمرر من خلاله قيم الخصائص. كلامك سليم ولكن دعني الان أؤريك ماذا يمكن عمله الان بدون بناء هذا الباني، كلما عليك هو تعديل شيفرة التصريح عن هذا الكائن ليصبح بالشكل التالي: Point p = new Point() { X = 0, Y = 0 }; ما رؤيك؟؟ ولا ننسى القول أن هذه الميزة يمكن تطبيقها على المجمعات، على الشكل التالي: List<Point> points = new List<Point>() { new Point() { X = 1, Y = 1 }, new Point() { X = 2, Y = 3 } }; 4) الأنواع المجهولة Anonymous Types: (هل بقي أكثر من هذا جهل) تمكنك اللغة الآن من التصريح عن أنواع جديدة -ليكون تمزح- بدون أن تقوم بإنشاء صف جديد -يعني كيف- لو أردنا إنشاء كائن يمثل نقطة بدون أن تقوم بإنشاء الصف السابق Point فستقول لي مستحيل، ولكنني سأقول لك لا شيء مستحيل أبدا، لاحظ الشيفرة التالية التي ستقوم بتأدية نفس الغرض: var p = new { X = 1, Y = 2 }; Console.WriteLine("p.X = {0}", p.X); Console.WriteLine("p.Y = {0}", p.Y); أنوه مرة أخرى بدون كتابة الشيفرة السابقة للصف Point. 5)تعابير لامدا Lambda Expressions: في C# 2.0 يوجد الاجراءات المجهولة (العامة Generic)، فمثلا في C# 2.0 يمكن كتابة الشيفرة التالية: class Program { delegate R MyDelegate<A, R>(A arg); MyDelegate<int, bool> IsPositive = delegate(int num) { return num > 0; }; static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.IsPositive(2)); Console.WriteLine(p.IsPositive(-2)); } } -طيب هذا الكلام أين الجديد فيه- الجديد فيه هو أنه يمكنك إعادة كتابة التابع IsPositive في سطر واحد بالشكل التالي: class Program { delegate R MyDelegate<A, R>(A arg); MyDelegate<int, bool> IsPositive1 = num => num > 0; static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.IsPositive(2)); Console.WriteLine(p.IsPositive(-2)); } } 6)الإجرائيات المضافة Extension Methods: ماذا يعني هذا الكلام –وياعيني على هالكلام- لو طلبت منك أن تنشىء لي تابع يقوم بالتحقق من عنوان ايميل هل هو صحيح أم لا، -مافي أسهل من هذا الطلب باستخدام التعابير النظامية- تكتب التابع التالي: public static class StringExtenstion { public static bool IsValidEmailAddress(string s) { Regex regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); return regex.IsMatch(s); } } class Program { static void Main(string[] args) { string email = "Abdulkarim.Kanaan@gmail.com"; bool isValidate = StringExtenstion.IsValidEmailAddress(email); Console.WriteLine(isValidate); } } ولكن لو أخبرتك بأني أود أن أن يكون تابعا عاما لكل سلسلة نصية، مثل توابع السلاسل النصية العامة ToString() و ToTrim() و ToCharArray() و ...، فربما ستقول لي هذا غير ممكن ولكن عندها سأقول لك أن هذا قد أصبح ممكنا وذلك فقط بإضافة كلمة واحدة قبل البرامتر s في التابع IsValidEmailAddress تأمل الشيفرة التالية: public static class StringExtenstion { public static bool IsValidEmailAddress(this string s) { Regex regex = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"); return regex.IsMatch(s); } } class Program { static void Main(string[] args) { string email = "Abdulkarim.Kanaan@gmail.com"; bool isValidate = StringExtenstion.IsValidEmailAddress(email); Console.WriteLine(isValidate); Console.WriteLine(email.IsValidEmailAddress()); } } ياللهول؟! 7)صيغ الاستعلام Query Syntax: ربما عندما تقرأ هذا العنوان سيخيل لك أنني سأتحدث عن SQL، ولكن دعني أقل لك أنك قد أخطأت ما سأتحدث عنه بشكل مختصر هو ما يعرف LINQ إختصار لـ Langauge Integrated Query–ممكن أن يكون هناك مقالة أخرى توضح هذه الميزة بشكل أوسع- ، لأبسط لك الأمور بأبسط شكل ممكن، لو أخبرتك بأن لدي مصفوفة من سلاسل نصية تمثل أسماء أصدقائي و أود أن أستخرج جميع الأسماء التي تبدأ بحرف 'F'، فربما تقول بسيطة نعمل حلقة ونفحص إذا كانت بداية الاسم تبدأ بهذا الحرف وانتهت القصة، ولكن لو علمت ما في وراء هذا العنوان لعلمت أن ما تعمله هو قصة بحد ذاته، ولكن مع استخدام تقنية LINQ سيكون عمل المطلوب من أبسط مل يكون، تأمل الشيفرة التالية يارعاك الله: static void Main(string[] args) { string[] frindNames = new string[] { "Fadi", "Ahmad", "Rami", "Fofo", "Toto"}; var names = from f in frindNames where f.StartsWith("F") select f; foreach (string n in names) { Console.WriteLine(n); } } سيكون الناتج: وشكرا
  22. مرحبا،، أود إظهار ToolTip كبالون مثلا مع حقل نصي في حال مثلا CAPS LOCK فعال جربت ToolTip.IsBallon = true; ولكن لم تعد تعمل الأداة أبدا بعد كتابة التعليمة السابقة وشكرا
  23. لنفرض انك تود بإجراء عملية الضعط لمصفوفة من البايتات فكيف يمكننا القيام بذلك، دعنا ندع الحديث عن ذلك للتابع التالي: public static byte[] Compress(byte[] document) { MemoryStream outStream; GZipStream zip; outStream = new MemoryStream(); zip = new GZipStream(outStream, CompressionMode.Compress); zip.Write(document, 0, document.Length); zip.Close(); return outStream.ToArray(); } أما عملية فك الضغط فستكون على النحو التالي: public static byte[] Decompress(byte[] document) { MemoryStream outStream; GZipStream zip; List<byte> decompress; int value; outStream = new MemoryStream(document); zip = new GZipStream(outStream, CompressionMode.Decompress); decompress = new List<byte>(); value = zip.ReadByte(); while (value != -1) { decompress.Add((byte)value); value = zip.ReadByte(); } zip.Close(); return decompress.ToArray(); } طبعا الصف GZipStream ليس فقط من اجل ضغط مصفوفة بايتات وانما ايضا يسمح لك بضغط ملف. طبعا حيث نستطيع قراءة الملف كمصفوفة من البايتات وشكرا
  24. هل تساءلت يوما كيف يمكنك ان تجعل نافذة الفورم تبدو كشكل معين، دعنا من خلال هذه المقالة نحدد كيف يمكننا القيم بذلك بكل سهولة: قم انشاء مشروع من نوع Windows Application لتظهر Form1 فارغة والان اولا: قم بضبط الخاصة FormBorderStyle التابعة للفورم إلى Non ثانيا: من خلال الخاصية BackgroundImage اختر الصورة التي تناسبك، ليصبح شكل Form1 شيء من هذا القبيل: ثالثا: والان بعد ذلك قم بضبط الخاصية TransparencyKey إلى لون خليفة الصورة وهو هنا زهري والان قم بتشغيل البرنامج ليظهر لك الشكل التالي: وشكرا البرنامج في المرفقات ShowFormAsShape.zip
  25. شكرا لكم جميعا على مروركم ولا تنسونا من دعوة صالحة