我的问题与此相关 如何显示深色背景的弹出消息
但主要问题是我想在面板内添加淡入淡出形式和焦点形式。我在很多论坛上问过这个问题,但没有人回答。我正在使用面板打开和关闭表单,但有人建议我创建一个用户控件,但没有人告诉我如何设计该用户控件以及如何使用它。如果这里有人有时间帮助我,请这样做。
我的表单中有一个面板,并且在面板内打开了一个名为 form1 的表单。我想在这个 form1 上添加这个淡入淡出表单,以便 form1 的控件应该部分可见,当发生这种情况时,我想打开一个焦点表单,其中我刚刚共享了链接。我想要的就是这个。
让我看看我是否遵循。
我的表单中有一个面板
在面板中打开了名为 form1 的表单
public partial class MainForm : Form
{
.
.
.
Form1 form1 { get; } = new Form1
{
StartPosition = FormStartPosition.Manual,
};
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
form1.Location = panel1.PointToScreen(new Point(panel1.Right - 370, 50));
form1.Show(this);
}
}
我想在form1上添加这个淡入淡出表单,这样form1的控件应该部分可见,当这种情况发生时
淡出形态
class FadeForm : Form
{
const float TARGET_OPACITY = 0.8F;
public FadeForm()
{
BackColor = Color.DarkGray;
FormBorderStyle = FormBorderStyle.None;
Padding = new Padding(0, 0, 0, 20);
var linkLabel = new LinkLabel
{
Dock = DockStyle.Bottom,
Text = "https://www.google.com",
TextAlign = ContentAlignment.MiddleCenter,
Height = 50,
};
linkLabel.LinkClicked += (sender, e) =>
{
MessageBox.Show($"Do something with {linkLabel.Text}");
};
Controls.Add(linkLabel);
}
public new async void Show(IWin32Window owner)
{
base.Show(owner);
if (owner is Form parent)
{
Bounds = parent.RectangleToScreen(parent.ClientRectangle);
// Animate
for (float f = 0; f <= TARGET_OPACITY; f += 0.05F)
{
Opacity = Math.Pow(f, 2);
await Task.Delay(TimeSpan.FromSeconds(0.01));
if (!Visible) break; // If form hides during animation.
}
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
e.Cancel = true;
Hide();
}
}
主窗体
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
foreach (var button in panel1.Controls.OfType<Button>())
{
button.MouseEnter += (sender, e) =>
{
FadeForm.Hide();
FadeForm.Show(form1);
switch (button.Name)
{
case nameof(button1): FadeForm.BackColor = Color.LightBlue; break;
case nameof(button2): FadeForm.BackColor = Color.LightGreen; break;
case nameof(button3): FadeForm.BackColor = Color.LightCoral; break;
}
};
}
Disposed += (sender, e) => FadeForm.Dispose();
}
Form1 form1 { get; } = new Form1
{
StartPosition = FormStartPosition.Manual,
};
FadeForm FadeForm { get; } = new FadeForm();
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
form1.Location = panel1.PointToScreen(new Point(panel1.Right - 370, 50));
form1.Show(this);
}
}
我想打开一个焦点表单,其中我刚刚分享了链接此时我的水晶球对于你下一步想要做什么变得模糊,但希望这能为你提供一个起点。