تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[كود] مشكلة فى كود DrawSubItem
#1
عندى listview يوجد بها 15 Columns اريد اضافة الصور فى ال15 Columns subitems المشكلة ان الكود يعمل تعليق فى الفورم


كود :
   Private Sub Listview1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles Listview1.DrawSubItem
       Try
           Dim imgs = New Rectangle(e.Bounds.Location.X, e.Bounds.Location.Y, e.Bounds.Height, e.Bounds.Height)
           If (e.SubItem.Text = e.SubItem.Text) Then
               e.Graphics.DrawImage(Image.FromFile(Application.StartupPath & "\Images\" + e.SubItem.Text + ".png"), imgs)
           Else
               e.DrawDefault = True
           End If
       Catch ex As Exception

       End Try
   End Sub
جربت فحص اذا تم اضافة item جديد يتم اضافة الصوره الخاصة بها لاكن عند الفحص يتم اذالة جميع الصور من subitems كلها علاشان الكود يحتوى على loop ليرسم على subitems و هو الذى يسبب التعليق فى الفورم حل يوجد حل لهذه المشكلة
الرد }}}
تم الشكر بواسطة:
#2
سؤال : هل الأمر إجباري بالنسبة لك ان تكون الصور في فهرس المشروع؟
ان لم يكن هذا شرطا اجباريا هنا حاول ان تضع الصور في Resources المشروع أو في imageList و تقراها قبل بدء الفورم ثم ترسمها و لتري ما يحدث معك بعد ذلك
الرد }}}
تم الشكر بواسطة: أسامة
#3
(07-08-16, 05:45 AM)silverlight كتب : سؤال : هل الأمر إجباري بالنسبة لك ان تكون الصور في فهرس المشروع؟
ان لم يكن هذا شرطا اجباريا هنا حاول ان تضع الصور في Resources المشروع أو في imageList و تقراها قبل بدء الفورم ثم ترسمها و لتري ما يحدث معك بعد ذلك

اجل الامر اجاريآ
الرد }}}
تم الشكر بواسطة:
#4
لماذا لا تستخدم داتا جريد فيو؟
الرد }}}
تم الشكر بواسطة: أسامة , أسامة
#5
(07-08-16, 05:05 AM)أسامة كتب : جربت فحص اذا تم اضافة item جديد يتم اضافة الصوره الخاصة بها لاكن عند الفحص يتم اذالة جميع الصور من subitems كلها علاشان الكود يحتوى على loop ليرسم على subitems و هو الذى يسبب التعليق فى الفورم حل يوجد حل لهذه المشكلة

("" لاكن عند الفحص يتم اذالة جميع الصور"")
ماهو الفحص؟
وأين هي الـ loop التي ترسم subItems؟
وهل كتبت كود في حدث DrawItem ؟ إذا نعم أرنا إياه لعل المشكلة به
الرد }}}
تم الشكر بواسطة: أسامة
#6
الأخ أسامة

حاول تكتب برنامج بسيط منفصل للمشكلة بحيث تستخدم نفس الكود الخاص بالرسم و ترفع المثال لو سمحت
الرد }}}
تم الشكر بواسطة: أسامة
#7
وجدت المشكلة

المشكلة فى  e.SubItem.Text.Substring(0, 10) & "_" & e.SubItem.Text.Substring(11, 1)الكود يعمل بدون تعليق اذا كان عدد الصور فى المجلد صغير لماذا استخدم هذه الطريقة الان اسم الصور مثل هذا Ahmed_0 الاسم _ الرقم
عدد الصور فى مجلد الصور هو 8262 صورة تم ارفاق مثال صغير لاكن لا يوجد تعليق فى هذا المثلا بسبب يوجد 15 صورة فقط فى المجلد لا اعتقد انه يوجد حل لى 8262 صورة


الملفات المرفقة
.rar   WindowsApplication1.rar (الحجم : 84.21 ك ب / التحميلات : 29)
الرد }}}
تم الشكر بواسطة:
#8
بغض النظر عن الخطأ في رسم String لكن سبب المشكلة الأصلي هو ان عدد الصور ضخم جدا
ومع هذا العدد الضخم من الصور يكون امرا طبيعيا ان يأخذ الكمبيوتر وقتا لتنفيذ المطلوب منه
عليك ان تجد حلا لتفادي مشكلة Hanging او التعليق أثناء عملية الرسم

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

ربما قد يكون هناك حلول اخري و هي انك تخزن الصور في صورة Bytes

سؤالي لك هل عدد الصور سيتزايد ام سيكون ثابتا علي الرقم 8262 ؟
الرد }}}
تم الشكر بواسطة:
#9
(07-08-16, 06:20 PM)silverlight كتب : بغض النظر عن الخطأ في رسم String لكن سبب المشكلة الأصلي هو ان عدد الصور ضخم جدا
ومع هذا العدد الضخم من الصور يكون امرا طبيعيا ان يأخذ الكمبيوتر وقتا لتنفيذ المطلوب منه
عليك ان تجد حلا لتفادي مشكلة Hanging او التعليق أثناء عملية الرسم

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

ربما قد يكون هناك حلول اخري و هي انك تخزن الصور في صورة Bytes

سؤالي لك هل عدد الصور سيتزايد ام سيكون ثابتا علي الرقم 8262 ؟

سيكون ثابتا علي الرقم 8262
الرد }}}
تم الشكر بواسطة:
#10
أخي الفاضل أسامة

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

بشكل مبدئي فإن الحل الأمثل لك هو ان تقوم بتخزين الصور في مصفوفة أو في ملف و الفكرة هنا هي حفظ الصور بأسلوب أخر و الحفظ إما أن يكون علي هيئة Bytes او علي هيئة IntPtr
ثم وعند الحاجة تقوم بتحويل Bytes أو IntPtr الي صورة
و أهم مميزات هذا الأسلوب أن حجم مشروعك سيصبح أقل و لن تستهلك كثيرا من الذاكرة

عموما الكلام النظري حلو و سهل و لكي نتأكد من أن ما أقوله مناسبا لك فعلينك تحويل هذا الكلام النظري الي تطبيق عملي في شكل أكواد

لكن قبل هذا أرجو أن تجيب سؤالي التالي
لماذا تريد أن تملأ ListView بهذا الكم من الأيقونات ؟
إن أوضحت لي أسبابك في ذلك فلربما نجد حلا بديلا أسهل
الرد }}}
تم الشكر بواسطة:



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


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