0

実行時に動的に作成されたパネルの端に長方形を描く必要があります。まず、ヘキサコードで色を取得します。同様の質問でstackoverflowで見つけたコードを使用して、ARGBに変換しています:

string color = *getting the hexa code*
int argb = Int32.Parse(color.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);

ここで、次のコードを使用して四角形を描画しようとします。

Graphics g = panel.CreateGraphics();
Pen p = new Pen(clr);
Rectangle r = new Rectangle(1, 1, 578, 38);
g.DrawRectangle(p, r);

しかし、それは何もしません。長方形は表示されません。このコードは、パネル自体を作成し、いくつかのコントロール (コンボボックス、ボタンなど) を配置するコードの一部に含まれています。のようなものを使用してパネルに長方形を追加する必要がありpanel.Controls.Add(r);ますか? (もちろん、長方形はコントロールではないので動作しません)

4

1 に答える 1

1

これらを動的に作成しているため、グラフィック描画をパネルペイントイベントにシフトしてみてください。匿名のイベントハンドラーを使用すると簡単になります。

private void CreatePanel()
{
    Panel panel = new Panel();
    panel.Width = 600;
    panel.Height = 100;
    panel.Controls.Add(....);

    panel.Paint += (sender, e) =>
    {
        string color = "#FFE80000"; //*getting the hexa code*
        int argb = Int32.Parse(color.Replace("#", ""), NumberStyles.HexNumber);
        Color clr = Color.FromArgb(argb);
        Pen p = new Pen(clr);
        Rectangle r = new Rectangle(1, 1, 578, 38);
        e.Graphics.DrawRectangle(p, r);
    };

    Controls.Add(panel);
}
于 2012-12-29T02:08:36.707 に答える