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

كيف اضيف Scrollbar الى ال Picturebox

بدأه الاخير زمانه في 20 نوفمبر 2009 · 7 رد · 987 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اريد اضافة Scrollbar الى ال picturebox

اولا قمت بأضافة panel و غيرت خاصية ال Autoscroll الى true

ثم اضفت picturebox داخل ال panel

و كتبت هذا الكود

String strFilename = openFileDialog1.FileName;
				bmpPicture = new Bitmap(strFilename);
 pictureBox1.BackgroundImage = bmpPicture;
				pictureBox1.Size = bmpPicture.Size;

لكن لم يظهر ال Scrollbar

هل يوجد خطأ ما ؟

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#2

طيب سؤال ثاني ،، هل ممكن ان ارسم الصورة داخل ال picture box

مثلا الكود التالي يرسم الصورة على الفورم ،، هل ممكن اجعله يرسمها داخل ال picture box

		private void Form1_Paint(object sender, PaintEventArgs e)
		{
			e.Graphics.DrawImage(bmpPicture, 150, 40);
		}

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#3

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

بالنسبة للسؤال الأول, استعمل الخاصية Image. مثال :

			// تحميل الصورة
			pictureBox1.Image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Tree.jpg");
			// تحديد حجم مربع الصورة بحجم الصورة المضهرة
			pictureBox1.Size = pictureBox1.Image.Size;
			// وضع الصورة في الركن حتى تكون السكرول صحيحة
			pictureBox1.Left = pictureBox1.Top = 0;

بالنسبة للسؤال الثاني, استعمل الدالة CreateGraphics لمربعات التحكم التي ترجع كائن من نوع Graphics جاهز للرسم على مربع التحكم :

			// الوصول إلى الكائن جرافيكس لمربع الصورة
			Graphics gfx = pictureBox1.CreateGraphics();
			// الرسم على مربع الصورة
			gfx.DrawImage(img);
			// تحرير موارد النظام
			gfx.Dispose();
#4

مشكور اخي محمد ،، تنفذ الامر تمام لكن هناك مشكلة فحين احرك ال scrollbar تختفي اجزاء من الصورة.

الكود اصبح كالتالي

   String strFilename = "";
		private void btnOpen_Click(object sender, EventArgs e)
		{
			Bitmap tmp;

			if (openFileDialog1.ShowDialog() == DialogResult.OK)
			{
   strFilename = openFileDialog1.FileName;

 tmp = new Bitmap(strFilename);
   bmpPicture = new Bitmap(tmp, 600, 400);
 pictureBox1.Width = 1000;
				pictureBox1.Height = 1000;
Invalidate();

}


		private void Form1_Paint(object sender, PaintEventArgs e)
		{

			if (strFilename != "")
			{
				Graphics gfx = pictureBox1.CreateGraphics();

				gfx.DrawImage(bmpPicture, 0, 0);

				gfx.Dispose();
			}
}

انا اريد ان اعمل بعض العمليات على الصورة لذا اريد استخدام Graphics والا كان ممكن اعرض الصورة مباشرة بأستخدام

pictureBox1.Image = Image.FromFile(strFilename);

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#5

بالنسبة للعمليات التي تريد القيام بها على الصورة, لما لا ترسم مباشرة على الصورة مرة واحدة و تبقى هذه التغييرات بدون الحاجة إلى إعادة رسمها على مربع الصورة في الحدث Paint :

			// الوصول إلى كائن الرسم على الصورة نفسها و ليس مربع الصورة
			Graphics gfx = Graphics.FromImage(pictureBox1.Image);
			// الرسم على الصورة
			gfx.DrawString("qkldjfldksjfdfkj", Font, Brushes.Blue, 100.0f, 100.0f);
			// تحرير موارد النظام
			gfx.Dispose();

الكود أعلاه يمكنك تنفيذه وقت تحميل الصورة و لن تحتاج إلى إعادة العملية في الحدث Paint.

اقتباس
تنفذ الامر تمام لكن هناك مشكلة فحين احرك ال scrollbar تختفي اجزاء من الصورة.

لم أفهم ما ترمي إليه بالضبط. هو بما أن مربع الصورة أكبر من مربع Panel فبديهي أن تختفي أجزاء من الصورة عند سحب أحد scroll bars. إذا كنت مخطئا, أتمنى أن توضح أكثر ما هي المشكلة.

#6

شكرا اخي على تواصلك.

البرنامج في المرفقات ، راح يتوضح لك الامر.

جرب تفتح صورة ثم بعد ذلك حرك ال scrollbar

bitmap.rar

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#7

المشكلة أخي الكريم كانت في رسم الصورة داخل دالة الحدث Paint للنموذج حيث أنك عندما تحرك السكرول بار فهذا الحدث لا يحدث.

قمت بتغيير كود رسم الصورة إلى دالة الحدث Paint لمربع الصورة و لم تعد هناك مشاكل.

بالتوفيق :)

bitmap.rar

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…