私はWinFormsアプリケーションを持っています。特定の領域の上に円をプログラムで描きたいと思っています。私はいくつかの問題に直面しており、どんな洞察も高く評価されます!フォームの上に円を描く
1)私は円を描き、クリアするためのコードを持っていますが(下を参照)、サークルはすべてのコントロールの背後に描かれています。どのような場合でも、彼らを「最上位」として描きたがっています。これはどうすればいいですか?
2)私のアプリが起動したら、すぐに描画する必要があるサークルがいくつかあります。 Form Loadイベントで描画してみましたが、無駄です。しかし、ここ(Form graphics not set when form loads)については、Paintイベントで描画しています。これは合理的にうまくいきますが(初めてのことを確認するブールで)、this.Invalidate();
(円が描画されていないため)に問題があるようです。より良い方法がありますか?あなたの条件を達成するように複雑で、まだ動作していないアプローチの
private void parseText()
{
this.Invalidate();
List<string> lines = new List<string>(richTextBoxRaw.Text.Split(new string[] { Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries));
foreach (string s in lines)
{
switch (s)
{
case "<draw1>":
drawCircle(107, 26, 25);
break;
default:
break;
}
}
}
private void drawCircle(int x, int y, int transparency)
{
if (transparency < 0)
transparency = 0;
else if (transparency > 255)
transparency = 255;
SolidBrush brush = new SolidBrush(Color.FromArgb(transparency, 255,0,0));
Graphics graphics = this.CreateGraphics();
graphics.FillEllipse(brush, new Rectangle(x, y, 25, 25));
brush.Dispose();
graphics.Dispose();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (starting)
parseText();
starting = false;
}
。 1.ペイントイベントから(フォームロードではなく)コードを呼び出す必要があります。そのため、ウィンドウが画面の更新を必要とするときに常に正しく更新されます。 2.フォームには独自のペイントルーチンを持つコントロールがあることを忘れないでください。インクをきれいにします。コントロールのペイントイベントに登録し、コントロールに描画することができます。今度は、フォーム上のすべてのコントロール(Zオーダーゼロ)をオーバーレイしてそこにサークルを描画するusercontrolを作成することもできますが、次にイベントをUserControlの下のコントロールに渡すロジックが必要です。簡単な解決策はありません。 – Vikhram