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

制作具有淡入淡出效果的 Office 2007 按钮

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (28投票s)

2007年3月12日

CPOL

3分钟阅读

viewsIcon

62495

downloadIcon

2890

一种制作新风格按钮且兼容性极佳的简单方法。

Screenshot - background.png Screenshot - form_example.png

引言

我一直在寻找免费的 Office 2007 风格按钮的源代码,以便在我的应用程序中使用,但我只找到了试用版和复杂的按钮。然后,我尝试在 .NET 2.0 (兼容 Windows 2000) 中自己设计,并且发现了许多关于真正透明度(不仅仅是表单透明度,还包括面板)的问题。最后,我找到了一种很棒且简单的方法来实现它。在这里,我解释了如何制作具有淡入淡出和透明度级别的按钮。我必须承认,我不是制作自己的控件和委托的专家,但基本原理就在这里。

背景

如果您尝试将背景色设置为透明并使用许多其他技巧,例如 CreateParams,您总是会遇到真正的透明度问题,以及保持控件所需正确外观的问题,因此最好的方法是放置带有透明度级别的背景图像。 怎么做? 最简单的方法是使用 Gimp。 安装它并创建一个新的 10x10 透明文件。 创建一个新图像,选择高级选项,'用透明填充',如果你放大,你会看到这个

Screenshot - image1.png

现在,您可以制作自己的颜色透明度效果,选择填充,选择并向下移动图标。 这里有透明度级别,根据需要更改它,然后单击图像。 您将看到类似于第二张图像的内容(透明度级别为 2,R212;G228;B242 颜色)。 将其另存为 'back.png' 文件,然后让我们进入 Visual Studio。

使用 off_button 类(Ribbon_Style 命名空间)

  1. 创建一个新的 Windows 应用程序,例如 ribbon_buttons
  2. 在解决方案资源管理器中,在项目的名称上右键单击,添加->现有项目,然后添加 off_button.cs
  3. 现在从工具箱中添加一个典型的按钮 (System.Windows.Forms.Button) 到表单中,然后转到 Form1.Designer.cs 的代码(在解决方案资源管理器中)
  4. 更改此项
this.button1 = new Ribbon_Style.of_boton2(); 	//Instead of new 
					//System.Windows.Forms.Button();
...
private Ribbon_Style.of_boton2 button1; 	//Instead of 
					//System.Windows.Forms.Button button1;

您将看到该按钮只有文本,现在让我们添加图像。

制作带有淡入淡出的 Office 风格

您需要将以下图像添加到项目中。 例如,保存在您的硬盘驱动器中,在属性中,选择 img、img_back...

Screenshot - image3.png

b_click.png、b_on,例如 b_search.pngbackground.pngb_search.png 具有透明背景,不是绿色)

b_click.png: Screenshot - B_click.png b_on.png: Screenshot - B_on.png b_search.png: Screenshot - B_search.png background.png: Screenshot - background.png

(在此处左侧标记以查看后退...)。 现在您可以在自己的项目中尝试。

在 Off_Button 内部

让我们看看 Main 方法

public void PaintBackground() 
    { object _img_temp = new object(); 	// We create the temp_image 
    if (i_fad == 1) 
    { _img_temp = _img_on.Clone(); } 	// That we clone to do not overwrite 
    else if (i_fad == 2) 
    { _img_temp = _img_back.Clone(); } 	// We use the i_value to choose 
					// the background opacity 
    _img_fad = (Image)_img_temp; 
    Graphics _grf = Graphics.FromImage(_img_fad); 
    SolidBrush brocha = new SolidBrush(Color.FromArgb(i_value, 255, 255, 255)); 
    _grf.FillRectangle(brocha, 0, 0, _img_fad.Width, _img_fad.Height); 
    this.BackgroundImage = _img_fad; 
}

private void timer1_Tick(object sender, EventArgs e) 
{ switch (i_fad) 
{ 
case 1: 
{ if (i_value == 0) 
{ i_value = 255; } 
if (i_value > -1) 
{ PaintBackground(); i_value -= 10; } 
else { i_value = 0; // That's the only way to be able to play with the ticks
PaintBackground(); 
timer1.Stop(); } 
break; } 
case 2: 
{ if (i_value == 0) 
{ i_value = 255; } 
if (i_value > -1) 
{ PaintBackground(); 
i_value -= 10; } 
else { i_value = 0; 
PaintBackground(); 
timer1.Stop(); 
} 
break; } } }

现在您可以在工具箱的开头找到新的按钮,可以根据需要拖动它,或者通过代码进行拖动。

Screenshot - image5.png

关注点

代码不是一个完美的类,但这不是本文的目标。 这是我的第一个控件,而且我目前还不是自定义控件和事件方面的专家。 因此,当我学习更多知识时,我将改进它们,并且会更新本文。

历史

  • 2007 年 3 月 6 日:这是该控件的第一个版本
© . All rights reserved.