السلام عليكم ورحمه اللله وبركاته
عندي مشكله واقف فيها ومحتاج اي حد يساعد
انا عاوز اخزن user control مثل textbox (شكل ال user control وليس القيمه الي فيه )في xml file
وعند الضغط علي زرار يتم عمل load للtextbox
ياريت حد يساعدني في الموضوع ده
السلام عليكم ورحمه اللله وبركاته
عندي مشكله واقف فيها ومحتاج اي حد يساعد
انا عاوز اخزن user control مثل textbox (شكل ال user control وليس القيمه الي فيه )في xml file
وعند الضغط علي زرار يتم عمل load للtextbox
ياريت حد يساعدني في الموضوع ده
ايه مافيش حد عارف
انا محتاج الموضوع ده ضروري:(:(
طب حد بفكر معايه
انا عمال افكر ومش لاقي حل:(
وعليكم السلام ورحمة الله وبركاته.
وضح يا أخي أكثر, ماذا تقصد بحفظ الـ user control مثل الـ text Box ؟ وتريد حفظ شكلها ؟ فماذا تقصد بالشكل , وبعد هذا تريد عند الضغط على زر .. يتم عمل Load للـ text box ؟ فما أدخل هذا بهذا وذاك بذاك ؟!
أنا لم أفهم شيئا :blink:
انا إلي فهمته انك عاوز تحتفض بالخصائص بتاعته
ولما تعوزها تبدأ تكوينها تاني
صح الكلام دا
وفوق كل ذي علم عليم
والله اعلم
الملك ------>محمد ابو تريكة

على اسم مصر التاريخ يقدر يقول ما شاء
أنا مصر عندي أحب وأجمل الأشياء
باحبها وهي مالكه الأرض شرق وغرب
وباحبها وهي مرميه جريحة حرب
باحبها بعنف وبرقة وعلى استحياء
واكرهها وألعن أبوها بعشق زي الداء
واسيبها واطفش في درب وتبقى هي ف درب
وتلتفت تلقيني جنبها في الكرب
والنبض ينفض عروقي بألف نغمة وضرب
على اسم مصر
السلام عليكم ورحمه الله وبركاته
اسف علي عدم وضوح السؤال :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
نعم , اقرأ هذا ربما يفيدك :
فأنت لا تحتاج دائما إلى تسجيل جميع المعلومات عن الـ Controls فيكفيك فقط تسجيل بعض المعلومات التي تعتبرها هامة ( تختلف الأهمية حسب طبيعة البرنامج والـ Control ) فربما ما يكفيك فقط هو الـ Text والـ Size والـ Position والخ. فقم بتحديد المعلومات التي تريدها واستخدم مثلا XmlTextWriter لكتابتها فهو سهل للغاية واستخدم XmlTextReader لقراءة الملف ومن ثم اسناد القيم للـ Control أثناء الـ Loading.
وعموما أنا لا أدري طبيعة برنامجك, لكن أنصحك أن تقرأ أولا عن الـ DynamicProperties الموجودة في الفيجوال ستوديو أو/و عن الـ appSettings الموجودة في ملفات الـ config الخاصة بالبرامج مع كلاس AppSettingsReader, فربما تفي بالغرض هذه الأشياء وتوفر عليك الوقت, فهي مختصه بحفظ قيم الخواص في ملف الـ config واسترجاعها أثناء التشغيل.
شكر اخي معتز علي الرد هذا ما كنت ابحث عنه
بس ياريت توضح مثال بيسط كيف اكتب الخواص ده داخل xml file بأستخدام xmltextwriter
السلام عليكم
ياريت لو سمحت توضح ازاي استخدم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>
السلام عليكم ورحمه الله وبركاته
انا عملت محاوله كده صغيره بس بيطللع error
ياريت اي حد او الاخ معتز يجربوا البرنامج ويفكروا معايه في حل للمشكله ده
او ممكن نناقش افكار مختلفه غير الي انا جربتها
بس اي حد يكون متابع معايه
علشان محتاج المضوع ده ضروري هيقف عليه باقي البرنامج كله
وعليكم السلام ورحمة الله وبركاته.
أنا كتبت لك مثال باستخدام الـ 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>
السلام عليكم
الحمد لله نجحت في ان اجمع كل ال controls الي موجوده علي الفورم واحولها الي xml file
واصبح شكل الملف كالاتي
ولكن الان انا اريد ان احول الفيل ده الي arraylist
لكي استخدم ال arraylist في اعاده خلق ال controls
فهل توجد طريقه لتحويل ال xml ال array list
تم تعديل هذه المشاركة بواسطة akrm في 4 فبراير 2007 في 00:19
السلام عليكم
دلوقتي انا عملت 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.
حد يعرف السبب
او حد يعرف المشكله فين
ياريت اي حد يجاوبني او الاخ معتز يشارك برأيه
كيفك اخ 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...................
السلام عليكم ورحمه الله وبركاته
الف شكر اخيbsbs
تسلم ياغالي:)
>>>بشر هل عمل الكود
هذا الموضوع مغلق.