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

save controls in xml file

مغلق
بدأه akrm في 28 يناير 2007 · 15 رد · 1,299 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي مشكله واقف فيها ومحتاج اي حد يساعد

انا عاوز اخزن user control مثل textbox (شكل ال user control وليس القيمه الي فيه )في xml file

وعند الضغط علي زرار يتم عمل load للtextbox

ياريت حد يساعدني في الموضوع ده

#2

ايه مافيش حد عارف

انا محتاج الموضوع ده ضروري:(:(

#3

طب حد بفكر معايه

انا عمال افكر ومش لاقي حل:(

#4

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

وضح يا أخي أكثر, ماذا تقصد بحفظ الـ user control مثل الـ text Box ؟ وتريد حفظ شكلها ؟ فماذا تقصد بالشكل , وبعد هذا تريد عند الضغط على زر .. يتم عمل Load للـ text box ؟ فما أدخل هذا بهذا وذاك بذاك ؟!

أنا لم أفهم شيئا :blink:

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#5

انا إلي فهمته انك عاوز تحتفض بالخصائص بتاعته

ولما تعوزها تبدأ تكوينها تاني

صح الكلام دا

وفوق كل ذي علم عليم

والله اعلم

الملك ------>محمد ابو تريكة

abutreika.jpg

على اسم مصر التاريخ يقدر يقول ما شاء

أنا مصر عندي أحب وأجمل الأشياء

باحبها وهي مالكه الأرض شرق وغرب

وباحبها وهي مرميه جريحة حرب

باحبها بعنف وبرقة وعلى استحياء

واكرهها وألعن أبوها بعشق زي الداء

واسيبها واطفش في درب وتبقى هي ف درب

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

والنبض ينفض عروقي بألف نغمة وضرب

على اسم مصر

#6

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

اسف علي عدم وضوح السؤال :rolleyes:

وهذا هو السؤال بصيغه اخري :)

هو ان اخزن الكل الخصائص بتاعه اي control في فيل xml

مثل

button1 = new System.Windows.Forms.Button();
   button1.Location = new System.Drawing.Point(216, 32);

		 button1.Name = "button1";
		 button1.Size = new System.Drawing.Size(112, 23);
		 button1.TabIndex = 1;
		 button1.Text = "button1";

وعند عمل load للفيل ده يتم خلق هذا الكنترول

هذا كل شيئ :wacko:

ارجوا المساعده

تم تعديل هذه المشاركة بواسطة akrm في 30 يناير 2007 في 22:37

#7

نعم , اقرأ هذا ربما يفيدك :

/index.php?showtopic=109882

فأنت لا تحتاج دائما إلى تسجيل جميع المعلومات عن الـ Controls فيكفيك فقط تسجيل بعض المعلومات التي تعتبرها هامة ( تختلف الأهمية حسب طبيعة البرنامج والـ Control ) فربما ما يكفيك فقط هو الـ Text والـ Size والـ Position والخ. فقم بتحديد المعلومات التي تريدها واستخدم مثلا XmlTextWriter لكتابتها فهو سهل للغاية واستخدم XmlTextReader لقراءة الملف ومن ثم اسناد القيم للـ Control أثناء الـ Loading.

وعموما أنا لا أدري طبيعة برنامجك, لكن أنصحك أن تقرأ أولا عن الـ DynamicProperties الموجودة في الفيجوال ستوديو أو/و عن الـ appSettings الموجودة في ملفات الـ config الخاصة بالبرامج مع كلاس AppSettingsReader, فربما تفي بالغرض هذه الأشياء وتوفر عليك الوقت, فهي مختصه بحفظ قيم الخواص في ملف الـ config واسترجاعها أثناء التشغيل.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#8

شكر اخي معتز علي الرد هذا ما كنت ابحث عنه

بس ياريت توضح مثال بيسط كيف اكتب الخواص ده داخل xml file بأستخدام xmltextwriter

#9

السلام عليكم

ياريت لو سمحت توضح ازاي استخدمxmltext writerلحفظ الخواص بتاعه ال control

لكي تظهر بالشكل التالي

 </control>
		   <control type="System.Windows.Forms.Button">
			   <position>
				  <height>23</height>
				  <width>75</width>
				  <top>144</top>
				  <left>64</left>
			  </position>
			  <controls />
			  <name>button1</name>
			  <text>button1</text>
			  <tabIndex>1</tabIndex>
			  <event-handlers>
				   <eventInfo eventName=
"Click" eventHandler="button1_Click" />
				   <eventInfo eventName=
"EnabledChanged" eventHandler="button1_
EnabledChanged" />
			  </event-handlers>
#10

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

انا عملت محاوله كده صغيره بس بيطللع error

ياريت اي حد او الاخ معتز يجربوا البرنامج ويفكروا معايه في حل للمشكله ده

او ممكن نناقش افكار مختلفه غير الي انا جربتها

بس اي حد يكون متابع معايه

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

WindowsApplication8.rar

#11

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

أنا كتبت لك مثال باستخدام الـ XmlTextWriter بـ Schema تشبه ما تريدها باعتبار أن الزر اسمه yourButton :

XmlTextWriter yourWriter = new XmlTextWriter("yourFile.xml",System.Text.Encoding.Unicode);

 //start document
yourWriter.WriteStartDocument();

//start <control...
yourWriter.WriteStartElement("control");

//write type attribute in the <control> element
yourWriter.WriteAttributeString("type",yourButton.GetType().FullName);

//write name,text and tabindex
yourWriter.WriteElementString("name",yourButton.Name);
yourWriter.WriteElementString("text",yourButton.Text);
yourWriter.WriteElementString("tabIndex",yourButton.TabIndex.ToString());

// start location element
yourWriter.WriteStartElement("location");

// write x and y
yourWriter.WriteElementString("x",yourButton.Location.X.ToString());//X
yourWriter.WriteElementString("y",yourButton.Location.Y.ToString());//Y

//end location
yourWriter.WriteEndElement();


//start size
yourWriter.WriteStartElement("size");

//write width and height
yourWriter.WriteElementString("width",yourButton.Width.ToString());//width
yourWriter.WriteElementString("height",yourButton.Height.ToString());//height

//end size
yourWriter.WriteEndElement();

//end <control>
yourWriter.WriteEndElement();

//end document
yourWriter.WriteEndDocument();

//close the XmlWriter
yourWriter.Close();

الناتج سيكون كالتالي ( وضعت المسافات الفراغة لكي تسهل القراءة, شاهد الملف الخارج في الـ IE أفضل ) :

 <?xml version="1.0" encoding="utf-16" ?> 

<control type="System.Windows.Forms.Button">

  <name>Button1</name> 
  <text>Ok</text> 
  <tabIndex>3</tabIndex> 

  <location>
	   <x>176</x> 
	   <y>208</y> 
  </location>

  <size>
	  <width>75</width> 
	  <height>23</height> 
  </size>

</control>

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#12

السلام عليكم

الحمد لله نجحت في ان اجمع كل ال controls الي موجوده علي الفورم واحولها الي xml file

واصبح شكل الملف كالاتي

[code ]
<?xml version="1.0" standalone="yes"?>
<!--Sample for for exercising PFM_StateData namespace-->
<states_StateDataForm_DemoForm>
<Attributes>
<Type>System.Windows.Forms.TextBox</Type>
<Name>txtSummary</Name>
<Width>358</Width>
<Height>51</Height>
<Top>16</Top>
<Left>12</Left>
</Attributes>
<Attributes>
<Type>System.Windows.Forms.Label</Type>
<Name>lblOfText</Name>
<Width>96</Width>
<Height>13</Height>
<Top>16</Top>
<Left>70</Left>
</Attributes>
<Attributes>
<Type>System.Windows.Forms.TextBox</Type>
<Name>textBox1</Name>
<Width>249</Width>
<Height>20</Height>
<Top>10</Top>
<Left>119</Left>
</Attributes>
<Attributes>
<Type>System.Windows.Forms.Label</Type>
<Name>lblCombo</Name>
<Width>96</Width>
<Height>13</Height>
<Top>13</Top>
<Left>94</Left>
</Attributes>
<Attributes>
<Type>System.Windows.Forms.Label</Type>
<Name>label3</Name>
<Width>441</Width>
<Height>13</Height>
<Top>7</Top>
<Left>142</Left>
</Attributes>
<Attributes>
<Type>System.Windows.Forms.Label</Type>
<Name>lblRichText</Name>
<Width>81</Width>
<Height>13</Height>
<Top>12</Top>
<Left>164</Left>
</Attributes>

ولكن الان انا اريد ان احول الفيل ده الي arraylist

لكي استخدم ال arraylist في اعاده خلق ال controls

فهل توجد طريقه لتحويل ال xml ال array list

تم تعديل هذه المشاركة بواسطة akrm في 4 فبراير 2007 في 00:19

#13

السلام عليكم

دلوقتي انا عملت LIST اشيل فيها ال XML FILE

عن طريق for

GuiEngine.Lists.AttributList attributes = new GuiEngine.Lists.AttributList();

			System.Xml.XmlNodeList listAttributes = xmlElement.GetElementsByTagName("Attributes");
			for (int i = 0; i < listAttributes.Count; i++)
			{
				if (listAttributes.ParentNode == xmlElement)
				for (int j = 0; j < listAttributes.ChildNodes.Count; ++j)


					attributes.Add(listAttributes.ChildNodes[j].Name, listAttributes.ChildNodes[j].InnerText);

وهذا هو شكل الفيل

<?xml version="1.0" standalone="yes"?>
<!--Sample for for exercising PFM_StateData namespace-->
<states_StateDataForm_DemoForm>
	  <Attributes>
			<Type>TextBox</Type>
			<Name>txtSummary</Name>
			<Width>358</Width>
			<Height>51</Height>
			<Top>16</Top>
			<Left>12</Left>
	  </Attributes>
	  <Attributes>
			<Type>Label</Type>
			<Name>lblOfText</Name>
			<Width>96</Width>
			<Height>13</Height>
			<Top>16</Top>
			<Left>70</Left>
	  </Attributes>

وبالفعل بيتم تخزين اول جزئ من الفيل عندما تكون ال i=0 الي هو ده

	  <Attributes>
			<Type>TextBox</Type>
			<Name>txtSummary</Name>
			<Width>358</Width>
			<Height>51</Height>
			<Top>16</Top>
			<Left>12</Left>
	  </Attributes>

لكن عندما تكون ال i=1

بيظهر exaption

Argument exception was un handled

An entry with the same key already exists.

حد يعرف السبب

او حد يعرف المشكله فين

ياريت اي حد يجاوبني او الاخ معتز يشارك برأيه

#14

كيفك اخ akrm.....

......باابداية اني راح اعتمد على هذا Xml

<?xml version="1.0" standalone="yes"?>
<!--Sample for for exercising PFM_StateData namespace-->
<states_StateDataForm_DemoForm>
	  <Attributes>
			<Type>TextBox</Type>
			<Name>txtSummary</Name>
			<Width>358</Width>
			<Height>51</Height>
			<Top>16</Top>
			<Left>12</Left>
	  </Attributes>
	  <Attributes>
			<Type>Label</Type>
			<Name>lblOfText</Name>
			<Width>96</Width>
			<Height>13</Height>
			<Top>16</Top>
			<Left>70</Left>
	  </Attributes>

.......بالبداية تعمل Class جديد لنفرض اسمه Attributes :

Public Class Attributes
 {
   public object controlType;
   public string name;
   public int width;
   public int height;
   public int top;
   public int left;
 {

>>>والأن تبدا بقراءة الXml file باستخدام XmlReader ...ثم نخخزنها في List<>(Generics) ...

......

public void ReadXmlAttributes()
		 {
		 XmlReader rdr= XmlReader.Create("@"D:\xml1.xml");
		 List<Attributes> Mylist= new List<Attributes>();
		 Attributes atrbs= null;
		 while(rdr.Read())
		   {
			   if(rdr.NodeType==XmlNodeType.Element)
			  {
				   if(rdr.Name=="Attributes")
				   {
					atrbs=new Attributes();
				   }
				   if(rdr.Name=="Type")
				   {
					   atrbs.controlType=rdr.ReadElementContentAsObject();
				   }
				   if(rdr.Name=="Name")
				   {
					   atrbs.name=rdr.ReadElementContentAsString();
				   }
				   if(rdr.Name=="Width")
				   {
					   atrbs.width=rdr.ReadElementContentAsInt();
				   }
				   if(rdr.Name=="Height")
				   {
					   atrbs.height=rdr.ReadElementContentAsInt();
				   }
				   if(rdr.Name=="Top")
				   {
					   atrbs.top=rdr.ReadElementContentAsInt();
				   }
				   if(rdr.Name=="Left")
				   {
					   atrbs.left=rdr.ReadElementContentAsInt();
				   }
			   }

			 if(rdr.NodeType==XmlNodeType.EndElement && rdr.Name=="Attributes")
			 {
				 Mylist.Add(atrbs);
			 }
		 }
		}

>>والآن يمكنك اخذ المعلومات من Mylist كالتالي :

foreach(Attributes myAtrb in Mylist)
			{
				if(myAtrb.controlType is System.Windows.Forms.TextBox)
				{
					TextBox txbx=new TextBox();
					txbx.Name=myAtrb.name;
					txbx.Width=myAtrb.width;
					txbx.Height=myAtrb.height;
					txbx.Left=myAtrb.left;
					txbx.Top=myAtrb.top;
				}
			}

.....ويجب استخدام .Net 2.0 ...مع

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;

..اتمنى وصلتك الفكرة

........................Keep The Faith...................

#15

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

الف شكر اخيbsbs

تسلم ياغالي:)

#16

>>>بشر هل عمل الكود

هذا الموضوع مغلق.

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