代码之家  ›  专栏  ›  技术社区  ›  Gal Goldman

用c语言中的xml文件创建gui#

  •  2
  • Gal Goldman  · 技术社区  · 14 年前

    如何使用c中的xml文件创建自动gui? 我应该为文件编写一个解析器并为文件的结构定义一种“协议”吗?在解析之后-手动创建gui控件(与文件中的数据相对应)?

    还是有更好的办法?在.NET环境中是否有工具或内置代码可以自动为我执行此操作?

    (我目前正在使用win表单,但我愿意考虑任何其他技术——只要它在mono中受支持,因为代码也应该可以移植到linux中)。

    5 回复  |  直到 14 年前
        1
  •  4
  •   Bozhidar Batsov    14 年前

    Glade 是一个rad工具,可以为gtk+工具包和gnome桌面环境快速轻松地开发用户界面。

    glade中设计的用户界面保存为xml,通过使用gtkbuilder gtk+对象,应用程序可以根据需要动态加载这些界面。

    通过使用GtkBuilder,GLADE XML文件可以用在许多编程语言中,包括C、C++、C**、瓦拉河、Java、Perl、Python等。

    我用过格拉德和C,我对结果很满意。格拉德可能不会直接适合你,但你至少可以从中借鉴一些想法。

        2
  •  1
  •   Skizz    14 年前

    如果您要使用XML,那么您应该真正了解XML模式—这些是描述XML文件内容的XML文件,devstudio(和其他编辑器)可以读取它们并执行自动完成,这很有用。此外,还可以根据架构验证XML,以确保内容不包含结构错误。

    另外,正如paul所写,xaml是一个xml系统,但是您需要使用wpf框架来解析它。

        3
  •  0
  •   Paul Creasey    14 年前

    wpf使用xml定义大多数东西,称为xaml。

        4
  •  0
  •   Andrey Taptunov    14 年前

    “在.NET环境中是否有工具或内置代码可以自动为我执行此操作?”

    在code.google.com上,xulrunner周围有各种各样的.net包装。

        5
  •  0
  •   AllSolutions    8 年前

    退房:

    https://social.msdn.microsoft.com/Forums/en-US/554eefae-429f-495c-aee0-b2e971494ed0/how-do-i-create-a-gui-which-reads-xml-file-and-adds-controls-to-it-at-runtime?forum=csharplanguage

    using System;
    using System.Drawing;
    using System.Linq;
    using System.Windows.Forms;
    using System.Xml.Linq;
    
    namespace WindowsFormsApplication_DynamicGUIFromXML
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            XDocument guiConfig = XDocument.Load(@"../../Gui.xml");
    
            foreach (XElement item in from y in guiConfig.Descendants("Item") select y)
            {
                Control tmp = new Control();
                switch (item.Attribute("type").Value)
                {
                    case "Button":
                        tmp = new Button();
                        break;
                    case "TextBox":
                        tmp = new TextBox();
                        break;
                }
    
                tmp.Name = item.Attribute("name").Value;
                tmp.Text = item.Attribute("text").Value;
                tmp.Location = new Point(Int32.Parse(item.Attribute("x").Value), Int32.Parse(item.Attribute("y").Value));
                Controls.Add(tmp);
            }
    
        }
        }
     }
    
    // ***********************************************
    // Contents of Gui.xml
    // ***********************************************
    //<?xml version="1.0" encoding="utf-8" ?>
    //<Gui>
    //  <Item type="Button" name="foo" text="bar" x="100" y="100"  />
    //  <Item type="TextBox" name="foo2" text="bar2" x="200" y="200"  />
    //</Gui>
    // ***********************************************