|
■No82596 (夜叉丸 さん) に返信 > スクリーン上にエリアの枠を描画するための方法がわからないのです。
ControlPaint.DrawReversibleFrame メソッドで描画してみました。 今回は PictureBox 領域内に限定していますが、自フォーム外の座標も指定できます。
public partial class Form1 : Form { Point posMouseDown, posMouseUp; public Form1() { InitializeComponent(); pictureBox1.MouseDown += (object sender, MouseEventArgs e) => { if (e.Button == MouseButtons.Left) { posMouseDown = MousePosition; } }; pictureBox1.MouseMove += (object sender, MouseEventArgs e) => { if (e.Button == MouseButtons.Left) { posMouseUp = MousePosition; ((Control)sender).Refresh(); DrawRegion(posMouseDown, posMouseUp, FrameStyle.Dashed); } }; pictureBox1.MouseUp += (object sender, MouseEventArgs e) => { if (e.Button == MouseButtons.Left) { ((Control)sender).Refresh(); DrawRegion(posMouseDown, posMouseUp, FrameStyle.Thick); } }; } private void DrawRegion(Point start, Point end, FrameStyle style) { Rectangle rect = new Rectangle( Math.Min(start.X, end.X), Math.Min(start.Y, end.Y), Math.Abs(start.X - end.X), Math.Abs(start.Y - end.Y) ); rect.Intersect(pictureBox1.RectangleToScreen(pictureBox1.ClientRectangle)); ControlPaint.DrawReversibleFrame(rect, Color.Black, style); } }
■No82594 (夜叉丸 さん) に返信 > クリックしたままマウスを移動すると ドラッグのことでしょうか?
> エリアが表示されますよね。 > これってどうやってするのでしょうか? Desktop の実体は ListView であり、ListView 自体に ドラッグで描画するための仕組みが用意されていますね。
> 前回 Capture = true を使用してフォーム外のマウスを > 取得しようとしたのですが、うまくいきませんでした
「前回」と言うと、No82429 のことでしょうか。
[2017/01/10 15:38:18] No82429 : フォーム外のクリックでフォームを閉じたい [2017/01/11 18:05:14] No82488 : フォームタイトルバーのマウスイベント取得について [2017/01/19 08:39:48] No82583 : QRコードの読取について [2016/12/08 17:41:11] No82082 : 違いはなんなのでしょうか? [2016/12/07 17:20:15] No82077 : 複数選択するにはどうすればよいのでしょうか?
たとえば、ComboBox のドロップダウンリストや、ツールチップなどのように、 フォームの外がクリックされた時にフォームを閉じたいというのなら、 Deactivate イベントで代用できるかもしれません。 var f = new Form2(); f.FormClosing += delegate { this.Activate(); }; f.Deactivate += delegate { f.Close(); }; f.Show(this);
|