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

عرض الفورم المفتوحه في كل مره يعمل بها البرنام

بدأه mostyam في 15 أغسطس 2009 · 17 رد · 1,248 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

انا عندي برنامج بيعمل على انه mdi

عايز الفورم اللي سابها المستخدم مفتوحه في تاني مره يشغل البرنامج يلقيها مفتوحه برضه

هل لها طريقه سهله للعرض

ان فكرت في اني احفظ اسامي الفورم المفتوحه في ملف نصي وبعدين احملها ... لكن ملقتش داله في vb.net 208

تعمل loop على كل الفورم اللي في المشروع اللي اعرفه انه بتعمل loop in openforms

لو في طريقه للحل غير بتاعتي يرجى تكرما اعلامي بها .. وان لا فارجوا اخباري بداله تبحث في جميع الفورم زي ما في فيجوال بيسك كده

for each frm in forms

طاب نهاركم بازن الله

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#2

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

الأمر سهل طالما أنك تستخدم mdi ,, يمكنك استخدام هذه الحلقة

		For Each frm As Form In Me.MdiChildren

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#3

شكرا سيد ghost2010 على اهتمامك ولكن ان استخدم فورم mdi من خلال الكود فهل فيه صفه في prtperties اسمها ismdi لجعل الفورم mdi بنفسها بدلا من الكود لاني ملقتشي في الخصائص

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#4

توجد خاصية IsMdiContainer للفورم تحدد إذا كانت الفورم عبارة MdiParent أم لا

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#5

اوكي اخي جوست لكن ازاي اعرف ان الباقي child

هل فيه خصيه تعرفني ان الباقي child

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#6

أخى الفاضل ,, الخاصية MdiChildren التابعة للـMdiParent تعود بجميع الشاشات المفتوحة التى تتبع هذه الشاشة الرئيسية أى الشاشات الأبناء فلو كانت لديك شاشة مفتوحة لكنها ليست MdiChild فلن تجدها فى المجموعة التى تعود بها هذه الخاصية

أما إذا كنت تقصد أن تجعل الفورم MdiChild وليس MdiParent عن طريق نافذة الخصائص وليس من خلال الكود فلا توجد خاصية لذلك فلابد من استخدام الكود

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#7

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

والاهتمام لكن: قل لي ان حصلت على اسامي الفورم ووضعتهم في txt

ما هيه الطريقه التي اعرف بيها الفورم تى تأخذ هذا الاسم المخزن لدي وتأخذ صفتها

لكي اوضح اكثر

في الفيجوال 6 كنت بقوله كده

dim frm as new form

for each frm in forms

if frm.name=text1.text then frm.show

next

حيث ان text1 تاخد الاسم المسجل لدي في txt

فكيف اعملها في dot net

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#8

حسنا ,, الذى فهمته أن لديك برنامج يتكون من شاشة رئيسية MdiParent وشاشات فرعية MdiChildren وتريد عندما يفتح المستخدم البرنامج يجد الشاشات التى تركها مفتوحة كما كانت ,, أتمنى أن يكون كلامى صحيح وإن لم يكن كذلك فأتمنى أن تتحملنى قليلا

قلنا أنك لكى تحصل على قائمة الشاشات المفتوحة فعليك استخدام الخاصية MdiChlidren ,, الكود التالى يقوم بحفظ أسماء الشاشات المفتوحة فى ملف بجوار الملف التنفيذى بإسم open_forms.txt

		Dim stw As New IO.StreamWriter("open_forms.txt", False, System.Text.Encoding.Default)
		stw.AutoFlush = True
		For Each frm As Form In Me.MdiChildren
			stw.WriteLine(frm.Name)
		Next
		stw.Close()

الآن نريد قراءة هذا الملف وعلى أساس البيانات المحفوظة بداخله نقوم بفتح هذه الشاشات

يمكنك عمل ذلك بالطريقة السهلة أو الصعبة كما تحب

