前回の記事の続き。
effect.hatenablog.com
色んなツールで定番の機能として、ラインを引く際にShiftキーを押せば縦または横に真っすぐになるよう補正されるというのがあります。
それを取り入れてみました。
考え方としては、開始位置と終了位置の長さを出して「Math.Abs」関数で絶対値にしてXとYを比較して、Xの方が大きければ横線・Yの方が大きければ縦線と判断して補正してあげます。
// マウスドラッグ中 private void PictureBox1_MouseMove(object sender, MouseEventArgs e) { // マウスの左ボタンが押されている場合のみ処理 if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left) { // Shiftキーが押されていれば直線にする if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) { // 比較のためにXとYの移動距離を算出 int checkPosX = Math.Abs(cursorPos().X - startPoint.X); int checkPosY = Math.Abs(cursorPos().Y - startPoint.Y); // XとYのどちらが長いか比較する if (checkPosX >= checkPosY) // 横長の場合 { // 座標を取得 endPoint.X = cursorPos().X; endPoint.Y = startPoint.Y; } else // 縦長の場合 { // 座標を取得 endPoint.X = startPoint.X; endPoint.Y = cursorPos().Y; } } else { // 座標を取得 endPoint.X = cursorPos().X; endPoint.Y = cursorPos().Y; } // 描画 DrawLine(startPoint, endPoint); } }