C#についてアドバイスお願いします!
- 題名: C#についてアドバイスお願いします!
- 著者: しぃーちゃん☆
- 日時: 2012/04/02 14:01:23
- ID: 30195
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C#についてアドバイスお願いします!
- 著者: shu
- 日時: 2012/04/02 14:33:00
- ID: 30197
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C#についてアドバイスお願いします!
- 著者: しぃーちゃん☆
- 日時: 2012/04/02 15:01:03
- ID: 30198
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.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;
}
}