YetAnotherForum
სალამი სტუმარს ძებნა | აქტიური თემები | შესვლა | რეგისტრაცია

ფავორიტებში დამატება
Designer
levan omadze Offline
#1 Posted : Monday, March 14, 2011 12:42:08 PM

Rank: Member

Medals:

Groups: Registered
Joined: 6/11/2010
Posts: 14
Points: 48
Location: Agara

Thanks: 1 times
Was thanked: 0 time(s) in 0 post(s)
გამარჯობათ,

როგორ შეიძლება გავაკეთო Form1.Designer.cs გადავიტანო *xml ფაილში.
ყველა კონტროლერი.

მაგალითად ეს ყველა კონტროლერი აისახოს ფორმის გახსნის დროს.

მადლობა.

<Object type="System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="form1" children="Controls">
<Object type="System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="textBox2" children="Controls">
<Property name="Size">180, 20</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="Name">textBox2</Property>
<Property name="Location">132, 38</Property>
<Property name="TabIndex">2</Property>
</Object>
<Object type="System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="textBox1" children="Controls">
<Property name="Size">180, 20</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="Name">textBox1</Property>
<Property name="Location">132, 12</Property>
<Property name="TabIndex">1</Property>
</Object>
<Object type="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="button1" children="Controls">
<Property name="TabIndex">0</Property>
<Property name="Name">button1</Property>
<Property name="Size">75, 23</Property>
<Property name="UseVisualStyleBackColor">True</Property>
<Property name="Text">button1</Property>
<Property name="UseCompatibleTextRendering">True</Property>
<Property name="Location">12, 79</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
</Object>
<Object type="System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="button2" children="Controls">
<Property name="TabIndex">0</Property>
<Property name="Name">button2</Property>
<Property name="Size">75, 23</Property>
<Property name="UseVisualStyleBackColor">True</Property>
<Property name="Text">button2</Property>
<Property name="UseCompatibleTextRendering">True</Property>
<Property name="Location">20, 20</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
</Object>
<Property name="Icon">
<Binary>AAABAAEAICAQAAEABADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAD4iAAAAAAAAAAAAAAACIAHiIgAAAAAAAAAAAAACPiIAPiIAAAAAAAAAAAAAAj4iI+IiAAAAAAAAAAAAAAI+IgIeIgAAAAAAAMzMAAAAAiID4eHAAAAAAADOzAAAAj4iAD3hwAAAACDNzswAACPeIiPd4cAAAAAN3OwMAAACPeHj3eHAAAAADc7AwAAAAAHiAj3hwAAAzOzsDAAAAAI94cI94cAADd7OwMAAAAAj3eHj3d3AAA7s7AwAAAAAI93iPd4iIADezsDAAAAAAAI9493gzMzO7OwMAAAAAAACPj3cz///7u7AwAAAAAAAI+Pdz/7u7u7szAAAAAAAAj3j/P7u7u7u7MAAAAAAACPd49z+7u7u7uzAAAAAAAI93ePP7uwsLu7swAAAAAAj3d3jz+7uwsLu7MAAAAAAI93d3g/u7uwsLuzAAAAAACPd3cAP7uICwu7swAAAAAAj3dwjz8AB3Cwu7AAAAAAAI/3cIcwiIBwu7swAAAAAAAI/3CICPAIALuzAAAAAAAAAI//AIc/AAuzMAAAAAAAAAAI//CHg3+7MAAAAAAAAAAAAIiAiI+DMwAAAAAAAAAAAAAAAI//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+f////D///5gf//8AH//+AB///gAf/H4AH/h/AB/4fgAfwHwAH8B+AB/AfwAeAP4AHAH8ABwD/AAIB/4AAA/+AAAf/AAAP/gAAH/wAAB/4AAAf8AAAH/AAAB/wAAA/8AAAP/AAAD/4AAB//AAA//4AAf//AAf//+A////wf//w==</Binary>
</Property>
<Property name="Text">Log</Property>
<Property name="MaximizeBox">False</Property>
<Property name="Name">form1</Property>
<Property name="DataBindings">
<Property name="DefaultDataSourceUpdateMode">OnValidation</Property>
</Property>
<Property name="MinimizeBox">False</Property>
<Property name="ClientSize">324, 114</Property>
<Property name="FormBorderStyle">FixedSingle</Property>
</Object>
File Attachment(s):
DesignerHosting.rar (351kb) downloaded 7 time(s).
Log.rar (1kb) downloaded 5 time(s).
Sponsor  
 
Apex ltd. http://www.apex.ge
mike Offline
#2 Posted : Monday, March 14, 2011 3:15:32 PM

Rank: Newbie

Medals:

Groups: Registered
Joined: 3/22/2010
Posts: 8
Points: 27
Location: Tbilisi

Thanks: 0 times
Was thanked: 0 time(s) in 0 post(s)
თუ შენი კითხვა სწორად გავიგე და შენ გინდა ყველა ფორმა რომელსაც გამოაცხადებ ინიციალიზირებული იყოს შენს მიერ ჩამოწერილი კონტროლებით, მგონი ჯობია
რომ ააწყო ეგ ფორმა და შემდგომში ბაზურ კლასად გამოიყენო სხვა ფორმებისათვის.
keep an eye open
levan omadze Offline
#3 Posted : Monday, March 14, 2011 5:08:19 PM

