![]() |
|
WordList - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183) +--- الموضوع : WordList (/showthread.php?tid=29370) الصفحات:
1
2
|
WordList - sads - 14-04-19 السلام عليكم ورحمة الله وبركاته
في موضوع سابق طرحته هنا عن فكرة إنشاء برنامج يقوم بعمل ملفات WordList مرتبة ترتيب أبجدي وقد تجاوب معي كلاً من أخي عبدالله الدوسري وأخي الجوكر وفي الحقيقة أنا إستفدت من خبرتهم الكثير وجزاهم الله خيراً لما يبذلونه من جهد لتوصيل المعلومة حتى نستفيد فلهم منى كل الشكر والتقدير طبعاً لا أنسى باقي الأعضاء الكرام بهذا الصرح العلمي في الشكر فكل عضو هنا يشكل عمود من أعمدة هذا الصرح العلمي - - طرحي للموضوع مجدداً لكي أستفيد أكثر من خبرتهم فأنا أحاول جاهداً أن أطور من نفسي و أتعلم أكثر كيف أكتب الكود بطرق إحترافية و الأنسب ولاكن أبحث كثيراً وأرجع هنا لأستفيد من إخوتي في هذا المنتدى.
إخوتي ماهو الكود الأنسب والأسرع أو الدوال التي قد تفيد عند التنفيذ في مثل هذا البرنامج ؟
فلنبدأ مجدداً خطوة بخطوة
صورة مبدئية للبرنامج
وشكراً
RE: WordList - sads - 15-04-19 يومكم مبارك أحبائي
RE: WordList - elgokr - 19-04-19 وعليكم السلام ورحمة الله وبركاته
مرحباً اخى sads فى البداية انصح ان تطلع
على دورات بخصوص الخوارزميات فسيفيدك كثيراً
فى مثل هذه الامور وسيسهل عليك الامور اكثر مما تتخيل
ثانياً بما تطلبه بشكل عام فاسقوم بشرح الامر نظرياً
فى بداية الامر انت محتاج انشاء تعرف يحتوى على الاحرف الانجليزية من a الى z
مثال للتوضيح كود : Dim aa As String = "abcdefghijklmnopqrstuvwxyz"ومن ثم بحسبب عدد الاحرف التى تحتاج ان تعرض
والمقصود بها ان يبداء من aaa وينتهى مثلاً عند zzz
فانت هنا بحاجة لعمل For متعدد لتحويل كل حرف لتكرار 3 مرات
وعرض الامر من aaa الى zzz
المثال التالى لحرف واحد فقط كود : For a As Integer = 0 To aa.Length - 1طيب الطريقة التى بالاعلى تفيد لاى كان الاحرف عربى او انجليزيى او اى لغة
طيب لو كان الاحرف انجليزية المطلوب العمل عليها فيمكن فقط بمثل هذا الكود تنفيذ الامر مباشر
المثال لحرف واحد فقطكود : For ii As Integer = 65 To 90عند اختبار الامر ستجد الكود لكلاهما يعطى نفس الامر
طيب بعد الشرح نظرياً مع الاكواد السابقة الان
كيف اتمام الامر طبقاً لما هو فى الموضوع
الكود بالطريقة الثانية من aaa الى zzz كود : For i As Integer = 65 To 90الكود بالطريقة الثانية من aaa الى aaz طبقاً لما هو بالصورة كود : For i As Integer = 65 To 90لاحظ الامر لا يختلف فقط تم وضع هذا السطر كود : If (Chr(i) + Chr(ii) + Chr(iii)).ToString = "AAZ" Then Exit Subطيب بالطريقة الاولى بوضع معرف بالاحرف
من aaa الى zzzكود : Dim aa As String = "abcdefghijklmnopqrstuvwxyz"الطريقة الاولى من aaa الى aaz طبقاً للصورة كود : Dim aa As String = "abcdefghijklmnopqrstuvwxyz"وكما تلاحظ ان الفرق الوحيد فقط وجود سطر كود : If (aa(i) + aa(ii) + aa(iii)).ToString = "aaz" Then Exit Subتحياتى لك
وتمنياتى لك التوفيق
RE: WordList - sads - 19-04-19 الله إيبارك فيك أخي الجوكر شرح واضح أخي وأنا معك نقطة بنقطة وسوف أخذ بالنصيحة بعين الإعتبار شكراً مجدداً أخي
في إنتظار المزيد من شروحاتك فيما يخص المثال السابق ولاكن بطرق أخرى.
شكرا
إستفسار بخصوص الكود التالي
For a As Integer = 0 To aa.Length - 1
لماذا نظيف 1-
ملحوضة / النتائج تتعطل ولا تضهر حتى يكتمل الشرط ومن تم تعرض النتائج داخل الليست
هل من تعديل لعرض النتائج مباشرة عند تنفيذ الكود قبل إنتهاء الشرط وعندها يتوقف عند تحقق الشرط لأن لاحضت بطئ للبرنامج أو بمعنى اخر تشنج .
RE: WordList - elgokr - 20-04-19 الشكر لله والحمد لله
والحمد لله على كل حال
لى ولك وللجميع بامر الله
فى البداية بخصوص Length
فهى تعنى طول النص / القيمة أو باصح عدد الاحرف للمحتوى
فبطبيعة الحال عند اتمام عد عدد الاحرف هنا كود : abcdefghijklmnopqrstuvwxyzبابسط ما يكون ستبداء برقم 1 ومن ثم تنتهى عن الرقم 26
وهذا طبيعي ولا نقاش فى الامر بهذا
لكن عند تنفيذ الامر وهو طباعة حرف حرف من خلال كود : aa(i)فحرف الـ i هنا يبداء من العد 0 وليس 1
لان القرائة الخارجية لاى شي ينظر اليه يبداء من 1
ولاكن برمجياً عند بدء العد والتنفيذ فهو يبداء من 0
وبما ان اجمالى عدد الاحرف هى 26 وبما ان العد يبداء من 0 فيجب ان ينتهى عند 25
ليكون الاجمالى م 0 الى 25 هو 26 فلذلك يتم وضع -1 ليصبح الكود كعبارة عن التالى كود : For i As Integer = 0 To 26 - 1ليكون الشكل هو كود : For i As Integer = 0 To 25الجزء الاخير وهو تاخير تنفيذ الكود بسبب كثرة عملية تنفيذ الـ For
وكذلك يتم طباعة الامر بعد الانتهاء منه فهنا يرجع لطريقة تنفيذ الكود
هل تم تنفيذ الكود من خلال زر وخلاص دون اى امر
او انه تم استغلال الكود ليتم تنفيذه من خلال BackgroundWorker وايضاً ProgressBar
حيث كل ما تحتاج اليه هو وضع الكود داخل حدث PHP كود : BackgroundWorker1.DoWork ومن ثم فى حدث كود : Button1.Clickتقوم بوضع هذا الكود كود : BackgroundWorker1.RunWorkerAsync()ستجد ان المشروع بدون اى لاج ابداً مهما كان تاخير تنفيذ الكود
كذلك انه يعرض ما يتم تنفيذه لحظة بلحظة حتى الانتهاء
وياتى دور الاخير فى اختيارى استخدام ProgressBar
فقط لمعرفة ان الكود تم الانتهاء من تنفيذه ام لا فكما ذكرت انه اختياري
ولاتمام الامر بدون ProgressBar فكل ما عليك فقط تنفيذ ما تم شرحه بالاعلى
واذا كنت تريد اضافة رسالة فقط بدون استخدام ProgressBar تفيد بانه تم الانتهاء من تنفيذ الكود
أو تنفيذ اى كود بعد الانتهاء فقط يكتفي وضع اى كود بحدث PHP كود : BackgroundWorker1_RunWorkerCompleted واذا كنت تريد اتمام تفعيل ProgressBar لتعطي مظهر متكامل
لتنفيذ الكود فقط عليك باتمام الخطوات التالية
فى حدث BackgroundWorker1_DoWork طبق الكود التالى كود : CheckForIllegalCrossThreadCalls = Falseفى حدث BackgroundWorker1_ProgressChanged طبق الكود التالى كود : ProgressBar1.Value = e.ProgressPercentageفى اعدادات خيارات اداء BackgroundWorker1
تاتى على WorkerReportsProgress وتجعل القيمة True
ولعمل الامر تاتى فى حدث Button1_Click وتقوم بكتابة هذا الكود كود : BackgroundWorker1.RunWorkerAsync()وبكده ستجد الكود يعمل كما تشاء
لا تنسى التعديل على هذا السطر كبقاً لما تريد كود : 'If (aa(i) + aa(ii) + aa(iii)).ToString = "aaz" Then Exit Subتحياتى لك
وتمنياتى لك التوفيق
RE: WordList - sads - 20-04-19 شرح سلسل وبسيط و واضح وهذا يدل على شخص متمكن في إيصال المعلومة للمتلقي فجزاك الله كل خير
أخي واجهنى خطأ ولم أعرف سببه أرجو توضيحه لي
صورة الخطأ بالمرفقات RE: WordList - elgokr - 20-04-19 لى ولك وللجميع بامر الله
بخصوص الخطاء
هل قمت باضافة اداء ListBox فى الفورم ام لا
واذا نعم يبدو ان الاسم مختلف عن اسم ListBox1
تحياتى لك
وتمنياتى لك التوفيق
RE: WordList - sads - 20-04-19 (20-04-19, 04:52 PM)elgokr كتب : لقد قمت بالتأكيد على إسم الأداة فوجدت أنها بنفس المسمى وللتأكيد أكثر نسخت إسم الأداة وأعدت تسميتها فظهر لي نفس الخطأ RE: WordList - sads - 20-04-19 Imports System.ComponentModel
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
CheckForIllegalCrossThreadCalls = False
Dim ic As String
Dim aa As String = "abcdefghijklmnopqrstuvwxyz"
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = aa.Length
For i As Integer = 0 To aa.Length - 1
For ii As Integer = 0 To aa.Length - 1
For iii As Integer = 0 To aa.Length - 1
For iiii As Integer = 0 To aa.Length - 1
ic = (aa(i) + aa(ii) + aa(iii) + aa(iiii))
Label1.Text = ic
ListBox1.Items.Add(ic)
If (aa(i) + aa(ii) + aa(iii) + aa(iiii)).ToString = TextBox1.Text Then Exit Sub
Next
Next
Next
BackgroundWorker1.ReportProgress(i + 1)
Next
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
End Class
أخي ياريت توضيح لوظيفة الكود التالي لو سمحت
BackgroundWorker1.ReportProgress(i + 1)
RE: WordList - elgokr - 21-04-19 (20-04-19, 08:04 PM)sads كتب : لقد قمت بالتأكيد على إسم الأداة فوجدت أنها بنفس المسمى وللتأكيد أكثر نسخت إسم الأداة وأعدت تسميتها فظهر لي نفس الخطأ بخصوص المرفق بهذا الرد فهو يعمل جيداً بدون اى مشكلة يبدو ان الامر لديك فى الجهاز فقط قم باعادة تشغيل السورس او الجهاز حتى يتم حل المشكلة لديك اذا كانت المشكلة قائمة حتى الان (20-04-19, 09:27 PM)sads كتب : بخصوص هذا السطر هو عبارة عن ارسال رقم مرحلة تنفيذ For
ممكن تقول عليه كالعداد زى اللى ممكن نقول عليه كمثال
عند تنفيذ كل مرحلة يقول رقم 1 تم رقم 2 تم حتى يصل الى اخر رقم فى For
وطبعاً For يبداء من العدد 0 وينتهى عند 25 بينما عدد الاحرف الذى يتعامل معها من 1 الى 26
فهنا عندما تكتب i فقط يعنى بعد الانتهاء من الخطوة الاولى سيقول المرحلة رقم 0 تم
وطبعاً 0 يعنى لم يبداء بعد لذلك حتى اجعله يبداء من رقم 1 فهنا انا بقول له كالتالى
0+1 = 1 تم
1+1 = 2 تم
فستجد انه يبداء من 1 وينتهى عند رقم 26 كما هو عدد الاحرف
ووظيفة هذا السطر فقط فى حالة تم استخدام ProgressBar
لانك ستجعل خصائص هذه الاداء الحد الادنا للرقم هو 0 والحد الاكبر للعدد بدلاً من 100
سيكون عدد الاحرف اى انه سيكون 26
فهنا فى كل مرة يقوم For بانه تم الانتهاء من رقم 1 يعنى ProgressBar اصبح يساوى 1
وعندما يصل الى 26 سيكون ProgressBar اصبح يساوى 26 وهو الحد الاكبر والذى يعنى 100%
والامر انه ازاي بياخد تلك القيمة ان 1 تم الى اخر رقم
فاذا تنظر بردى السابق ستجد هذا السطركود : ProgressBar1.Value = e.ProgressPercentageراجع الشرح فى ردي السابق وستوضح الامر اكثر مع الشرح بهذا الرد
خصوصاً ان الكود يحتوى على الاسطر التالية كود : ProgressBar1.Minimum = 0تحياتى لك
وتمنياتى لك التوفيق
|