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

مشكلة في مصفوفة الصور

بدأه seefmaher في 1 أبريل 2011 · 9 رد · 1,087 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

يحدث خطأ في البرنامج لا أدري ما مصدره و هذا هو الكود

        private void button3_Click(object sender, EventArgs e)
        {
            Image[] x = new Image[5];
            x[0] = pictureBox2.Image;
            x[1] = pictureBox3.Image;
            x[2] = pictureBox4.Image;
            x[3] = pictureBox5.Image;
            x[4] = pictureBox6.Image;

            for (int i = 0; i < x.Length; i++)
            {
                pictureBox7.Image = (x);
                //Thread.Sleep(5000);
            }
        }

أرجو المساعدة في تحديد مصدر الخطأ

#2

إذا كان الخطأ هو أن الصور لا تظهر كما تحب فجرب تغيير اللوب بتايمر أو على الأقل Application.DoEvents() بعد تغيير الصورة مع توقف لمشاهدة الصورة الجديدة

أما إذا كان يتم رفع استثناء فالمرجو ارفاق نص رسالة الخطأ حتى تتضح الأمور.

1
#3

المشكلة أن البرنامج يتوقف عن الاستجابة لفترة قصيرة تم يظهر الصورة الأخيرة فقط

ما أريده هو ظهور مجموعة الصور واحدة تلو الأخرى كل 5 ثواني

عموما سأجرب ما اقترحته علي

و شكرا على سرعة الرد

#4

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

اؤيد رأي اخي محمد رضي

و ذلك لأن الكود لن يتوقف و لن يظهر تأثيره إلا بعد ان يصل الكود( و الذي ينفذ الكود سطر سطر) الي أخر سطر و هي ما بعد الloop

و خاصة ان ذلك كله يتم في Thread واحدة

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

و أداه الTimer يسهل لك هذا الأمر فهو يقوم بتنفيذ مجموعة سطور من الكود لكن في Thread أخر و يعيد تنفيذه بفاصل زمني تحدده انت في خاصية Interval الذي يقيس الزمن لاعادة تنفيذ الكود باملي ثانية millisecond

ان شاء الله عند تجربة ما اخبرك به سيأتي بنتيجة باذن الله

تقبل خالص تحياتي

#5

مشكور تفاعلكم يا اخوان

جربت التايمر و لكن دون جدوى لعدم معرفتي في التعامل معه

ارجو توضيح استخدامه بالكود بالاضافة لجعله يعيد الكرة كلما وصل الى الصورة الاخيرة

يعني حلقة مفرغة

و شكرا لكم

#6

ابدأ بزيادة التايمر من مربع الأدوات

- حدد خاصيتها Enabled على true

- حدد خاصيتها Interval على السرعة التي تريد مثلا 1000

- قم بحجز اشتراك في الحدث Tick للتايمر

- عرف متغير i من نوع int على مستوى Form# و حدد قيمته على 0

- عرف مصفوفة الصور x على مستوى Form#

- حدد الصور على المصفوفة في الحدث Load

- في دالة الحدث Tick, زد كود مثل هذا :

pictureBox7.Image = (x[i++]);
if(i > 4) i = 0;

بالتوفيق :)

#7

أستاذ محمد

عرفت المتغير i و المصفوفة x داخل مستوى الفورم

لكنه لا يستطيع قراءتهما من خارج الفورم

و هذا هو الكود

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Timers;



namespace WindowsFormsApplication13

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            int i = 0;
            Image[] x = new Image[5];


        }

        private void خروجToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void عنالمصممToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MessageBox.Show("محمد سيف ماهر عمر كردية 120096235","عن المصمم",MessageBoxButtons.OK);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Visible = true;
            label2.Visible = false;
            pictureBox1.Visible = false;
            pictureBox7.Visible = false;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Visible = false;
            label2.Visible = true; 
            pictureBox1.Visible = false;
            pictureBox7.Visible = false;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            pictureBox7.Visible = true;




        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            label1.Visible = false;
            label2.Visible = true;
            pictureBox1.Visible = false;
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            pictureBox7.Image = (x[i++]);
            if (i > 4) i = 0;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            x[0] = pictureBox2.Image;
            x[1] = pictureBox3.Image;
            x[2] = pictureBox4.Image;
            x[3] = pictureBox5.Image;
            x[4] = pictureBox6.Image;
        }





    }
}
#8

الأخ العزيز / seefmaher

السلام عليكم ورحمة الله وبركاته، ممكن تجرب الكود التالي

	private void button3_Click(object sender, EventArgs e)
        {
            Image[] x = new Image[5];
            x[0] = pictureBox2.Image;
            x[1] = pictureBox3.Image;
            x[2] = pictureBox4.Image;
            x[3] = pictureBox5.Image;
            x[4] = pictureBox6.Image;

            for (int i = 0; i < x.Length; i++)
            {
                pictureBox7.Image = (x);

		// ------------------------- Add this line

		this.Invalidate(true);

		// ---------------------------------------

                Thread.Sleep(5000);
            }
        }

أتمنى لك التوفيق والنجاح

#9

الاخوة الاكارم بارك الله فيكم

الحمد لله تم حل المشكلة

تعريف المصفوفة و المتغير كان في المكان الخاطئ و الحل كالتالي

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Threading; 
using System.Timers; 



namespace WindowsFormsApplication13 

{ 
    public partial class Form1 : Form 
    {
// التعريف هنا و ليس في الأسفل
         int i = 0; 
         Image[] x = new Image[5]; 


        public Form1() 
        { 
            InitializeComponent(); 

        } 

        private void خروجToolStripMenuItem_Click(object sender, EventArgs e) 
        { 
            this.Close(); 
        } 

        private void عنالمصممToolStripMenuItem_Click(object sender, EventArgs e) 
        { 
            MessageBox.Show("محمد سيف ماهر عمر كردية 120096235","عن المصمم",MessageBoxButtons.OK); 
        } 

        private void button1_Click(object sender, EventArgs e) 
        { 
            label1.Visible = true; 
            label2.Visible = false; 
            pictureBox1.Visible = false; 
            pictureBox7.Visible = false; 
        } 

        private void button2_Click(object sender, EventArgs e) 
        { 
            label1.Visible = false; 
            label2.Visible = true;  
            pictureBox1.Visible = false; 
            pictureBox7.Visible = false; 
        } 

        private void button4_Click(object sender, EventArgs e) 
        { 
            this.Close(); 
        } 

        private void button3_Click(object sender, EventArgs e) 
        { 
            pictureBox7.Visible = true; 




        } 

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 
        { 
            label1.Visible = false; 
            label2.Visible = true; 
            pictureBox1.Visible = false; 
        } 

        private void timer1_Tick(object sender, EventArgs e) 
        { 
            pictureBox7.Image = (x[i++]); 
            if (i > 4) i = 0; 
        } 

        private void Form1_Load(object sender, EventArgs e) 
        { 
            x[0] = pictureBox2.Image; 
            x[1] = pictureBox3.Image; 
            x[2] = pictureBox4.Image; 
            x[3] = pictureBox5.Image; 
            x[4] = pictureBox6.Image; 
        } 





    } 
}

شاكر لكم تعاونكم

1
#10

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

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