创建播放动画 GIF 的 Windows Forms(C#) 工具提示
Create Windows Forms(C#) tooltip that plays animated GIF
我试图在用户将鼠标悬停在 Windows 表单应用程序的某些图标上时显示 GIF。 GIF 必须显示在表单的实际区域之外,完美的解决方案看起来像 IsBallon 设置为 True 的工具提示,完美环绕 GIF。
在类似问题 中修改解决方案后,我能够在工具提示中只渲染一个图像。但是,无论出于何种原因,这都不会为 GIF 设置动画,而且我尝试遍历 GIF 帧的尝试到目前为止都失败了。
我在搜索结果表单上完成了此操作。将鼠标悬停在图像上会弹出同一图像的放大版本。这是通过在 icon/image 的 MouseEnter 事件期间创建一个带有 Dock.Fill PictureBox 的表单来完成的。我将新的 PictureBox 保存在原 icon/image 的 Tag 属性 中。在 MouseLeave 上,我刚刚处理了表单和 PictureBox。
这是我的代码,请根据您的需要进行修改:
void pb_MouseEnter( object sender, EventArgs e )
{
// sender was my original image. You may need to perform type checks
PictureBox pb = ((PictureBox)sender);
// Ignore empty images
if (pb.Image == null)
return;
Form f = new Form();
f.ControlBox = false;
f.Enabled = false;
f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
// Modify to suit your location
f.Location = new Point( pb.TopLevelControl.Location.X + pb.Location.X - f.Width - 25, MousePosition.Y - f.Height / 2 );
f.ShowInTaskbar = false;
f.Size = new System.Drawing.Size( 300, 256 );
f.StartPosition = FormStartPosition.Manual;
f.TopMost = true;
PictureBox pb2 = new PictureBox();
pb2.Dock = DockStyle.Fill;
pb2.Image = (Image)pb.Image.Clone();
pb2.SizeMode = PictureBoxSizeMode.Zoom;
f.Controls.Add( pb2 );
pb.Tag = pb2;
f.Show();
this.Focus();
}
void pb_MouseLeave( object sender, EventArgs e )
{
PictureBox pb = ((PictureBox)sender);
if (pb.Tag != null)
{
PictureBox pb2 = (PictureBox)pb.Tag;
Form f = (Form)pb2.Parent;
pb2.Dispose();
f.Dispose();
pb.Tag = null;
}
}
我试图在用户将鼠标悬停在 Windows 表单应用程序的某些图标上时显示 GIF。 GIF 必须显示在表单的实际区域之外,完美的解决方案看起来像 IsBallon 设置为 True 的工具提示,完美环绕 GIF。
在类似问题
我在搜索结果表单上完成了此操作。将鼠标悬停在图像上会弹出同一图像的放大版本。这是通过在 icon/image 的 MouseEnter 事件期间创建一个带有 Dock.Fill PictureBox 的表单来完成的。我将新的 PictureBox 保存在原 icon/image 的 Tag 属性 中。在 MouseLeave 上,我刚刚处理了表单和 PictureBox。
这是我的代码,请根据您的需要进行修改:
void pb_MouseEnter( object sender, EventArgs e )
{
// sender was my original image. You may need to perform type checks
PictureBox pb = ((PictureBox)sender);
// Ignore empty images
if (pb.Image == null)
return;
Form f = new Form();
f.ControlBox = false;
f.Enabled = false;
f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
// Modify to suit your location
f.Location = new Point( pb.TopLevelControl.Location.X + pb.Location.X - f.Width - 25, MousePosition.Y - f.Height / 2 );
f.ShowInTaskbar = false;
f.Size = new System.Drawing.Size( 300, 256 );
f.StartPosition = FormStartPosition.Manual;
f.TopMost = true;
PictureBox pb2 = new PictureBox();
pb2.Dock = DockStyle.Fill;
pb2.Image = (Image)pb.Image.Clone();
pb2.SizeMode = PictureBoxSizeMode.Zoom;
f.Controls.Add( pb2 );
pb.Tag = pb2;
f.Show();
this.Focus();
}
void pb_MouseLeave( object sender, EventArgs e )
{
PictureBox pb = ((PictureBox)sender);
if (pb.Tag != null)
{
PictureBox pb2 = (PictureBox)pb.Tag;
Form f = (Form)pb2.Parent;
pb2.Dispose();
f.Dispose();
pb.Tag = null;
}
}