初渉C Sharp


C Sharp or C#、マイクロソフト社の製品です.正確にはプログラミング言語です.C、C++、Javaの3つの言語と似ています.Javaと比較すると、いくつかの方法ではそっくりだと言えます.今日は簡単にCsharpを理解して、絵板のプログラムを書きました.直線、楕円、矩形を描くことができ、色を選択することもでき、再描画も実現しました.
いくつかのコアコード:
1.キャンバスオブジェクトを取得する
//          ¨
private System.Drawing.Graphics g ;
 g = this.panel1.CreateGraphics();

2、色
C Sharpには色を表すColorクラスがありますが、色を変えるにはPenクラスが必要です.
色選択のためのボタンを定義します
private static Color color = Color.Black;
private System.Drawing.Pen p = new System.Drawing.Pen(color);

//          

public  void  button4_Click(object sender, EventArgs e)
{
System.Windows.Forms.ColorDialog cd = new ColorDialog();
cd.ShowDialog();
color = cd.Color;
p = new Pen(color);
}

ボタンイベントリスナーを追加するコードは、次のとおりです.
//        
this.button4.Click += new EventHandler(button4_Click);

3、マウスリスナーの追加方法
//       ,        。
this.panel1.MouseDown += new MouseEventHandler(Form1_MouseDown);
this.panel1.MouseUp += new MouseEventHandler(Form1_MouseUp);

リスナーをさらに具体的に実現する方法.
//    
        public void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            x2 = e.X;
            y2 = e.Y;
            Shape shape = new Shape();

            if (s.Equals("Line"))
            {
                g.DrawLine(p, x1, y1, x2, y2);
                shape.x1 = x1;
                shape.y1 = y1;
                shape.x2 = x2;
                shape.y2 = y2;
                shape.item = "Line";
                shape.c = this.p.Color;
                this.list.Add(shape);

            }
            else if (s.Equals("Oval")) 
            {
                g.DrawEllipse(p, x1, y1, Math.Abs(x2-x1), Math.Abs(y2-y1));
                shape.x1 = x1;
                shape.y1 = y1;
                shape.x2 = x2;
                shape.y2 = y2;
                shape.item = "Oval";
                shape.c = this.p.Color;
                this.list.Add(shape);
            }
            else if (s.Equals("Rectangle"))
            {
                g.DrawRectangle(p, x1, y1, Math.Abs(x2 - x1), Math.Abs(y2 - y1));
                shape.x1 = x1;
                shape.y1 = y1;
                shape.x2 = x2;
                shape.y2 = y2;
                shape.item = "Rectangle";
                shape.c = this.p.Color;
                this.list.Add(shape);
            }
        }

        //    
        public void Form1_MouseDown(object sender, MouseEventArgs e) 
        {
            x1 = e.X;
            y1 = e.Y;
        }

        class Shape 
        {
            public int x1, x2, y1, y2;
            public String item;
            public Color c;
        }

4、最後に再描画する方法
C sharpには対応する再描画方法があり、OnPaint(PaintEventArgs e)
メソッドを書き換えるときは、メソッドの前にoverrideを追加します.
 //    
protected override void OnPaint(PaintEventArgs e) 
{
        for (int i = 0; i < this.list.Count;i++ ) 
        {
             Shape shape = this.list[i];
             if(shape.item.Equals("Line"))
             {
                 Pen pen = new Pen(shape.c);
                 g.DrawLine(pen,shape.x1,shape.y1,shape.x2,shape.y2);
             }
             else if (shape.item.Equals("Oval")) 
             {
                 Pen pen = new Pen(shape.c);
                 g.DrawEllipse(pen, shape.x1, shape.y1, Math.Abs(shape.x2 - shape.x1), Math.Abs(shape.y2 - shape.y1));
              }
              else if (shape.item.Equals("Rectangle"))
              {
                 Pen pen = new Pen(shape.c);
                 g.DrawRectangle(pen, shape.x1, shape.y1, Math.Abs(shape.x2 - shape.x1), Math.Abs(shape.y2 - shape.y1));
              }
        }
}

また,C Sharpのキューでは,Listは汎用型を用いることができるが,ArrayListはだめのようで,これはまだ検討されている.