0

私のプロジェクトにはピクチャーボックスがあり、ユーザーは最初に画像の表示ボタンをクリックして画像を選択します。この画像は、画像の表示ボタンの前にあるテキストボックスの画像名に従って表示されます。小さな四角形。ポイントを選択した後、ユーザーは曲線を描くボタンをクリックし、グラフィック クラスの Drawclosedcurve メソッドを使用したため、滑らかな曲線が描かれます。私の質問は、ユーザーが誤ってポイントをクリックし、そのポイントを元に戻したいとしたら、解決策は何ですか??

4

1 に答える 1

0

を使用してアクションを保存することを考えましたかstack。たとえば、クラスを作成してアクションを保存し、アクション タイプを列挙します。

enum ActionType
{
    DrawPoint = 1,
    DrawCurve = 2
}

public class Action
{
    public int X { get; set; }
    public int Y { get; set; }
    public ActionType Action { get; set; }
}

次に、ユーザーがクリックしてポイントを作成するたびに、これからAction好きなものを作成pushします。Stack

Stack eventStack = new Stack<Action>();

// capture event either clicking on PictureBox or clicking on Curve button
// and convert to action

Action action = new Action() {
    X = xPosOnPictureBox,
    Y = yPosOnPictureBox,
    ActionType = ActionType.DrawPoint
};

eventStack.push(action);

その後、スタックに基づいて画像ボックスのレンダリングに進むことができます。popスタックから最新のアクションを単純に元に戻し、スタックPictureBoxに残っているイベントから再描画する場合。

protected void btnUndo_Click(object sender, EventArgs e)
{
    var action = eventStack.pop();

    // ignore action as we just want to remove it

    // now redraw your PictureBox with what's left in the Stack
}

このコードは明らかにテストされておらず、構造に組み込む必要がありますが、問題なく動作するはずです。

于 2012-08-24T08:06:44.853 に答える