非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

C#で付箋紙を作る(第二回目) 付箋紙本体を作る

      2017/07/17

前回の記事はこちら。

 

前回は仕様に関して書いただけですが、今回より実際にプログラミングしていきましょう。

 

まずは今回の機能について

今回はパラメーターの保存の部分はさておいて、付箋紙の実体を作ります。

アプリを起動するとこんなものが現れます。もちろんどこでも掴んでドラッグすると自由に動きます。

表面をダブルクリックすると以下のようになり、テキストが書き込めます。サイズ変更もこの時にできるようになっています。

もう一度ダブルクリックすると編集モードから付箋紙に切り替わります。

右クリックすると以下のメニューが現れます。「新規付箋紙」をクリックしましょう。

はい、新しい付箋紙が現れました。

 

右クリックのメニューで「この付箋紙を捨てる」をクリックすると対象の付箋紙は消えてなくなります。

・・・というどこにでもある付箋紙の動きをします。

[ad#top-1]

ソースコード全文

こちらがソースコードです。サイズや背景色は固定で作っていますが、後々これをxmlファイルに保持して変更できるようにします。今回はあくまで付箋紙本体をザクっと作ったところまでです。

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

class Sticky{
  static void Main(){
    Application.Run(new StickyNote());
  }
}

partial class StickyNote : Form{
  private Point mousePoint; //マウスのクリック位置を記憶
  private Label label;
  private TextBox textBox;

  public StickyNote(){
    this.StartPosition = FormStartPosition.CenterScreen;
    this.Width = 200;
    this.Height = 100;
    this.Text = "付箋紙";
    this.FormBorderStyle = FormBorderStyle.None;
    this.ShowInTaskbar = false;

    this.MouseDown += new MouseEventHandler(MouseDowned);
    this.MouseMove += new MouseEventHandler(MouseMoved);
    this.DoubleClick += new EventHandler(DoubleClicked);

    this.setComponents();
  }

  private void DoubleClicked(object sender, EventArgs e){
    if(this.FormBorderStyle == FormBorderStyle.None){
      this.FormBorderStyle = FormBorderStyle.Sizable;
      this.ControlBox = false;
      this.Controls.Remove(label);
      this.Controls.Add(textBox);
      textBox.Text = label.Text;
    }else{
      this.FormBorderStyle = FormBorderStyle.None;
      this.Controls.Remove(textBox);
      this.Controls.Add(label);
      label.Text = textBox.Text;
    }
  }

  private void popClicked(Object sender, ToolStripItemClickedEventArgs e) {
    if(e.ClickedItem.Name=="closeBtn") this.Close();
    if(e.ClickedItem.Name=="newBtn") {
      System.Diagnostics.Process.Start("sticky.exe", "");
    }
  }

  private void setComponents(){
    Font font = new Font("Meiryo UI", 10);

    label = new Label(){
      Dock = DockStyle.Fill,
      Font = font,
      BackColor = Color.Pink,
      BorderStyle = BorderStyle.FixedSingle,
      Parent=this,
    };
    label.DoubleClick += new EventHandler(DoubleClicked);
    label.MouseDown += new MouseEventHandler(MouseDowned);
    label.MouseMove += new MouseEventHandler(MouseMoved);

    textBox = new TextBox(){
      Dock = DockStyle.Fill,
      Font = font,
      BackColor = Color.Pink,
      Multiline = true,
      WordWrap = false,
    };
    textBox.DoubleClick += new EventHandler(DoubleClicked);

    ToolStripMenuItem newItem = new ToolStripMenuItem(){
      Text = "新規付箋紙",
      Name = "newBtn",
    };
    ToolStripMenuItem closeItem = new ToolStripMenuItem(){
      Text = "この付箋紙を捨てる",
      Name = "closeBtn",
    };

    ContextMenuStrip pop = new ContextMenuStrip();
    pop.Items.AddRange(new ToolStripItem[] {
      newItem, new ToolStripSeparator(), closeItem
    });
    pop.ItemClicked += new ToolStripItemClickedEventHandler(popClicked);

    this.ContextMenuStrip = pop;
  }

  //マウスのボタンが押されたとき
  private void MouseDowned(object sender, System.Windows.Forms.MouseEventArgs e){
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left){
      //位置を記憶する
      mousePoint = new Point(e.X, e.Y);
    }
  }

  //マウスが動いたとき
  private void MouseMoved(object sender, System.Windows.Forms.MouseEventArgs e){
    if ((e.Button & MouseButtons.Left) == MouseButtons.Left){
      this.Location = new Point(
      this.Location.X + e.X - mousePoint.X,
      this.Location.Y + e.Y - mousePoint.Y);
    }
  }
}
 

 

次回は設定ファイルから読み込んだパラメータを反映したり、変更したパラメータを保存するところをやります。

 

関連記事

 

[ad#ad-1]

スポンサーリンク

 - C#応用編