0

ディレクトリから画像のリストを取得し、ファイル名をに保存していますList<String>。次に、これらのそれぞれをループして、それぞれにを作成しPictureBox、同じクリックイベントをそれぞれに追加します。コントロールはにありますFlowLayoutPanel

foreach(String file in this._files){
    PictureBox box = new PictureBox();
    box.Height = 50;
    box.Width = 50;
    box.ImageLocation = file;
    box.SizeMode = PictureBoxSizeMode.Zoom;
    box.Click += this.PictureClick;

    this.flowLayoutPanel1.Controls.Add(box);
}

private void PictureClick(object sender, EventArgs e){
    // how do I get the one that has been clicked and set its border color
}

クリックしたものを取得して境界線の色を設定するにはどうすればよいですか?

4

2 に答える 2

5

senderPictureBoxクリックされたものです:

private void PictureClick(object sender, EventArgs e) {
    PictureBox oPictureBox = (PictureBox)sender;
    // add border, do whatever else you want.
}
于 2012-12-20T18:49:52.857 に答える
2

senderパラメータは確かにあなたの、PictureBoxオブジェクトへのダウンキャストです。この方法でアクセスします。

var pictureBox = sender as PictureBox;

OnPaintPictureBoxのメソッドをオーバーライドするか、Paintイベントを処理する必要があるため、その周囲に境界線を描画するのは簡単ではありません。

このクラスを使用して、画像の周囲に黒い細い境界線を描くことができます。

public class CustomBorderPictureBox : PictureBox
{
    public bool BorderDrawn { get; private set; }

    public void ToggleBorder()
    {
        BorderDrawn = !BorderDrawn;
        Invalidate();
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
        if (BorderDrawn)
            using (var pen = new Pen(Color.Black))
                pe.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1);
    }
}
于 2012-12-20T18:49:27.357 に答える