الطريقة السهلة طويلة خصوصا مع زيادة عدد الشاشات وهى باستخدام جمل الشرط كالتالى

		Dim str As New IO.StreamReader("C:\open_forms.txt", System.Text.Encoding.Default)
		Dim formName As String, frm As Form
		While Not str.EndOfStream
			formName = str.ReadLine
			Select Case formName
				Case "Form1"
					frm = New Form1
				Case "Form2"
					frm = New Form2
				Case "Form3"
					frm = New Form3
				Case Else
					frm = Nothing
			End Select

			If frm IsNot Nothing Then
				frm.MdiParent = Me
				frm.Show()
			End If
		End While

الطريقة الصعبة باستخدام الانعكاس أو Reflection لو أردتها سأضعها لك

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#9

انا شاكر جدا على اهتمامك المتزايد

وحقيقي كم انت على مستوى رائع . وفهمك عن فكرتي صحيح

لكن بهذه الطريقه وكتر فرم البرنامج التي تزيد عن 50 فورمه فسيكون الامر معقد

لذا اريدك ان تخبرني بالطريقه الاصعب كما تفضلت في ذكرها بهذا الاسم

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#10

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

أولا أشكرك على ثقتك فى وأتمنى أن أكون عند حسن ظنك

الطريقة الثانية كما ذكرت ستكون باستخدام فئات الانعكاس أو الـReflection وهى الطريقة الصعبة ليس فى الكود لكن صعبة لأنه لا يوجد الكثير ممن يتعامل مع هذه الفئات لكن الكود سيكون سهلا وبسيطا بإذن الله

هذا هو الكود

		Dim str As New IO.StreamReader("open_forms.txt", System.Text.Encoding.Default)
		Dim formName As String, frm As Form
		Dim ass As Assembly = [Assembly].GetExecutingAssembly
		While Not str.EndOfStream
			formName = str.ReadLine
			frm = Nothing
			If formName <> "" Then
				frm = ass.CreateInstance(Application.ProductName & "." & formName)
			End If

			If frm IsNot Nothing Then
				frm.MdiParent = Me
				frm.Show()
			End If
		End While

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#11

شكرا مجددا اخي جوست .. لقد عجزت عن ذكر هذه الكلمه مجددا لعدم توفيتها ما اشعر

ولكن لي طلب

frm = ass.CreateInstance(Application.ProductName & "." & formName)

الكود ده دائما بيرجع nothing

فما السبب

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#12

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

التعامل مع فئات الانعكاس له قوانين تحكمه ,, الكود الذى وضعته لك يعمل إذا كانت الشاشات موجودة داخل نفس المشروع التنفيذى أما إذا كانت الشاشات موجودة فى مشروع آخر فالكود سيختلف قليلا ,,

انتبه معى جيدا

لنفرض أن الحل أو الـSolution يحتوى على مشروعين أحدهما من النوع Windows Application وهو الذى يحتوى على الشاشة الرئيسية للبرنامج والآخر من النوع Class Library وهو الذى يحتوى على باقى الشاشات (وليكن إسمه GUI)

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

		Dim str As New IO.StreamReader("open_forms.txt", System.Text.Encoding.Default)
		Dim formName As String, frm As Form
		Dim ass As Assembly = [Assembly].LoadFrom("GUI.dll")
		While Not str.EndOfStream
			formName = str.ReadLine
			frm = Nothing
			If formName <> "" Then
				frm = ass.CreateInstance("GUI." & formName)
			End If

			If frm IsNot Nothing Then
				frm.MdiParent = Me
				frm.Show()
			End If
		End While

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

تم تعديل هذه المشاركة بواسطة GHOST2010 في 16 أغسطس 2009 في 18:02

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#13

بص يا فندم انا عندي اكتر من فورم

ولكن كل مجموعه بتخدم حاجه حتططهم في فولدر خاص بيهم بمعنى النوع مثلا فيه فورم ( اضافة نوع = واضافة مجموعه للنوع - واضافة مخزن للنوع ) وهكذا بالنسبه للعمال والموردين

