我有一个应用程序,我在其中使用我自己的“ThemeManager”类来设置一些表单的样式。相当基本的东西——我习惯于为 web 应用程序使用 CSS,并且正在将其编写为表单应用程序(由于各种原因不能是 WPF)。
因此,我正在使用 ThemeManager 类对表单进行样式设置,我可以在其中传递要设置样式的表单:
来自主题管理器的示例:
public void setTheme(Form sender)
{
// 设置背景和前景色
sender.BackColor = ColorTranslator.FromHtml("#222222");
sender.ForeColor = ColorTranslator.FromHtml("#A6CE39");
// Loop through controls on form
foreach (Control c in sender.Controls)
{
if (c is Button) // Set the button style
{
Button btn = c as Button;
btn.BackColor = ColorTranslator.FromHtml("#222222");
btn.FlatStyle = FlatStyle.Flat;
btn.FlatAppearance.BorderSize = 0;
}
if ((c is ComboBox) || (c is TextBox)) // Set dropdown and textbox style
{
c.ForeColor = ColorTranslator.FromHtml("#A6CE39");
c.BackColor = ColorTranslator.FromHtml("#2e2e2e");
}
}
}
表单没有标题栏和边框,但我想在它们上设置一个非常简单的边框。目前我通过在每个表单上设置一个 onPaint 事件来做到这一点:
public void RemoteControl_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(ColorTranslator.FromHtml("#A6CE39"), 3),
this.DisplayRectangle);
}
有了这个在设计师:
this.Paint += new System.Windows.Forms.PaintEventHandler(this.RemoteControl_Paint);
但是,我必须在每个表单上执行此操作,而我宁愿通过主题管理器执行此操作。
我尝试将其添加到 SetTheme 方法中:
sender.Paint += new PaintEventHandler(MyForm_Paint);
并将此方法添加到 ThemeManager.cs 类中:
private void MyForm_Paint(Form sender, PaintEventArgs e)
{
e.Graphics.DrawRectangle(new Pen(ColorTranslator.FromHtml("#A6CE39"), 3),
sender.DisplayRectangle);
}
这不起作用 - 我收到一个过载错误:
No overload for 'MyForm_Paint' matches delegate 'System.Windows.Forms.PaintEventHandler'
我怎样才能使这项工作?