• [翻译]建立你的第一个Visual WebGui应用程序


    Developing your first Visual WebGui Application  
    Published on:  Wednesday, April 18, 2007
    By:  Guy
    User Rating:  
    Categories:   How to?

    Screenshot

    介绍

    虽然目前的Web开发环境,例如ASP.NET 和JSP,在建立富Web应用方面有了长足的进步,但是这些环境因为要满足开发多种从内容丰富的门户到类似OWA的应用,不得不有所妥协,对于开发者来说开发某种类型的Web应用不得不忍受痛苦了。pages, html, requests and responses等历史上继承来的多种多样复杂的概念确实不适和开发web应用程序。虽然各种AJAX frameworks给这些开发环境增色不少,但是毕竟也是基于原来的Web开发概念,甚至更加剧了Web开发的复杂性,远远超过了开发桌面的应用。

    背景

        Visual WebGui是一个新型的AJAX framework,给开发Web应用带来了一条不同的方式,并且特别适合开发一个高度复杂的应用,就像Outlook Web Access (OWA). Visual WebGui使得开发者可以使用完全的WinForms服务器端的API,并且有设计时支持。通过借用WinForms的对象控件和开发方式的概念,Visual WebGui使得开发web应用变得非常简单。当当你使用它开发一个类似OWA的web应用的时候,更像是用VB/WinForms开发,而不是在写一个web应用。

        Visual WebGui是开源的并且对于非商业应用是免费的(SourceForge.net下载源码)。Visual WebGui 站点上有多种免费license类型,你甚至可以用到你的产品当中。

        本文目的是创建一个AJAX化的web应用,用于浏览wwwroot目录,左边是目录树,右边窗格中显示当前选中目录中的文件。

    代码

        要开始使用Visual WebGui开发,你首先需要下载SDK。download page. 安装程序会在你的GAC中添加几个Assembly,并且在你的开发环境中添加开发Visual WebGui项目的能力。在你的Visual Studio中会多出两种应用项目类型:WebGui Application and WebGui Control Library。WebGui Application项目类型用于创建ASP.NET新项目,项目中会有一个名为Form1.cs的类而不是你所熟悉的WebForm1.aspx。Form1.cs继承自Gizmox.WebGUI.Forms.Form ,并且有着和WinForms类似的设计时支持。当你打开Form1.cs的设计界面时,在你的工具箱中,会发现有一个新增的 WebGUI工具组。里面的组件就像WinForm的组件一样可以拖拽的设计区。选中设计区中的组件后,你可以在属性窗口中更改属性,特别的是包含有一些像WinForm中一样的Dock和Anchoring等的属性,这些都是Visual WebGui所支持的。

        在你开始运行应用之前,你需要在Visual Studio中,打开项目属性,将开始页设置为名字为Form1.wgx的虚拟页面。Visual WebGui 使用".wgx"扩展名,如果使用IIS服务,你需要参照".aspx"的映射,在IIS中添加对wgx的扩展名映射,但是,不能选中“检查文件是否存在的”复选框,应为Visual WebGui使用的是虚拟页面。设置完成后,你就可以像调试一个WinForms应用一样调试你的程序了。

    第一步:建立一个WebGui Application项目

        打开新建项目对话框,选中”WebGui Application project“,然后输入项目的名称,点击确定按钮。

        Visual WebGui将会建立一个既像ASP.NET,又有WinFroms特征的项目,这是因为项目的结构类似于ASP.NET,但是包含的窗体却像是WinForm形式的窗体。双击form1.cs,打开设计界面,你会发现完全类似于WinForm的设计界面。Visual Studio的工具箱中,已经添加了一组名为WebGUI的组件,你将发现这些组件和WinForms中的组件几乎一模一样。你可以像开发WinForms程序那样拖拽添加这些组件,Visual WebGui也会自动在InitializeComponent方法中添加生成代码。

    第二步:建立主窗体

        从WebGUI工具箱中拖拽一个treeview控件添加到设计区中。设计器就会为你创建一个TreeView,你可以在属性窗中更改控件的属性值。在属性窗中选择Dock属性,值改为Left。这将使设计器把treeview控件固定在左边。你可以调整treeview的宽度。现在,从WebGUI工具箱中选择splitter控件,并且拖拽到设计区,设计器会默认的将splitter的dock值设为left,在这里正好符合我的意图。再添加一个listview,Dock设为Fill,这将使得它铺满剩下的设计区空间。

    第三步:填充treeview

        在属性窗中的下拉框中选中form以显示form的属性,然后切换到事件页,双击Load事件,设计器将会产生一个空的事件处理程序。load事件将在Visual WebGui窗体装载后执行。添加一个新的方法LoadFolders,接收TreeNodeCollection 和 表示路径的字符串 两个参数。在load事件中调用此方法,参数使用treeview1.Nodes和 @"C:"inetpub"wwwroot",这使得程序装载第一层的文件夹列表。

    private void Form1_Load(object sender, System.EventArgs e)
    {
        LoadFolders(treeView1.Nodes,
    @"C:"inetpub"wwwroot");
    }
    private void treeView1_BeforeExpand(object sender, Gizmox.WebGUI.Forms.TreeViewCancelEventArgs e)
    {
     if(!e.Node.Loaded)
     {
        LoadFolders(e.Node.Nodes,e.Node.Tag 
    as string)
        e.Node.Loaded 
    = true;
     }
    }
    private void LoadFolders(TreeNodeCollection nodes,string path)
    {
     DirectoryInfo dir 
    = new DirectoryInfo(path);
     bool hasFolders = dir.GetDirectories().Length>0;
     // Loop all sub directories
      foreach(DirectoryInfo subdir in dir.GetDirectories())
      {
      // Create a new tree node
        TreeNode node 
    = new TreeNode();
        node.Text 
    = subdir.Name;
        node.Tag 
    = subdir.FullName;
        node.IsExpanded 
    = !hasFolders;
        node.Loaded 
    = !hasFolders; // 这个属性是一个WinForms API中没有的扩展属性
        node.HasNodes = hasFolders;
        nodes.Add(node);
        }
    }

        在LoadFolder方法中我们添加了遍历当前目录下的子目录,然后添加到传来的TreeNode的子节点中

    第四步:填充listview

        定位到Form1的构造函数添加如下代码,在这里设置了listview的UseInternalPaging属性为true,这将使得Visual WebGui自动为我们处理分页逻辑。

    public Form1()
    {
    // This call is required by the WebGUI Form Designer.
    InitializeComponent();
    listView1.Columns.Add(
    new ColumnHeader("Name","Name"));
    listView1.Columns.Add(
    new ColumnHeader("Extension","Extension"));
    listView1.UseInternalPaging 
    = true;
    }

        下面为treeview添加一个AfterSelect的事件处理程序,程序中将使用e.Node.Tag来接收需要显示文件的路径名。在向listview中添加项目之前,需要先清除现有的项目。

    private void treeView1_AfterSelect(object sender, Gizmox.WebGUI.Forms.TreeViewEventArgs e)
    {
     DirectoryInfo dir 
    = new DirectoryInfo(e.Node.Tag as string);
     listView1.Items.Clear();
     // Loop all files in directory
     foreach(FileInfo file in dir.GetFiles())
     {
     ListViewItem item 
    = listView1.Items.Add(file.Name);
     item.SubItems.Add(file.Extension);
     }
    }

    第四步:添加图标美化一下界面

        Visual WebGui的资源管理方式和WinForms是不同的,由于运行环境不同,在多线程的情况下像那样处理资源就有些负担太大了。Visual WebGui有独特的引用资源的处理方式,在这种方式下Visaul WebGui 服务器端可以优化缓存,当不同的线程引用同一资源时可以提高速度节省资源占用。Visual WebGui包括一些默认的资源处理程序IconResourceHandler和 ImageResourceHandle,在Visual WebGui配置中指向不同的路径。资源处理程序使用java式的定位方法,这意味着路径名之间用点分隔。

    在Form1.cs中添加新的引用,以便你可以创建资源处理对象:
    using Gizmox.WebGUI.Common.Resources;

    下面的程序再TreeNode和ListViewItem中添加图标:

    private void LoadFolders(TreeNodeCollection nodes,string path)
    {
      DirectoryInfo dir 
    = new DirectoryInfo(path);
     
    bool hasFolders =  dir.GetDirectories().Length>0;
     // Loop all sub directories
        foreach(DirectoryInfo subdir in dir.GetDirectories())
        {
        // Create a new tree node
        TreeNode node = new TreeNode();
        node.Text 
    = subdir.Name;
        node.Tag 
    = subdir.FullName;
        node.IsExpanded 
    = !hasFolders;
        node.Loaded 
    = !hasFolders; // This property is an extension to the WinForms API
        node.HasNodes = hasFolders;
        // Add icon to tree node
        node.Image = new IconResourceHandle("folder.gif");
        nodes.Add(node);
        }
    }
    private void treeView1_AfterSelect(object sender, Gizmox.WebGUI.Forms.TreeViewEventArgs e)
    {
      DirectoryInfo dir 
    = new DirectoryInfo(e.Node.Tag as string);
      listView1.Items.Clear();
      // Loop all files in directory
        foreach(FileInfo file in dir.GetFiles())
        {
        ListViewItem item 
    = listView1.Items.Add(file.Name);
        item.SubItems.Add(file.Extension);
        // Add icon to item
        item.Image = new IconResourceHandle("file.gif");
        }
    }

    结论

        正如你在例子中所看到的,Visual WebGui利用WinForms的概念简化了web应用的开发。设计器,对象模型和语法都和开发WinForms一致,这意味着,你可以迅速的迁移现有的WinForms项目、代码以及经验到Visual WebGui平台中来,建立复杂的交互的web应用不一定需要掌握AJAX, Javascript, XML 和 HTML,所需要的就是熟悉桌面应用的已经被证明是有生产力的开发技巧。
  • 相关阅读:
    20191112 Spring Boot官方文档学习(4.5-4.6)
    20191112 Spring Boot官方文档学习(4.4)
    (转)service apache2 restart失败
    (mark)ubuntu16.04下安装&配置anaconda+tensorflow新手教程
    解决ssh连接中断程序终止的问题——tmux
    Tensorflow取消占用全部GPU
    Linux大文件split分割以及cat合并
    常用压缩/解压操作
    HM16.0帧内预测重要函数笔记
    GIT LFS 使用笔记
  • 原文地址:https://www.cnblogs.com/dajianshi/p/961502.html
Copyright © 2020-2023  润新知