DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#についてアドバイスお願いします!

環境/言語:[環境/言語:[Windows 7, .NET2010 C#] .NET Frameworkのバージョン(4.0 等)]
分類:[.NET]

C#についてアドバイスお願いします!
指定されたポイントのXY座標から指定された調整値を引き、構造体のメンバに代入します。
とあるのですが、お恥ずかしい話ではありますが正直、構造体の意味ではなく、
座標から指定された調整値(adjust)を引くのは、どういった意味合いがあるのかわかりません。

それぞれの始点からラバーハンドで直線を描いた下記のコードから、
adjustをデバック実行で確認したらadjustの値が必ず10といった値が入ります。
なぜadjustの値は10なのでしょうか?またそのadjustの10の値を始点X,Yから引くのでしょうか?


座標に詳しい方がいらっしゃいましたら、わかりやすくアドバイスよろしくお願いします。


プログラムを組んだ人の意図があるかと思うので、あまり関係ないかもしれませんが、サンプルコードを記載しておきます。
public struct DrawPoints
{
public Point start_point, end_point;
public bool flag;

public void SetPoints(Point sp, Point ep, int adjust)
{
start_point.X = sp.X - adjust;
start_point.Y = sp.Y - adjust;
end_point.X = ep.X - adjust;
end_point.Y = ep.Y - adjust;
}

下記はCodeFile.csの全体的なコードです。

using System.Drawing;
using System.Windows.Forms;

namespace MyPostcard
{
public struct DrawImages
{
private Bitmap image;

public Bitmap Image
{
get { return image; }
set { image = value; }
}
public string file;
public bool flag;

public void Initialize()
{
image = null;
file = "";
flag = false;
}
}

public struct PageFont
{
public Font font;
public System.Windows.Forms.Label label;
public GetLabelDelegate method;

public void Initialize(Font f, Label l)
{
font = f;
label = l;
}

public void SetLabel()
{
label.Text = method(font);
}
}

public enum AddressData
{
person_id,
zipcode,
name,
kana_name,
address,
addressbook
}

public struct DrawPoints
{
public Point start_point, end_point;
public bool flag;

public void SetPoints(Point sp, Point ep, int adjust)
{
start_point.X = sp.X - adjust;
start_point.Y = sp.Y - adjust;
end_point.X = ep.X - adjust;
end_point.Y = ep.Y - adjust;
}

public void SetPoints(Point ep, int adjust)
{
end_point.X = ep.X - adjust;
end_point.Y = ep.Y - adjust;
}

public void SetPoints(Point ep)
{
end_point = ep;
}

public Rectangle GetRectangle()
{
int width, height;
width = System.Math.Abs(start_point.X - end_point.X);
if (start_point.X > end_point.X)
{
start_point.X = end_point.X;
}
height = System.Math.Abs(start_point.Y - end_point.Y);
if (start_point.Y > end_point.Y)
{
start_point.Y = end_point.Y;
}
return new Rectangle(start_point.X, start_point.Y, width, height);
}

public Rectangle GetDragRectangle()
{
int width = end_point.X - start_point.X;
int height = end_point.Y - start_point.Y;

return new Rectangle(start_point.X, start_point.Y, width, height);
}
}

public delegate string GetLabelDelegate(Font font);
}

以下は、MainForm.cs側のコード一部抜粋

private void drawPictureBox_MouseDown(object sender, MouseEventArgs e)
{
mouse_point.SetPoints(e.Location, e.Location, ADJUST_CROSS);
Point start_point = this.drawPictureBox.PointToScreen(e.Location);
drag_point.SetPoints(start_point, start_point, 0);
drag_point.flag = true;
}

private void drawPictureBox_MouseUp(object sender, MouseEventArgs e)
{
DrawRubberband();
drag_point.flag = false;

mouse_point.SetPoints(e.Location, ADJUST_CROSS);
DrawShape(mouse_point.start_point, mouse_point.end_point);
}

private void DrawRubberband()
{
switch (this.shapeComboBox.SelectedItem.ToString())
{
case "直線":
ControlPaint.DrawReversibleLine(drag_point.start_point,
drag_point.end_point,
this.BackColor);
break;
case "四角形":
case "楕円":
ControlPaint.DrawReversibleFrame(drag_point.GetDragRectangle(),
this.BackColor,
FrameStyle.Dashed);
break;
}
}
■No30195に返信(しぃーちゃん☆さんの記事)

> それぞれの始点からラバーハンドで直線を描いた下記のコードから、
> adjustをデバック実行で確認したらadjustの値が必ず10といった値が入ります。
> なぜadjustの値は10なのでしょうか?
ADJUST_CROSSがたぶん定数で10となっているから。


> またそのadjustの10の値を始点X,Yから引くのでしょうか?
『指定されたポイントのXY座標から指定された調整値を引き、構造体のメンバに代入します。 』となっているから。仕様です。なぜそういう仕様にしているかは
最終的にやりたい事がなんなのかを見ればわかるのではないでしょうか?
shuさんへ

以前にも丁寧なアドバイスをいただきましてありがとうございます。

やっぱりプログラムを組んだ人の意図と言いますか、仕様を理解するには最終的にやりたいことをまずよく理解して知ることですよね。

もう一度、仕様を理解することから戻りたいと思います。
ありがとうございました!!

■No30197に返信(shuさんの記事)
> ■No30195に返信(しぃーちゃん☆さんの記事)
>
>>それぞれの始点からラバーハンドで直線を描いた下記のコードから、
>>adjustをデバック実行で確認したらadjustの値が必ず10といった値が入ります。
>>なぜadjustの値は10なのでしょうか?
> ADJUST_CROSSがたぶん定数で10となっているから。
>
>
>>またそのadjustの10の値を始点X,Yから引くのでしょうか?
> 『指定されたポイントのXY座標から指定された調整値を引き、構造体のメンバに代入します。 』となっているから。仕様です。なぜそういう仕様にしているかは
> 最終的にやりたい事がなんなのかを見ればわかるのではないでしょうか?
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板