الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في كود عرض صورة

بدأه مبرمجة فلسطين في 23 مايو 2010 · 11 رد · 4,177 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي سؤال في كود بلغة الفيجوال بيسك دوت نت

فأنا الآن أدرس الرسم بالفيجوال بشكل ذاتي

الكود كالتالي:

Private Sub ShowPictures(ByVal e As System.Windows.Forms.PaintEventArgs)

Dim gr As Graphics = e.Graphics

Dim jpg As New Bitmap("c:\4.jpg")

gr.DrawImage(jpg, 0, 0)

End Sub

المشكلة أنني أريد تحميل الصورة عند الضغط على الزر حيث أن الفورم يحتوي زر عند الضغط عليه المفروض تظهر الصورة

وأنا بصراحة لا أعلم أين أضع هذا الكود وماذا أكتب كود على الزر لكي يقوم بهذه المهمة

ساعدوني جزاكم الله كل الخير

مع العلم أن الكود مأخوذ من كتاب برمجة اطار عمل .net باستخدام الفيجوال بيسك دوت نت وهو كتاب لتركي العسيري وأنا أبرمج على فيجوال 2008

#2

ضع الكود داخل دالة الحدث Click للزر الذي تتكلم عنه. أنقر مرتين على الزر في وضع التصميم ليتم حجز اشتراك لدالة الحدث التي تكون في العادة شبيهة بـ Button1_Click

#3
محمد رضى كتب:

ضع الكود داخل دالة الحدث Click للزر الذي تتكلم عنه. أنقر مرتين على الزر في وضع التصميم ليتم حجز اشتراك لدالة الحدث التي تكون في العادة شبيهة بـ Button1_Click

السلام عليكم أخي محمد رضى

حتى الفكرة التي تقول عنها قمت بعملها ولم تنجح والسبب في وجود الكائن e والمعرف من الكلاس Graphics

وبالتالي عند وضع الكود داخل دالة الحدث كما قلت فإنه على الفور يعطي خطأ

وجربها وشوف

أرجو ممن يعرف الحل بأن لا يبخل علينا

وجزاكم الله كل الخير

#4

اتبع الخطوات التالية وسيعمل إن شاء الله"

عليك أولا أن تحدد اين تود عرض الصورة اي ما هي الأداة التي ستعرض الصورة ضمنها

ولو افترضنا انك تريد عرض الصورة على نفس الفورم

وتريد عند ضغط الزر تظهر الصورة وعند الضغط مرة اخرى تختفي الصورة

1- عرف متحول على مستوى الفورم كالتالي:

Dim ISDraw as Boolean = False

2- في حدث Click على الزر اكتب الكود التالي:

ISDraw = Not ISDraw
Me.Refresh()

3- ثم الكود السابق يجب ان يكون ضمن الحدث Paint للفورم مع بعض التعديلات:

 private sub Form2_Paint(byval sender as object ,byval e as PaintEventArgs)
If ISDraw Then
Dim gr As Graphics = e.Graphics
 Dim jpg As New Bitmap("c:\4.jpg")
 gr.DrawImage(jpg, 0, 0)
End If
End sub

4- تأكد من مسار الصورة

بالتوفيق :cool:

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#5
was_hal كتب:

اتبع الخطوات التالية وسيعمل إن شاء الله"

عليك أولا أن تحدد اين تود عرض الصورة اي ما هي الأداة التي ستعرض الصورة ضمنها

ولو افترضنا انك تريد عرض الصورة على نفس الفورم

وتريد عند ضغط الزر تظهر الصورة وعند الضغط مرة اخرى تختفي الصورة

1- عرف متحول على مستوى الفورم كالتالي:

Dim ISDraw as Boolean = False

2- في حدث Click على الزر اكتب الكود التالي:

ISDraw = Not ISDraw
Me.Refresh()

3- ثم الكود السابق يجب ان يكون ضمن الحدث Paint للفورم مع بعض التعديلات:

 private sub Form2_Paint(byval sender as object ,byval e as PaintEventArgs)
If ISDraw Then
Dim gr As Graphics = e.Graphics
 Dim jpg As New Bitmap("c:\4.jpg")
 gr.DrawImage(jpg, 0, 0)
End If
End sub

4- تأكد من مسار الصورة

بالتوفيق :cool:

شكراً لك أخي was_hal

جزاك الله كل الخير

عندي سؤال أخير أنت قلت أن أضع الكود في حدث Paint ولكن هل هذا لا يؤثر على تنفيذ البرنامج

لأنني قرأت في الكتاب الذي أخذت منه الكود أنه من الأفضل عدم وضع كود تحميل الصورة في الحدث paint

فهل هذا صحيح؟؟؟

تحياتي وكل الاحترام لصبرك

#6

لا لن يؤثر على تنفيذ البرنامج ولكن اعتقد الذي كان يقصده الكاتب لان ذلك يؤدي الى عدم استخدام الصورة من قبل برامج اخرى ولكن ممكن ان يتم حل هذا الامر

عن طريق تحميل الصورة عن طريق Stream ومن ثم اغلاق ال Stream بعد قراءة الصورة

إذا اردت سأضع كود يشرح ذلك

بالتوفيق

1

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#7
was_hal كتب:

لا لن يؤثر على تنفيذ البرنامج ولكن اعتقد الذي كان يقصده الكاتب لان ذلك يؤدي الى عدم استخدام الصورة من قبل برامج اخرى ولكن ممكن ان يتم حل هذا الامر

عن طريق تحميل الصورة عن طريق Stream ومن ثم اغلاق ال Stream بعد قراءة الصورة

إذا اردت سأضع كود يشرح ذلك

بالتوفيق

أشكرك جزيل الشكر

