独自の「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'
どうすればこれを機能させることができますか?