-1

picCanvas(画像ボックス) をクリックするとその場所に円が表示されるように、このプログラムをどこから変更し始めるかについていくつかのアイデアが必要です。これまでのところ、プログラムは同心円パターンを描画しています。

すべてのコードは以下のとおりです。

    private Random randClick;
    private Graphics paper;
    private Brush bbrush;
    private Pen pen;
    private int circleSize = 30;
    public Form1()
    {
        InitializeComponent();
        randClick = new Random();

        paper = picCanvas.CreateGraphics();

    }

    private void picCanvas_Click(object sender, EventArgs e)
    {
        int x, y;

        x = picCanvas.Height / 2;
        y = picCanvas.Width / 2;

        Color color = Color.FromArgb(randClick.Next(0, 256), randClick.Next(0, 256), randClick.Next(0, 256));
        Pen pen = new Pen(color);
        pen.Width = 3;

        circleSize += 10;
        paper.DrawEllipse(pen, x - circleSize/2, y - circleSize/2, circleSize, circleSize);

    }
4

3 に答える 3

2

クリックしたポイントを取得するには、MouseClick偶数およびXプロパティYを使用する必要があります。MouseEventArgs

private void picCanvas_MouseClick(object sender, MouseEventArgs e)
{
    int x, y;

    x = picCanvas.Height / 2;
    y = picCanvas.Width / 2;

    Color color = Color.FromArgb(randClick.Next(0, 256), randClick.Next(0, 256), randClick.Next(0, 256));
    Pen pen = new Pen(color);
    pen.Width = 3;

    circleSize += 10;
    paper.DrawEllipse(pen, e.X - circleSize / 2, e.Y - circleSize / 2, circleSize, circleSize);
}
于 2013-11-07T23:20:46.143 に答える
2

MouseClick最初に:ではなく、イベントをサブスクライブする必要がありClickます。この方法では、提供された のマウス位置とボタンにアクセスできますMouseEventArgs

第二に、あなたが達成しようとしている方法は永続的ではないかもしれません - ウィンドウを最小化して復元した後、DrawEllipse再び呼び出されることはありません。Paintイベントに描画メソッドを追加する必要があります。以下の例:

Point p = Point.Empty; // stores location of last mouseclick
bool clicked = false;  // is picturebox clicked (if yes - circle should be drawn)

private void pictureBox1_MouseClick( object sender, MouseEventArgs e )
{
    p = e.Location;         // capture mouse click position
    clicked = true;         // notify the circle has to be drawn
    pictureBox1.Refresh();  // force refresh of the control
}
private void pictureBox1_Paint( object sender, PaintEventArgs e )
{
    // if there's a circle to be drawn
    if ( clicked )
    {
        Graphics g = e.Graphics;   // grab graphics object
        g.DrawEllipse( Pens.Yellow, p.X - 4, p.Y - 4, 8, 8 );  // draw ellipse (a small one in this case)
    }
}
于 2013-11-07T23:21:24.897 に答える