وجزاك الله كل الخير ونفع بك

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

وسوف أطمع بكرم بأن تزودني بكتب عن الفيجوال بيسك دوت نت

اذا ما كان عندك مانع

أعرف بأني أثقلت بالأسئلة جزاكم الله عني كل الخير

#8

بسم الله الرحمن الرحيم

أخى العزيز was_hal

بصراحة الكود بتاعك فى منتهى الجمال

انت اتعلمت منه جدا

شكرا عليه

بس كنت عاوز اخد رايك فى حاجة

بالنسبة لحدث ال Paint

فعلا بياثر على المشروع اكبر دليل على كده ضع preakpoint

فى الحدث ده هتلاقيه بيتكرر فى كل عملية انت بتعملها

و ممكن برضه نستخدم ده على الكود اللى حضرتك وضعته

Dim OldImage As Image = Me.PictureBox1.Image
Me.PictureBox1.Image = Image.FromFile("C:\4.jpg")
OldImage.Dispose()

و ده كود كمان

  PictureBox1.Image = New System.Drawing.Bitmap("C:\4.jpg")

حيث سوف يتم اضافة PictureBox1

تم تعديل هذه المشاركة بواسطة bodaman22 في 29 مايو 2010 في 09:59

#9

بالنسبة لتحميل الصورة عن طريق Stream:

الفائدة منه أنه نقوم بفتح قناة Stream يتم قراءة الصورة عن طريقها وتحميلها في أداة PictureBox ومن ثم نقوم بإغلاق القناه وبذلك يمكننا أعادة تسمية أو تعديل أو حذف الصورة حتى وهي معروضة في PictureBox لأنها تكون معروضة في الذاكرة Memory

وإليك الكود:

أولا نحتاج لإضافة مكتبة Input Output كما يلي:

Import System.IO

 Dim Path as String = "C:\Autumn Leaves.JPG"
 	Dim ImageStream as new FileStream(path, FileMode.Open, FileAccess.Read)
 	Dim Img as Image = Image.FromStream(ImageStream)
 	ImageStream.Close()

استخدمت متحول Variable من نوع FileStream ويحتاج إلى برامتر Parameters

Path وهو مسار الملف

FileMode والذي يحدد حالة استخدامنا للملف مثل (Create, Open, ...) وهنا استخدم Open لفتح الملف

ثم استخدمت التابع FromStream من الصنف Image والذي يأخذ متحول من نوع Stream ويرد صورة

ومن ثم نقوم بإغلاق القناه Stream عن طريق Close وبذلك نكون حررنا الصورة

وبالنسبة للكتب:

إليك مجموعة من الكتب العربية والإنكليزية ولكن أنصح بالانكليزية:

لبرمجة بأستخدام Visual Basic.NET

Microsift Visual Basic 2008

VB.NET 2008

كتب الاستاذ تركي العسيري

مجموعة كبيرة من الكتب

بالتوفيق للجميع :cool:

1

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#10

شكرا أخي bodaman22 على إطرائك :blush:

بالنسبة للحدث Paint معك حق أنه يتكرر ولكن ليس دائما

الحدث Paint يعمل عندما تظهر النافذة او تغير حجمها أو كانت خلف نافذة اخرى واظهرتها

وعندما تضع Breakpoint من الطبيعي ان يتكرر الحدث لانك كل مرة تعود الى النافذة لتشاهدها وهنا يستدعى الحدث مرة اخرى

في حالتنا هذه عندما نريد الرسم على النافذة اعتقد انه ليس امامنا خيار اخر سوى الحدث paint ولكن اذا اردنا الرسم على اداة PictureBox وهذا الذي قمت به في احد المشاريع

سيكون الامر أكثر سلاسة ولا نحتاج للحدث Paint لنعيد الرسم بل نرسم على صورة محملة في الإداة PictureBox

وأنا افضل عند العمل مع برامج اكثر تطورا واحترافية ان نستخدم PictureBox

وإليك هذا الكود الذي يوضح ذلك:

الرسم على أداة PictureBox مباشرة

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim newImage As Image = Image.FromFile("ImageFile.jpg")
 Dim g As Graphics = Me.PictureBox1.CreateGraphics
 g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
 End Sub

الرسم على PictureBox Image

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 Dim newImage As Image = Image.FromFile("ImageFile.jpg")
 Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
 g.DrawImage(newImage, New Rectangle(10, 10, 200, 200))
 PictureBox1.Refresh()
 End Sub

تم تعديل هذه المشاركة بواسطة was_hal في 29 مايو 2010 في 11:43

1

1338031614581.png

" اللهــم إنّا مغلــوبــون فانتصــــر "

(اللهم سبحانك لا علم لنا إلا ما علمتنا إنك أنت العليم الحكيم)

#11

بسم الله الرحمن الرحيم

اخى العزيز

الحدث ده بيتكرر طول ما الفورم مفتوح

مش فى الحالات اللى حضرتك ذكرتها بس

ممكن تضع MSGBOX فيه و تجرب

انا اخدت بالى ان الاخ اللى طالب الموضوع طالب الرسم على الفورم

لكن اللى قصدته انك ممكن تد على طريقة احسن

او على الأقل ضع ده و ده

كل اللى اقصده من المناقشة معك

هو الأستفادة سواء لى

او لأى حد ممكن يقرا المقال ده

شكرا لك

تم تعديل هذه المشاركة بواسطة bodaman22 في 29 مايو 2010 في 13:26

1
#12

يعطيكم ألف عافية

مشكورين وجزاكم الله كل الخير

على المعلومات القيمة

وفقكم الله ونفع بكم

ودامكم للمبتدئين أمثالنا

مواضيع مشابهة