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






4.75/5 (28投票s)
一种制作新风格按钮且兼容性极佳的简单方法。


引言
我一直在寻找免费的 Office 2007 风格按钮的源代码,以便在我的应用程序中使用,但我只找到了试用版和复杂的按钮。然后,我尝试在 .NET 2.0 (兼容 Windows 2000) 中自己设计,并且发现了许多关于真正透明度(不仅仅是表单透明度,还包括面板)的问题。最后,我找到了一种很棒且简单的方法来实现它。在这里,我解释了如何制作具有淡入淡出和透明度级别的按钮。我必须承认,我不是制作自己的控件和委托的专家,但基本原理就在这里。
背景
如果您尝试将背景色设置为透明并使用许多其他技巧,例如 CreateParams
,您总是会遇到真正的透明度问题,以及保持控件所需正确外观的问题,因此最好的方法是放置带有透明度级别的背景图像。 怎么做? 最简单的方法是使用 Gimp。 安装它并创建一个新的 10x10 透明文件。 创建一个新图像,选择高级选项,'用透明填充',如果你放大,你会看到这个

现在,您可以制作自己的颜色透明度效果,选择填充,选择并向下移动图标。 这里有透明度级别,根据需要更改它,然后单击图像。 您将看到类似于第二张图像的内容(透明度级别为 2,R212;G228;B242 颜色)。 将其另存为 'back.png' 文件,然后让我们进入 Visual Studio。
使用 off_button 类(Ribbon_Style 命名空间)
- 创建一个新的 Windows 应用程序,例如
ribbon_buttons
- 在解决方案资源管理器中,在项目的名称上右键单击,添加->现有项目,然后添加 off_button.cs
- 现在从工具箱中添加一个典型的按钮 (
System.Windows.Forms.Button
) 到表单中,然后转到 Form1.Designer.cs 的代码(在解决方案资源管理器中) - 更改此项
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...

b_click.png、b_on,例如 b_search.png、background.png(b_search.png 具有透明背景,不是绿色)
b_click.png: b_on.png:
b_search.png:
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; } } }
现在您可以在工具箱的开头找到新的按钮,可以根据需要拖动它,或者通过代码进行拖动。

关注点
代码不是一个完美的类,但这不是本文的目标。 这是我的第一个控件,而且我目前还不是自定义控件和事件方面的专家。 因此,当我学习更多知识时,我将改进它们,并且会更新本文。
历史
- 2007 年 3 月 6 日:这是该控件的第一个版本