`
bencode
  • 浏览: 109661 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

为Form中的控件添加漂亮的边框

阅读更多
今天把机子显示模式调到 "Windows经典",发现 Form 中的 Text, Table 等控件都没有了边框,变成了空白。

而把创建控件的代码,加上 SWT.BORDER,显示的是三维凹陷的边框,不符合我的要求,我想要 PDE 那样的效果。

查看 Eclipse 源码,发现以下段:

java 代码
 
  1. public class FormToolkit {  
  2.     ...  
  3.     private class BorderPainter implements PaintListener {  
  4.         public void paintControl(PaintEvent event) {  
  5.             Composite composite = (Composite) event.widget;  
  6.             Control[] children = composite.getChildren();  
  7.             for (int i = 0; i < children.length; i++) {  
  8.                 Control c = children[i];  
  9.                 ...  
  10. ...  

这一段是对 composite 中的控件进行边框的绘制,可是对哪些 Composite 进行绘制呢?
于是, 看一下引用 BorderPainter 的地方,见到如下代码:

java 代码
 
  1. public void paintBordersFor(Composite parent) {  
  2.     // if (borderStyle == SWT.BORDER)  
  3.     // return;  
  4.     if (borderPainter == null)  
  5.         borderPainter = new BorderPainter();  
  6.     parent.addPaintListener(borderPainter);  
  7. }  

哈哈, 以后不要忘记要给相应的parent composite调用一下以上方法。


java 代码
  1. toolkit.paintBordersFor(container);    

 
还有 Form 中的 Tree, Table 等控件, 如果不是通过 toolkit 方式构建的,要为它们加上 toolkit.getBorderStyle(), 因为操作系统的差异性,所以 toolkit.getBorderStyle() 对进行了特别处理

java 代码
 
  1. // in FormToolkit.class  
  2.        private void initializeBorderStyle() {  
  3.     String osname = System.getProperty("os.name"); //$NON-NLS-1$  
  4.     if (osname.equals("Windows XP")) { //$NON-NLS-1$  
  5.         // Skinned widgets used on XP - check for Windows Classic  
  6.         // If not used, set the style to BORDER  
  7.         RGB rgb = colors.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);  
  8.         if (rgb.red != 212 && rgb.green != 208 && rgb.blue != 200)  
  9.             borderStyle = SWT.BORDER;  
  10.     } else if (osname.startsWith("Mac")) //$NON-NLS-1$  
  11.         borderStyle = SWT.BORDER;  
  12. }  

所以...
java 代码
 
  1. tableViewer = new TableViewer(container,
      1. toolkit.getBorderStyle() | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);  
分享到:
评论

相关推荐

    C# WinForm 在Panel中添加Form 教程+源码

    本教程将详细介绍如何在Panel中添加Form,并提供相关源码供参考学习。 首先,Panel控件是Windows Forms中的一种容器控件,它允许我们在其内部放置其他控件,包括Form。与MDI窗体相比,Panel控件提供了一个更加灵活...

    C#在panel动态添加控件

    本示例关注的是如何在C#中使用ASP.NET Web应用程序,在一个Panel控件上动态添加控件。这个过程对于创建可自定义、灵活且交互性强的用户界面非常有用。 首先,我们需要理解Panel控件。Panel在ASP.NET中是一个容器...

    动态设置Memo控件边框的大小,Delphi代码..rar

    这可以通过在 Form 的创建过程中或 Form 的 OnCreate 事件中添加以下代码来完成: ```delphi procedure TForm1.FormCreate(Sender: TObject); begin Memo1.OnResize := Memo1Resize; // 将 OnResize 事件与 Memo1...

    c# 修改label控件边框色及背景色

    2. 在`CustomLabel`类中,我们添加了两个新的属性`BorderColor`和`BackgroundColor`,分别用于设置边框和背景色。当这些属性的值发生改变时,我们调用`Invalidate()`方法来触发控件的重绘。 3. `OnPaint`方法中,...

    一个不错的 Form 多选列表控件效果 - option, multiple, select, form,.files.rar

    例如,可以添加自定义的背景色、边框、字体等,或者用更友好的交互方式替代原生的下拉列表,如滑动选择或多选框组。 四、提交表单时处理多选数据 当用户提交包含多选列表的表单时,服务器端会接收到一个以逗号分隔...

    计算机软件-编程源码-Delphi6编程大师_界面_为控件加边框.zip

    要为Delphi 6中的控件添加边框,可以按照以下步骤操作: 1. 打开Delphi 6 IDE,创建一个新的VCL Forms应用程序。 2. 在Form Designer中,从Component Palette选择你需要的控件,例如Button或Label,将其拖放到窗体...

    windows Form 下的Table容器控件

    Windows Form下的Table容器控件是.NET Framework中用于创建布局网格的一种强大工具,它在Windows应用程序设计中扮演着重要角色。Table控件与HTML中的表格元素类似,允许开发者以行列的形式组织和显示数据,但功能...

    vb.net DataGridView控件用法,.net DataGridView控件用法,GridView用法

    在.NET框架中,DataGridView控件是一个非常重要的组件,主要用于显示和操作数据表格。它提供了丰富的功能,包括数据的浏览、编辑、排序、过滤等。在VB.NET和C#等.NET语言中,使用DataGridView控件可以方便地构建用户...

    C#中主窗体Panel中加载其他多个窗体Panel控件

    在代码中,我们可以创建子窗体实例,并将其Panel控件添加到主窗体的Panel中。这可以通过以下步骤完成: ```csharp private void LoadChildForm(Panel childPanel) { // 创建ChildForm1实例 ChildForm1 form1 = ...

    窗体控件重绘

    2. **Form控件重绘**:Form作为窗口的基础,其重绘可能涉及窗口边框、标题、背景等元素。重绘Form可以实现透明、半透明效果,或者自定义标题栏和边框样式。通过处理`Paint`事件,可以使用`ControlPaint`类的方法或者...

    form窗口自定义边框,贴边隐藏

    1. **自定义边框样式**:在Form的属性设置中,可以将`FormBorderStyle`属性设为`None`,这会移除默认的边框,使我们能够自由地绘制自定义边框。接下来,我们需要在Form的Paint事件中绘制边框,使用Graphics对象的...

    c# 动态改变控件位置、控件大小、拖动控件

    实际开发中,你可能需要根据具体需求进行更复杂的逻辑处理,例如添加边界检查防止控件移出窗体,或者限制控件的最小和最大大小等。通过熟练掌握这些技巧,可以为用户提供更加灵活和友好的交互体验。

    vb.net 将窗口显示成panel控件中

    在VB.NET编程中,将窗口显示在Panel控件中是一种常见的做法,这允许开发者实现多窗口切换的效果,尤其是在创建复杂的用户界面时。Panel控件在Windows Forms应用中扮演着容器的角色,可以用来组织和管理其他控件。在...

    C# WPF和WindForm控件的互操作与IE7样式Tabcontrol的源代码

    具体步骤包括创建托管控件、在目标容器中添加控件,并确保正确的大小和位置同步。 例如,假设我们需要在WPF应用中使用WinForms的TabControl,我们可以这样做: 1. 引用`System.Windows.Forms.Integration`命名空间...

    Delphi xe4 下完美支持中文的二维码控件

    // 将控件添加到Form上 QRCode.Data := '你好,世界!'; // 输入包含中文的数据 QRCode.QRErrorCorrection := qrcLevelH; // 设置容错级别为最高 finally QRCode.Free; end; end; ``` 这段代码中,`Data`属性...

    C#中窗体Form的美化

    2. 背景图片:通过设置Form的BackgroundImage属性,可以为窗体添加背景图片,提升视觉效果。同时,使用BackgroundImageLayout属性调整图片的显示方式,如平铺、拉伸或居中等。 3. 颜色和透明度:Form的BackColor...

    C#自定义控件之-winform美化

    - **无边框窗体(Borderless Form)**:移除窗体的默认边框,可以使得窗体更加简洁。这可以通过设置`FormBorderStyle`属性为`None`来实现。但无边框窗体需要手动实现拖动、最大化、最小化等操作。 - **阴影效果...

    控件重绘 C# 轻松实现对窗体(Form)换肤

    当需要改变控件的外观,如颜色、边框样式等时,就可以在`OnPaint`方法中进行定制。 换肤功能的核心在于创建一个皮肤管理器类,用于存储不同的皮肤配置,如背景色、前景色、字体等。这些配置可以保存在XML文件或...

    CS winform新版换肤控件源码(Form\Button\MessageBox

    例如,Form控件需要重写OnPaint事件,Button控件则需要处理Paint事件,对边框、背景色、文本等进行自定义绘制。 3. **皮肤管理器**:为了方便地在不同皮肤之间切换,通常会有一个皮肤管理器类,负责加载皮肤文件、...

    C#WinForm控件美化扩展RadioButton

    在名为"RadioButtonDemo"的示例项目中,可能包含了使用上述自定义RadioButton控件的代码和设计。这个项目可以帮助开发者理解如何在实际应用中实现和使用自定义的美化RadioButton。 总的来说,通过扩展和美化WinForm...

Global site tag (gtag.js) - Google Analytics