新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → C#中的版面管理器 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2824 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: C#中的版面管理器 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18407
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 C#中的版面管理器


    发信人: walts (小天堂), 信区: DotNET        
    标  题: C#中的版面管理器  
    发信站: BBS 水木清华站 (Sat May  5 16:48:37 2001)


    当程序员准备设计一个GUI(图形用户界面)的时候,他将面对许多特殊的问题:
    视觉效果、可伸缩性、可调整的性能、修改便利性等等。版面管理器通过设置版
    面化对象的大小和位置帮助你解决了这些问题,同时其本身也是版面化的。Java
    程序员对版面管理器的概念应该是比较熟悉的,但从其它编程背景中转到 C# 的
    程序员可能需要对此逐渐熟悉

    何为版面管理器


    版面管理器能够决定版面化对象的尺寸和大小。版面管理器是可以用在任何场合的,
    不过它最广泛的应用还是在GUI设计中。近些年出现的一些工具(其中大多数是基于
    Borland的伟大的 C++ 系列)使得GUI的设计更加简单,但即使是这样,GUI设计还是
    一个较复杂的问题。对于那些想使这个问题简单化或是想更直接控制版面的人,版面
    管理器应该是一个较好的解决之道。版面管理器为程序员的设计带来了许多实在的帮
    助,通过使用版面管理器的嵌套和区域管理,几乎所有的配置都成为可能。另外,版
    面管理器还能帮助程序员解决 GUI开发中一些“令人讨厌的部分,比如调整尺寸、正
    常版面、可伸缩性,让程序员能够将更多的时间集中于设计哪些更有意义的部分。  


    Java和 C#中版面管理器的区别  


    Java中的版面管理器与在C#中执行的版面管理器主要有两个区别。首先,在 Java中,
    版面管理器只是纯粹被用在图形用户界面的区域,即只有组件可以用版面管理器来排
    版。在C#的版面管理器中,所有执行ILayoutable界面的对象都可以进行排版,这样
    就在图形及地图设计等领域中提供了更多设计上的可能性。第二个不同与第一个有关。
    由于这里执行的版面管理器并不直接受GUI对象的约束,而只是编排版面化对象的抽象
    概念,因此就有可能将版面管理器用于母控制的独特区域。你可以在母控制中指定一个
    矩形区域,给它一个版面管理器,向它增加子控制。如此,我们不但拥有了哪些Java中
    的标准版面管理器操作外,还为GUI设计带来了难以置信的威力。  



    如何使用版面库  
    它基于两个界面:Ilayoutable和 IlayoutManager,后者是对
    Ilayoutable的扩展。库的其余部分包括这两个界面对 GUI 设计的
    特殊问题的执行。  

    ControlBox:这是控件版面结构的基础,是Controls的基础包装类。  
    ContainerBox:从ControlBox中继承而来,能够增加其它 ControlBoxes 并布置它们。  
    AreaPane:从ContainerBox中继承而来,其作用相当于最高级别面板。它在一个矩形区
    域中布置了被添加到其中的各种控件。  
    ResizeablePane:从 AreaPane中继承而来,唯一的不同是它总是调整到其母控件的客
    户端尺寸。

    eg.

    public class CalculatorForm : Form
    {
    public CalculatorForm()
    {
    Size = new Size(200, 250);
    Text = "Calculator";
    myCalculator = new Calculator();

    //This will be the top-level pane to which all other controls will be added
    //and which also resizes as the Form is resized.

    AreaPane controlPane = new ResizeablePane(this, ClientRectangle, new BorderLayout());
    myTextBox = new TextBox();
    myTextBox.Text = "0";

    //Notice that the control is added to the pane. ContainerBoxes will
    //add all controls which are added to them to their boxed control automatically.
    controlPane.Add(myTextBox, BorderLayout.Direction.North);

    Panel p = new Panel();

    //Since buttonPane will have other controls added to it, it is wrapped in
    //a ContainerBox.

    ContainerBox buttonPane = new ContainerBox(p);
    addButtons(buttonPane);
    Button clearB = new Button();
    clearB.Text = "Clear";
    clearB.Click += new EventHandler(clear);
    controlPane.Add(clearB, BorderLayout.Direction.South);
    controlPane.Add(buttonPane, BorderLayout.Direction.Center);
    }

    private void addButtons(ContainerBox pane)
    {
    pane.layoutManager = new GridLayout(4, 3);
    for(int i=1; i<10; i++){
    Button b = getDigitButton(i);
    pane.Add(b);
    }
    Button zero = getDigitButton(0);
    Button plus = getButton("+");
    Button minus = getButton("-");
    plus.Click += new EventHandler(action);
    minus.Click += new EventHandler(action);
    pane.Add(plus);
    pane.Add(zero);
    pane.Add(minus);
    }
    //private methods called by the constructor
    //...
    }  

    库中提供的还有一些样本版面:  

    BorderLayout:允许5个不同的版面化对象,在北、南、东、西和中央各一个。所有组件
    的大小都被压缩了,北和南在垂直方向上尽可能小,在水平方向上尽可能大。而西和东
    在水平方向上尽可能小,在垂直方向上尽可能大。中心的版面化对象则填充了剩余的空间。  
    GridLayout:用了一些行和列,创建一个栅格,用户可以向其中增加控件。栅格中的每个
    成员大小都相同,按照它们增加的顺序,从左到右沿着行分布。  
    FlowLayout:试图向一个水平行中增加控件,一旦这行对于容器的宽度来说太大了,就开
    始新的一行。可以向左、中央和右看齐。  
    在 GUI 创建中使用这些类是很简单的。当创建一个其中包含其它控件的控件时,将其包装
    在一个 ContainerBox中,设置盒子的版面,然后向盒子中增加所有的子控件。唯一没有增
    加到ContainerBox中的控件是最顶部级别的控件,它通常是一个表单,被包装在一个
    AreaPane或一个 ResizeablePane中。一个ResizeablePane将采用其母控件的形状,但是一
    个AreaPane 则是所指定区域的形状。  


    --

    ※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.142.76]
    上一篇
    返回上一页
    回到目录
    回到页首
    下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/9 2:25:00
     
     xmzhy 帅哥哟,离线,有人找我吗?狮子座1978-8-18
      
      
      威望:5
      等级:计算机学士学位
      文章:385
      积分:2003
      门派:XML.ORG.CN
      注册:2003/10/22

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xmzhy发送一个短消息 把xmzhy加入好友 查看xmzhy的个人资料 搜索xmzhy在『 Dot NET,C#,ASP,VB 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xmzhy的博客2
    发贴心情 
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/12/27 17:15:00
     
     GoogleAdSense狮子座1978-8-18
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/7/18 21:31:51

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    39.063ms