2017-10-30 4 views
0

ミニペイント 3つのボタン(矩形、円、線)を持つアプリケーションを作成しようとしています。私はマウスで形状を選択して移動することに問題があります。 Cでマウスのパネルで円や四角形のような描画された図形を選択する方法#

class rectangle : shape 
{ 
    public int length { get; set; } 
    public int width { get; set; } 

    public override void Draw(Graphics g) 
    { 
    g.DrawRectangle(new Pen(color), new Rectangle(startx, starty, width,length)); 
    } 
} 

は今、私は長方形の任意の部分をクリックするたびに、私のpanel1_MouseDownが私のパネルで四角形を選択します:たとえば、私は形から色、太さを継承し、この長方形のクラスを持っています。 描画された図形はすべてlstShapsOnFormという名前のリストに追加され、drawableは抽象メソッドdrawとプロパティx yを持つ抽象クラスです。

abstract class Drawable 
{ 
    public int x { get; set; } 
    public int y { get; set; } 
    public abstract void draw(Graphics g); 
} 

private void panel1_MouseDown(object sender, MouseEventArgs e) 
{ 
    foreach (Drawable o in lstShapsOnForm) 
    { 
     if (e.Location.X >= o.x || e.Location.X < o.x) 
     propertyGrid1.SelectedObject = o;  
    } 
} 

どうすればいいですか?テストに続いて

abstract class Drawable 
{ 
    public int x { get; set; } 
    public int y { get; set; } 
    public abstract void draw(Graphics g); 
    public abstract bool IsInside(int x, int y); 
} 

+0

[円を描いた後のコントロールとして円をどのように扱うことができますか? - シェイプの移動と選択](https://stackoverflow.com/q/38345828/3110834)またはこの記事の「シェイプのドラッグ&ドロップ方法」(https://stackoverflow.com/q/38747027/3110834)を参照してください。 –

+0

ありがとうございました:) – Zahra

+0

あなたは大歓迎です:) –

答えて

0

最も簡単な方法は、彼らがクリックされているかどうかを知るために、それ形状の責任にするので、IsInside法などを追加することであるために

var shapeHit = lstShapsOnForm.FirstOrDefault(s => s.IsInside(e.Location.X, e.Location.Y));  
if (shapeHit != null) 
    propertyGrid1.SelectedObject = shapeHit; 

あなたが幅と高さを知っていると仮定して(あなたが描いたならば)、xとyのプロパティが左上にあると仮定すると、次のようなsomehtingになります:

public override bool IsInside(int mouseX, int mouseY) 
{ 
    return 
     mouseX >= x && 
     mouseX <= x + width && 
     mouseY >= y && 
     mouseY <= y + height; 
} 

サークルとラインの場合.....私は、x/yポイントがサークルの中にあるかどうかをGoogleが判断する方法を提案します。半径(円の場合)と2つの線の点(線の場合)を使用したテストが含まれます

+0

しかし、私はe.locationが形の中にあるかどうかを知る方法がわかりません – Zahra

+0

いずれかの長方形、円、線、またはそれらのすべて? – mikelegg

+0

それらのすべてがパネル上に描かれています。 – Zahra

関連する問題