Rank: Member

Medals:

Groups: Registered
Joined: 6/11/2010
Posts: 14
Points: 48
Location: Agara

Thanks: 1 times
Was thanked: 0 time(s) in 0 post(s)
არა კონტროლერების წერას არ ვგულისხმობ.

მე ვიგულისხმე ფორმის xml შენახვა თავის კონტროლერებით.

შეგიძლიათ ბმული ფაილი იხილოთ.
Drakelord Offline
#4 Posted : Saturday, March 19, 2011 1:20:39 PM

Rank: Newbie

Medals:

Groups: Registered, Administrators
Joined: 3/22/2010
Posts: 9
Points: 27
Location: Here

Thanks: 1 times
Was thanked: 1 time(s) in 1 post(s)
როგორც ჩანს ის პროექტი დიზაინის დროს აკეთებს სერიალიზაცია xml -ში და თქვენ გინდათ ამ ფორმე დესერიალიზაცია რანტაიმში დაახლოებით ასე
BB კოდი:

        private Form CreateFromXml(string path)
        {
            if (!System.IO.File.Exists(path))
                return null;
            System.Xml.Linq.XDocument doc = null;
            try
            {
                doc = System.Xml.Linq.XDocument.Load(path);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return null;
            }

            return LoadNodes(doc.Elements().First(),null) as Form;


        }

        private Control LoadNodes(System.Xml.Linq.XElement node, Control cnt)
        {
            if (node == null)
                return null;
            var typeatr = node.Attribute(System.Xml.Linq.XName.Get("type"));
            if(typeatr == null)
                return null;
            var type = Type.GetType(typeatr.Value);
            if (type == null)
                return null;
            var obj = System.Activator.CreateInstance(type) as Control;
            if (obj == null)
                return null;
            var properties = node.Elements(System.Xml.Linq.XName.Get("Property"));
            foreach (System.Xml.Linq.XElement pelem in properties)
                LoadProperty(pelem, obj);
            var nameatr = node.Attribute(System.Xml.Linq.XName.Get("name"));
            if (nameatr != null)
                obj.GetType().GetProperty("Name").SetValue(obj,nameatr.Value,null);
            var childsatr = node.Attribute(System.Xml.Linq.XName.Get("children"));
            if (childsatr != null)
            {
                var container = obj.GetType().GetProperty(childsatr.Value).GetValue(obj, null) as ControlCollection;
                if (container != null)
                {
                    var children = node.Elements(System.Xml.Linq.XName.Get("Object"));
                    foreach (System.Xml.Linq.XElement oelem in children)
                    {
                        var child = LoadNodes(oelem, obj);
                        if(child!=null)
                            container.Add(child);
                    }
                }
            }
            return obj;
        }

        private void LoadProperty(System.Xml.Linq.XElement pelem, Control obj)
        {
            if (pelem == null || obj == null)
                return;
           var propatr = pelem.Attribute("name");
           if (propatr == null)
               return;
           var prop = obj.GetType().GetProperty(propatr.Value);
            if(prop!=null)
                try
                {
                   var convertor = TypeDescriptor.GetConverter(prop.PropertyType);

                   if (convertor.CanConvertFrom(typeof(string)))
                       prop.SetValue(obj, convertor.ConvertFromInvariantString(pelem.Value), null);
                   else
                       MessageBox.Show("Cant convert property "+prop.Name);
                }
                catch { }
        }

ეს ნიმუში ეხლა ვერ გააკეთებს Complex Property-ების (DataBinding, Icon) დესერიალიზაციას, მაგრამ ამის მიღწევა შეიძლება თუ გაყვებით სერიალიზაციის პრინციპს თქვე პროექტში და ჩაამატებთ LoadProperty მეთოდში რეკურსიულ გამოძახებას.
იგივე პრინციპით შეგიძლიათ ბაზური ფორმის აწყობა რომელიც თავის კონსტრუქტორში გააკეთებს იგივეს
[](){}(); - You may think it's not, but this is completely valid C++0x lambda function.
Users browsing this topic
Guest
ფავორიტებში დამატება
Forum Jump  
თქვენ არ შეგიძლიათ დაწეროთ ახალი თემა ამ ფორუმში.
თქვენ არ შეგიძლიათ გასცეთ პასუხი, თემას, ამ ფორუმში .
თქვენ არ შეგიძლიათ წაშალოთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ ჩაასწოროთ თქვენი პოსტი ამ ფორუმში.
თქვენ არ შეგიძლიათ შექმნათ გამოკითხვა ამ ფორუმში.
თქვენ არ შეგიძლიათ ხმის მიცემა ამ ფოუმში.

YAFVision Theme by Jaben Cargman (Tiny Gecko)
Powered by YAF | YAF © 2003-2009, Yet Another Forum.NET
This page was generated in 0.136 seconds.