C# カーブエディタ作成 上書き保存

前の記事

bravememo.hatenablog.com

完成図


CurveEditor 上書き保存

上書き保存

上書き保存は一回保存したかファイルを開いてないと出来ないものです。

ですので保存か開くをした際に上書き保存のEnabledプロパティをtrueにしてそれ以外はfalseにして上書き保存できるタイミングを制限します。

保存する際のパスは開くか新規で保存した際に保存データのパスを保持しています。

なおグラフに変更があったかまでは上書き保存できるかの判定には含めてないです(めんどいから)

カーソル変更

上書き保存してるときなにも表示がないとちゃんと保存できているかわからないため保存中はカーソルの表記を変えるようにしました。

カーソルの変更はthis.Cursorプロパティを変更すればできます。 上書き保存してるときは以下のカーソルにしました。

f:id:Brave345:20191219165143p:plain

ただ保存が早くてほぼ見えなかったのでThread.Sleepで少しだけ止めて読み込み中カーソルの表示時間を無理やり伸ばしています。

あとついでに点を移動させてるときもカーソルの変更をさせました。

f:id:Brave345:20191219165131p:plain

ソースコード

Formクラスまで書くと長くなるので追加したクラスだけ掲載します。

  public partial class Form1 : Form
 {
    private string editFilePath = "";  //編集中のファイルのパス
        //データの読み書きが早くてカーソルの変更がわからないので待機時間を設ける
        const int WaitTime = 300;

        /// <summary>
        /// マウスを動かしてる間の処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            m_CurvePointControl.MovePoint(e);
            numericUpDownSync();
            pictureBox1.Refresh();//再描画
            //点を移動してるときはカーソルの見た目を変える
            if (m_CurvePointControl.isMoveSelectPoint())
            {
                this.Cursor = Cursors.SizeAll;
            }
            else
            {
                if (this.Cursor != Cursors.AppStarting) this.Cursor = Cursors.Default;
            }
        }  

        /// <summary>
        /// 開く
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void menuPoen_Click(object sender, EventArgs e)
        {
            openFileDialog1.FileName = "";
            openFileDialog1.ShowDialog();
        }
        /// <summary>
        /// CSVを開いてグラフを表示
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            this.Cursor = Cursors.AppStarting;
            m_CurvePointControl.LoadGraph(openFileDialog1.FileName);
            editFilePath = openFileDialog1.FileName;
            menuSave.Enabled = true;     
            pictureBox1.Refresh();//再描画
            Thread.Sleep(WaitTime);
            this.Cursor = Cursors.Default;
        }
        /// <summary>
        /// 名前を付けて保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void menuSaveAdd_Click(object sender, EventArgs e)
        {
            saveFileDialog1.FileName = "new.csv";
            saveFileDialog1.ShowDialog();
        }
        /// <summary>
        /// ファイルをCSVに保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            this.Cursor = Cursors.AppStarting;
            m_CurvePointControl.SaveGraph(saveFileDialog1.FileName);
            editFilePath = saveFileDialog1.FileName;
            menuSave.Enabled = true;
            Thread.Sleep(WaitTime);
            this.Cursor = Cursors.Default;
        }
        /// <summary>
        /// 上書き保存
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void menuSave_Click(object sender, EventArgs e)
        {
            this.Cursor = Cursors.AppStarting;
            m_CurvePointControl.SaveGraph(editFilePath);
            Thread.Sleep(WaitTime);
            this.Cursor = Cursors.Default;
        }
}

終わりに

これであとは戻る、進む機能とこのグラフをほかのアプリ側で読み込む機能で最初に求めていた機能は完成します。 だがここからがどうすれば実装できるかあまり検討がついてないので実装には時間がかかりそう

次の記事