65.9K
CodeProject 正在变化。 阅读更多。
Home

易于自定义标题栏

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (11投票s)

2009 年 9 月 11 日

CPOL

4分钟阅读

viewsIcon

118882

downloadIcon

15552

创建自己的自定义标题栏, 而不是使用传统的 Windows 标题栏

dialog.jpg

引言

大家好。我想给大家分享另一个漂亮的标题栏控件,它能让你的应用程序更美观。我花了大量时间在网上寻找这样的标题栏,但一直没找到。但在搜索过程中,我收集了一些关键点,从而制作了自己的标题栏。很抱歉,我记不清从哪里收集到其中一些要点。但我应该对他们表示崇高的敬意。如果我再次找到这些资料来源,我会在我的文章中添加参考文献。

根据我的发现并运用我的知识,我将向大家展示一个可自定义的标题栏控件,它可以节省你的时间。还有一点,这个控件还不是完全可自定义的。目的是让大家了解在 C# .NET 中创建这样的控件是多么容易。在这个创建过程中,我使用了之前创建的控制框控件来创建这个标题栏。我将解释如何为窗体创建一个控制框。然后,我将继续讲解更容易开发的标题栏。

Using the Code

虽然本文提供了代码,但您可以根据自己的喜好更改外观。此控件提供与 Windows 控制框相同的功能。

创建一个 C# “Windows 控件库”项目,你就可以实现所有这些功能。在控件窗体上放置三个标签控件,并为它们分配图像。为了在光标移到按钮上时高亮显示它,我们必须捕获每个标签控件的鼠标移动事件并添加以下代码段……

private void lblMinimize_MouseMove(object sender, MouseEventArgs e) 
{  
     lblMinimize.Image = global::window_control_box.Properties.Resources.minimize_sele;}

……你必须为控件设置另一个图像,以反映标签控件中的鼠标悬停效果。为此,您可以使用任何图像编辑/创建软件。

我不会详细讲解,因为这很简单。因此,您可以为所有三个标签添加这些代码段。

接下来是如何创建最小化、最大化和关闭操作。为此,您必须在标签控件的单击事件中添加以下代码段

Private void lblClose_Click(object sender, EventArgs e)
{
	this.ParentForm.Close();   
}
private void lblMaximize_Click(object sender, EventArgs e) 
{
        if (this.ParentForm.WindowState == FormWindowState.Maximized)
        {
	       this.ParentForm.WindowState = FormWindowState.Normal;
        }
        else if(this.ParentForm.WindowState == FormWindowState.Normal)
        {
               this.ParentForm.WindowState = FormWindowState.Maximized;
        }
        this.ParentForm.Show();
}

在这里,我们所做的不是调用控件窗体的 `close` 方法,而是调用控件所在的父窗体。这将为我们完成任务。

我对最大化单击事件做了一些小的改动,使其行为与 Windows 最大化按钮的行为相同。

为了将最大化、最小化和关闭按钮作为属性提供给用户,我们只需要添加以下代码段

[Category("Appearance")] 
[Description("Gets or sets maximize button visibility")]
public bool Maximize
{
    set
    {
        lblMaximize.Visible = value;  
    }
    get
    {
        return lblMaximize.Visible; 
    } 
}

[Category("Appearance")]
[Description("Gets or sets minimize button visibility")]
public bool Minimize
{ 
    set
    {
        lblMinimize.Visible = value;
    }
    get
    {
        return lblMinimize.Visible;
    } 
}  

[Category("Appearance")]
[Description("Gets or sets close button visibility")]
public bool Close
{
    set
    {
        lblClose.Visible = value;
    }
    get
    {
        return lblClose.Visible;
    } 
} 

这就是创建“控制框”控件所需执行的所有操作。编译后,您将获得一个 DLL 文件。您可以在下一个控件创建项目中将其作为可视控件简单地使用。您需要做的就是在 C# 中右键单击工具箱窗格,然后单击“选择项……”。从那里,浏览此 DLL 并单击“确定”。然后将此控件拖放到您的项目 Windows 窗体上。

这里我附加了创建标题栏和控制框的两个项目。借助这两个项目,我相信您可以创建自己的标题栏。

如何在应用程序中使用标题栏

将 `TitleBarControl` 项目编译生成的两个 DLL 文件复制到应用程序源代码文件夹。如上所述,使用“选择项...”将控件添加到工具箱。

将标题栏控件拖放到您的应用程序中,并将控件的 Doc 属性设置为“top”。在属性对话框中,您可以看到标题栏控件的**标题**、**标题字体**、**标题前景色**、**标题背景色**属性。您可以设置这些属性并根据需要进行自定义。

文本显示存在限制。标题栏的显示区域是固定的。我将在不久的将来提供增强版本。因为您拥有标题栏控件的代码,所以您可以通过进行一些修改轻松克服这种情况。

将 Doc 属性设置为“Top”后,您必须使用**FormBorderStyle**属性移除传统的 Windows 标题。您可以选择无窗体边框样式,或者您可以使用一些技巧来移除标题栏,例如设置:

  • ControlBox = false
  • FormBorderStyle = FixedSingle
  • Text = "" (应为空)

设置完如上所示的窗体属性后,您将获得带有您自己标题栏的窗体。

如果要更改控件的外观,则必须修改 `FormTitleBar` 和控制框控件中使用的图像。

更多技巧。

如何应用于 MDI 窗体

如果 MDI 窗体中包含菜单,请将“`FormTitileBar`”控件拖放到菜单上。然后它将位于主菜单下方。要将其上移,请右键单击“`FormTitleBar`”控件,然后单击“发送到后面”选项。这将完成工作。

在您应用此标题栏的所有窗体中,都必须通过调整窗体的属性来移除 Windows 标题栏。

历史

  • 2009年9月11日:初始发布
© . All rights reserved.