【问题标题】:Show() method will not show .gif in picturebox that was hidden a second agoShow() 方法不会在一秒钟前隐藏的图片框中显示 .gif
【发布时间】:2019-10-15 10:54:07
【问题描述】:

好的,所以我创建了一个 Flowlayoutpanel,其中大约有 70 个用户控件,所有 50x50 像素的正方形,其中的图片框内有一个动画草 gif。我想让这些隐藏但不被删除,所以剩下一个空白。只需使用Hide() 并将背景颜色更改为透明,我就能够始终如一地做到这一点,因此我不必隐藏整个 UserControl。

这里出现问题,我希望这些 gif 图像重新出现在计时器上,所以我创建了一个计时器,它引用了一个方法,该方法再次使用 show() 来显示所述 gif,但如果我拒绝这样做创建一个单独的按钮来执行或不执行。

我已经搜索了很多,但我认为这只是一个问题,因为我一直在我的代码中遗漏一些东西,所以似乎没有其他问题能真正回答我的问题。因为这是一个如此简单的问题,即使问出来我也觉得有点尴尬,但是哦,好吧。

这是调用其他类中方法的定时器事件

private void GrasTerugkeerTimer_Tick(object sender, EventArgs e)
        {
            var instance = new GrasVeldUC();
            instance.TerugKeerGras();
        }

这是我设置的用于显示和隐藏 gif 所在的图片框的事件和方法

 public partial class GrasVeldUC : UserControl
    {
        public GrasVeldUC()
        {
            InitializeComponent();
            this.BackColor = Color.White;
        }

        private void GrasVeldUC_Click(object sender, EventArgs e)
        {           
            this.BackColor = Color.FromArgb(0, 255, 255, 255);
            PIBGrasUC.Hide();
        }

        private void PIBGrasUC_Click(object sender, EventArgs e)
        {
            this.BackColor = Color.FromArgb(0, 255, 255, 255);
            PIBGrasUC.Hide();
        }
        public void TerugKeerGras()
        {
            this.BackColor = Color.FromArgb(100, 255, 255, 255);
            PIBGrasUC.Show();
        }
    }

现在我希望这能正常工作并再次显示图片框,但无论我尝试如何创建一个引用另一个类中的方法的单独方法,它都行不通。 “GrasVeldUC”类中的方法确实有效,我在其中放置了一个消息框进行测试,它运行良好。

【问题讨论】:

  • This: var instance = new GrasVeldUC(); 创建一个新对象,与您在Flowlayoutpanel 中已有的对象无关。您需要 1. 存储隐藏控件的实例并在 Timer.Tick 上再次显示它,它知道该控件已隐藏多长时间 (hmmm) 2. 为每个 UC 对象提供其自己的计时器,该计时器在对象被启用时启用隐藏(:)。 3. 相同,但使用任务而不是计时器和await Task.Delay([timeout)];

标签: c# class hide show


【解决方案1】:

您可以根据需要切换picturebox.visible

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多