【发布时间】: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)];。