دا كل اللي انا عامله

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#14

أخى الكريم ,, كم عدد المشاريع التى يحتويها الـSolution وهل الشاشات موجودة فى نفس المشروع الذى يحتوى على الشاشة الرئيسية أم فى مشروع آخر؟؟

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

فى انتظارك ,,

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#15

تفضلي اخي هذا سورس مبسط

كل ما اريده هو ان الفورم المفتوحه تظل مفتوحه بعد غلق البرنامج وفاتحه

سوري نسيت اقوله تحميل

WindowsApplication1.rar

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#16

سيدي العزيز لم اعرف ماذا اقول لك

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

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

Dim str As New IO.StreamReader("frmrun.txt", System.Text.Encoding.Default)

Dim formName As String

While Not str.EndOfStream

formName = str.ReadLine

Dim a As [Assembly] = [Assembly].GetEntryAssembly()

Dim objType() As Type = a.GetTypes()

For Each t As Type In objType

If t.Name.ToLower() = formName Then

Dim frm As Form = CType(Activator.CreateInstance(t), Form)

frm.Show()

frm.MdiParent = Me

frm.Refresh()

End If

Next

End While

ولكن عايز اخلي stream يقرأ من الاخر مش من الاول لان الفورم بتيجي في عكس ترتيبها ارجوا التكرم بهذه كمان

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

#17

أخى الكريم ,, الخطأ فى كود الشاشة Form1 فى هذا الجزء

	Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		GetFormByName("addkind").Show()
	End Sub

حيث أنك تنشئ كائن جديد من الشاشة التى تحمل اسم addkind ولا توجد شاشة فى المشروع بهذا الاسم ,, غير الكود إلى هذا الشكل وجرب مرة أخرى ستجده يعمل بدون مشاكل

	Private Sub Button1_Click_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
		GetFormByName("Form2").Show()
	End Sub

عدله وطبق الفكرة على مشروعك ستجد الحل إن شاء الله وأنا تحت أمرك لو واجهتك أى مشاكل أخرى ,,

-------------------------------------------

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

بالنسبة لقراءة الملف من النهاية فيمكن ذلك

هذا هو الكود السابق باستخدام المصفوفات لعكس البيانات

		If IO.File.Exists("open_forms.txt") Then
			Dim str As New IO.StreamReader("open_forms.txt", System.Text.Encoding.Default)
			Dim buffer As String = str.ReadToEnd
			str.Close()
			Dim formNames() As String = Split(buffer, vbNewLine)
			Array.Reverse(formNames)
			Dim ass As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
			Dim formName As String = "", frm As Form = Nothing
			For Each formName In formNames
				If formName <> "" Then
					frm = ass.CreateInstance(Application.ProductName & "." & formName)
					If frm IsNot Nothing Then
						frm.MdiParent = Me
						frm.Show()
					End If
				End If
			Next
		End If

تم تعديل هذه المشاركة بواسطة GHOST2010 في 16 أغسطس 2009 في 18:49

إن قلت قال الله قال رسولـه همزوك همز المنكر المتعالي
أو قلت قد قال الصحابة والألـى تبعاً لهم بالقول والأعمال
أو قلت قـال الشافعي وأحمد و أبو حنيفة والإمام الغالي
صدوا عن وحي الإله ودينـه واحتالوا على حرام الله بالإحلال
يا أمةً لعبت بدين نبيها كتلاعب الصبيان في الأوحال
حاشا رسول الله يحكم بالهوى تلك إذاً حكومة الضلال

feed.1.gif

#18

لا اجد كلمات لاقولها لك ولكن

الصمت في حرم الجمال جمال وانا اختار الصمت للتعبير عن شعوري

بالمناسبه انا ضيفتك عندي على الياهو دا لو حبيت

ملْءُ السنابل تنحني بتواضع **** والفارغات رؤوسهن شوامخ

أقوى برنامج محاسبي لعام 2012

www.itdoodle.com

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

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

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

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

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