首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选项卡控件中选项卡页之间的淡入淡出

选项卡控件中选项卡页之间的淡入淡出
EN

Stack Overflow用户
提问于 2008-10-29 18:48:40
回答 5查看 6.6K关注 0票数 3

我有一个具有多个选项卡页的选项卡控件。我希望能够来回淡入淡出标签。我在Tab控件上看不到不透明度选项。当我从一个标签页切换到另一个标签页时,有没有办法引起淡入淡出的效果?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-31 16:53:25

在标准的windows控件中没有神奇的淡入淡出开关。

您可以将选项卡的内容转储为位图(使用DrawToBitmapCopyFromScreen?),在TabControl前面显示该位图,切换选项卡,然后淡入淡出该位图。

票数 2
EN

Stack Overflow用户

发布于 2008-11-09 00:05:13

我决定发布我所做的事情来让我的解决方案生效。GvS有最接近的答案,并将我的探索送到了正确的方向,所以我给了他(可能是她,但来吧)正确答案的复选标记,因为我不能给自己。我从来没有想过如何从一个标签到另一个标签的“交叉淡入淡出”(在一个标签上降低不透明度,在另一个标签上增加不透明度),但我发现在一个位图上画一个灰色的方框需要等待,因为它的灰色越来越多,使其具有淡入背景的效果,背景也是灰色的。然后,我以灰度位图的形式开始第二个标签,我慢慢地添加了较少的灰色,结合标签图像,每次迭代都会给它一个淡入淡出的效果。

这个解决方案产生了一个很好的淡入淡出效果(即使我自己这么说),但它是非常线性的。我将使用一个用于alphablend变量的随机数生成器,看看这是否会使它变得不那么线性,但用户可能会喜欢它的可预测性。顺便说一句,我使用button_click触发切换选项卡事件。

代码语言:javascript
复制
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

public int alphablend;
public Bitmap myBitmap;

    private void button1_Click(object sender, EventArgs e)
    {
        alphablend = 0;
        pictureBox1.Visible = true;
        myBitmap = new Bitmap(tabControl1.Width, tabControl1.Height);
        while (alphablend <= 246)
        {
            tabControl1.DrawToBitmap(myBitmap, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));
            alphablend = alphablend + 10;
            pictureBox1.Refresh();//this calls the paint action
        }
        tabControl1.SelectTab("tabPage2");
        while (alphablend >= 0)
        {
            tabControl1.DrawToBitmap(myBitmap, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));
            alphablend = alphablend - 10;               
            pictureBox1.Refresh();//this calls the paint action
        }
        pictureBox1.Visible = false;
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        Graphics bitmapGraphics = Graphics.FromImage(myBitmap);

        SolidBrush greyBrush = new SolidBrush(Color.FromArgb(alphablend, 240, 240, 240));

        bitmapGraphics.CompositingMode = CompositingMode.SourceOver;

        bitmapGraphics.FillRectangle(greyBrush, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));

        e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;

        e.Graphics.DrawImage(myBitmap, 0, 0);

    }
票数 2
EN

Stack Overflow用户

发布于 2008-10-31 18:59:06

我没有看到Winform/Webform的规范,所以我假设WebForm...

您可以使用AJAX AnimationExtender。

如果做不到这一点,一种不好的方法(这是可行的)将是接受一个QueryString,它会使页面自动导航到您想要的选项卡,并使用页面过渡。

对于Winforms,您可以使用WPF :)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/247954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档