- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 TabPage
上显示一个动画 GIF 作为标签图像.
如果我将我的图像添加到 ImageList
并使用 TabPage.ImageIndex
属性,它只显示第一帧(并且不显示动画):
ImageList imageList = new ImageList();
imageList.Images.Add(Properties.Resources.my_animated_gif);
tabControl.ImageList = imageList;
tabPage.ImageIndex = 0;
ImageList
不支持动画 GIF。
TabPage
上将动画 GIF 显示为图像? ?我必须自己绘制图像并制作动画吗?
最佳答案
这是一个迟到的答案,但希望有人能从中受益,下面是我为 TabPage 中的图像动画所做的工作,我用它来显示动画加载图标,这假设您已经提取了 GIF 的帧并包含在内他们在资源中。
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Threading;
namespace GuiLib
{
public class AnimatedTabControl : TabControl
{
static int ITEM_WIDTH = 250;
static int ITEM_HEIGHT = 25;
static int TIMER_INTERVAL = 80;
static int ICON_X = 3;
static int ICON_Y = 3;
static int ICON_WIDTH = 15;
static int ICON_HIGHT = 15;
static int TEXT_X = 50;
static int TEXT_Y = 6;
static int TEXT_WIDTH = 200;
static int TEXT_HIGHT = 15;
int animationIndex;
static System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
Bitmap[] animationImages = {new Bitmap(GuiLib.Properties.Resources._0), new Bitmap(GuiLib.Properties.Resources._1),new Bitmap(GuiLib.Properties.Resources._2),
new Bitmap(GuiLib.Properties.Resources._3),new Bitmap(GuiLib.Properties.Resources._4),new Bitmap(GuiLib.Properties.Resources._5),
new Bitmap(GuiLib.Properties.Resources._6),new Bitmap(GuiLib.Properties.Resources._7)};
Bitmap animatedimage;
public AnimatedTabControl()
: base()
{
this.DrawMode = TabDrawMode.OwnerDrawFixed;
this.SizeMode = TabSizeMode.Fixed;
this.ItemSize = new Size(ITEM_WIDTH, ITEM_HEIGHT);
myTimer.Tick += new EventHandler(TimerEventProcessor);
myTimer.Interval = TIMER_INTERVAL;
animationIndex = 0;
}
private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
{
animationIndex++;
if (animationIndex >= animationImages.Length)
animationIndex = 0;
animatedimage = animationImages[animationIndex];
AnimateLoadingTabsOrStopIfNonIsLoading();
}
private void AnimateLoadingTabsOrStopIfNonIsLoading()
{
bool stopRunning = true;
for (int i = 0; i < this.TabPages.Count; i++)
{
if (this.TabPages[i] is LoadingTabPage)
{
LoadingTabPage ltp = (LoadingTabPage)this.TabPages[i];
if (ltp.Loading)
{
stopRunning = false;
Rectangle r = GetTabRect(i);
this.Invalidate(new Rectangle(r.X + ICON_X, r.Y + ICON_Y, ICON_WIDTH, ICON_HIGHT));
}
}
}
if (stopRunning)
myTimer.Stop();
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
Rectangle r = e.Bounds;
r = GetTabRect(e.Index);
DrawAnimationImageIfLoading(e, r);
DrawTabTitle(e, r);
}
private void DrawTabTitle(DrawItemEventArgs e, Rectangle r)
{
string title = this.TabPages[e.Index].Text;
StringFormat titleFormat = new StringFormat();
titleFormat.Trimming = StringTrimming.EllipsisCharacter;
e.Graphics.DrawString(title, this.Font, Brushes.Black, new RectangleF(r.X + TEXT_X, r.Y + TEXT_Y, TEXT_WIDTH, TEXT_HIGHT), titleFormat);
}
private void DrawAnimationImageIfLoading(DrawItemEventArgs e, Rectangle r)
{
if (this.TabPages[e.Index] is LoadingTabPage)
{
if (((LoadingTabPage)this.TabPages[e.Index]).Loading)
{
if (animatedimage != null)
e.Graphics.DrawImage(animatedimage, new RectangleF(r.X + ICON_X, r.Y + ICON_Y, ICON_WIDTH, ICON_HIGHT));
if (!myTimer.Enabled)
myTimer.Start();
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace GuiLib
{
/// <summary>
/// A Class to facilitate tab page with animated loading icon.
/// </summary>
public class LoadingTabPage : TabPage
{
public LoadingTabPage(string s)
: base(s)
{
loading = false;
}
public LoadingTabPage()
: base()
{
loading = false;
}
private bool loading;
public bool Loading
{
get { return loading; }
set
{
loading = value;
if (this.Parent != null)
{
this.Parent.Invalidate();
}
}
}
}
}
myLoadingTabPage.Loading = true;
关于.net - ImageList/TabPage 中的动画 GIF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796186/
要在 winform 应用程序中创建一个新选项卡,我在 msdn 中找到了这个: string title = "TabPage " + (tabControl1.TabCount + 1).ToSt
我创建了一个自定义 TabControl 和一个自定义 TabPage,如下所示: 自定义 TabControl 代码: public class MyCustomTabControl : TabCo
vim中是否有任何命令可以用来跳转到一个已经打开的选项卡,其中包含在选项卡中打开的文件。 在所有打开的缓冲区中也有完成的可能性。 例如,您在不同的选项卡中打开了以下文件。 readme.txt pom
我有一个由多个 TabPage 组成的 TabControl。这些 TabPage 之一包含 TreeView,另一个包含 DataGridView。我希望这些控件(和选项卡页)能够在不滚动的情况下将
所有,我想向 WinForm TabPage 添加自定义 RichTextBox。我尝试了下面代码所示的各种方法 TabPage tmpTabPage = new TabPage("Test"); t
在 Visual Studio 2010 的设计模式下工作... 我正在尝试在 tabPage 上获得水平滚动条。根据我在这里和那里阅读的理解,将 tabPage 的 AutoScroll 属性设置为
我想创建 tabpage 作为 userControl。 有什么办法可以解决这个问题吗? 最佳答案 添加一个 TabPage,并向其添加一个 UserControl... TabControl tab
我希望在设计时有一个带有控件的面板,但我想在运行时将此面板添加到我的 TabControl 的所需 tabPage。 我写了这样的东西,没有用:面板没有显示在标签页中。请帮助我。 panel2.Par
我正在尝试根据在选项卡控件上单击的选项卡页自动触发事件。 在我的窗体的设计模式中,当我单击选项卡时,属性框显示 Tabs System.Windows.Forms.TabControl 无论哪个选项卡
这个问题在这里已经有了答案: How can I disable a tab inside a TabControl? (26 个答案) 关闭 6 年前。 如何使 TabControl 中的 Tab
我想让用户通过拖放来重新排列 TabPages 顺序。此外,让用户能够将 TabPages 从一个 TabControl 拖到另一个 TabControl 会很酷。就像在 Firefox 和 Tota
我有一个应用程序在客户帐户上运行测试,以判断他们的服务是否正常工作。在运行测试的过程中,应用程序读取每个测试并检查它是否通过/失败/等等......它在tabPage本身上播放绿色复选标记/红色x作为
我想在我的应用程序上实现一个 MiddleClick-To-Delete 功能,就像大多数选项卡式环境一样: 它只是一个带有 TabControl 的单一表单,它有 2x TabPage:Active
我希望能够在 TabPage 上中键单击选项卡并将其从 TabControl 中删除,但即使启用了 HotTracking,我也不知道该怎么做捕获我中间单击的选项卡。 有办法吗? 最佳答案 您可以在
我有一个带有多个选项卡的窗口窗体。我想要一个“TabPage”类型的数组来保存每个选项卡,我想在声明时初始化它。我已经试过了 TabPage[] tabs = {Tab1, Tab2}; TabPag
TabPage 一直在创建,即使标签页已经存在于我的标签控件中。请考虑下面我的代码: void button1_Click(object sender, EventArgs e) { TabP
我有一个包含 TabControl 的简单表单,其中 TabPages 在运行时添加。我已经让所有这些都按我想要的方式工作几乎,但是当我将表单设置为自动调整大小时,它会忽略计算中的运行时 TabPag
类似于浏览器关闭选项卡的方式,我想知道您是否可以在 TabPage 的标题中添加一个按钮。 它会使用自定义 TabPage 渲染器吗 我可以在选项卡本身上添加一个按钮吗 最佳答案 您可以在此处找到示例
我制作了一个 TabControl 并想使用一些控件(标签、文本框、按钮和组合框下拉菜单)。问题是当我选择一个选项卡时,默认背景颜色与控件曾经所在的窗体的默认背景颜色不同。选项卡和控件的颜色太相似,看
我读了这个话题(Adding buttons to a TabControl Tab in C#)但我不明白为什么我下面的代码只向标签页添加一个按钮。我显然已经调试过 foreach 是否正常工作。
我是一名优秀的程序员,十分优秀!