LogicalInSpace

ITについて

DataGridVeiw

2009-01-31 13:26:03 | 家計簿ソフト
//データセットをセット
DataGridView.DataSource = Ds;
//名前をセット
DataGridView.DataMember = "Logical";
//読み取り専用にする
DataGridView.ReadOnly = true;

//列の幅を設定する
DataGridView.Columns[0].Width = 60;

//=== 列のヘッドの表示位置
DataGridView.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
//=== 列のセルの表示位置
DataGridView.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
//=== 列のヘッドの表示(#,###)
DataGridView.Columns[0].DefaultCellStyle.Format = "N0";
//=== 列の固定 (0-1の列を固定にする)
DataGridView.Columns[1].Frozen = true;

//===== セルの色の設定 =====
DataGridView[2, 2].Style.BackColor = Color.GreenYellow;

===== 2009/02/03 追記 =====
SQL-Server 2005 のSQL文を書くぐらいしかないので、他には技術的なことは特にありませんでしたので、これで家計簿のソフトを書き終えます。

オブジェクト指向とは・・・?

2009-01-27 12:14:02 | オブジェクト指向
オブジェクト指向とは・・・? (VC#より)
※サンプルプログラムはインデントに全角を使用しています。
※なので、そのままコピーしては使用できません。

手続き型プログラマーのための説明をしたいと思います。

クラスは、メンバ変数(変数)またはメソッド(関数)をまとめて取り扱うことが出来ます。

<サンプル1>
static void Main(string[] args)
{
  CAdd iAdd = new CAdd();

  iAdd.x = 2;
  iAdd.y = 3;
  Console.WriteLine(Add.FunAdd()); //結果 5
}

class CAdd
{
  public int x;
  public int y;

  public int FunAdd()
  {
    retrun (x + y);
  }
}

class CAddは、型(枠)だけを決めているので、メモリには格納されていません。
CAdd iAdd = new CAdd(); のiAddのインスタンスを生成するときに、初めてメモリに格納されます。
iAdd.x、iAdd.y、iAdd.FunAdd()が使用できます。(publicだからですけど)

※class名 インスタンス名 = new class名 よりクラスを使用します。

手続き型では、上⇒下へ動きます。
オブジェクト指向では、上⇒インスタンスを生成⇒クラスより処理⇒下へ動きます。


ところで、Class CAddのx、yは、publicの必要はあるでしょうか?
Class CAddでは、FunAddの処理だけが必要です。
次のように書き換えることが出来ます。

<サンプル2>
static void Main(string[] args)
{
  CAdd iAdd = new CAdd();

  Console.WriteLine(iAdd.FunAdd(2, 3)); //結果 5
}

class CAdd
{
  private int x;
  private int y;

  public int FunAdd(int t, int u)
  {
    x = t;
    y = u;
    return (x + y);
  }
}

クラスには、初期化に便利な機能があります。
それは、コンストラクタです。

<サンプル3>
static void Main(string[] args)
{
  CAdd iAdd = new CAdd(2, 3);

  Console.WriteLine(iAdd.FunAdd()); //結果 5
}

class CAdd
{
  private int x;
  private int y;

  //コンストラクタ
  public CAdd(int t, int u)
  {
    x = t;
    y = u;
  }

  public int FunAdd()
  {
    return (x + y);
  }
}

class CAddのpublic CAdd(int t, int u)の部分です。
コンストラクタは、クラス名と同じ名前です。 お互いにCAddですね!
C言語では、同じ関数でも引数が異なると違います。
コンストラクタもメソッド(関数)なので、同じ考え方になります。
※コンストラクタは引数なしでもいいです。

Mainの処理では、CAdd iAdd = new CAdd(2, 3);と宣言します。


共通メンバ変数、共通メソッド(関数)についてのクラスの書き方です。
<サンプル4>
static void Main(string[] args)
{
  C_01 C1 = new C_01();
  C_02 C2 = new C_02();

  Console.WriteLine(C1.Fun01(2, 3)); //結果 15
  Console.WriteLine(C2.Fun02(5, 7)); //結果 2
}

//===== 共通メンバ変数、共通メソッドのクラス
class CAdd
{
  protected int x;
  protected int y;

  public int FunAdd()
  {
    return (x + y);
  }
}

class C_01 : CAdd
{
  public int Fun01(int t, int u)
  {
    x = t;
    y = u;
    return (FunAdd() + 10);
  }
}

class C_02 : CAdd
{
  public int Fun02(int t, int u)
  {
    x = t;
    y = u;
    return (FunAdd() - 10);
  }
}

継承を使うと、共通メンバ変数、共通メソッドを使用できます。
class C_01 : CAdd
class C_02 : CAdd
親クラスはCAdd、子クラスはC_01、C_02となります。
親クラスのCAddが共通(メンバ変数、メソッド)になります。

継承の場合は、親クラスの変数と関数はprivateを除いて、すべて受け継がれます。
protectedは、クラスの継承内で使用することができます。

<まとめ>
今回は、Mainに処理を書いています。
その処理をクラス化しています。

では、Windowsの場合はイベントに対して処理を書くと思います。
イベントの処理をクラス化して、クラスに処理を書くイメージになります。

また、クラスは、異なるクラスであれば、同じ名前を使用しても影響がありません。
グローバル変数を意識することがなくなりました。

名前のつけ方

2009-01-24 14:05:59 | 家計簿ソフト
フォームでも、クラスでも、分かりやすい名前をつけています。

F01_FormName、C01_ClassNameという感じです。
Fxx_XXX, Cxx_XXXという感じで名前を付けると、きちんと並び替えてもらえるので、後から見ても分かりやすいです。

//xxxxx
という感じでコメントを必ずつけましょう。
コメントは重要です。 他人が見ても分かりやすい方がいいです。

例えば

int [] getID = new int [5];
for (int i = 0; i <10; i++)   getID[i] = 0;
}


int [] getID = new int [5];

//===== 初期化
for (int i = 0; i <10; i++)   getID[i] = 0;
}

これだと、内容を見なくても初期化をしているのが分かりますよね!

画面遷移

2009-01-15 19:41:09 | 家計簿ソフト
家計簿ソフトの画面遷移の方法について

F01_Frm F01 = new F01_Frm();

F01.Show();
this.Hide();

新しい画面のインスタンスを作成して、F01.Show()とします。
そして、this.Hide()より画面を隠してしまいます。

this.Close()とすると、thisを指しているインスタンスが消えるので、終了してしまいます。

家計簿ソフト

2009-01-12 16:00:20 | 家計簿ソフト
家計簿ソフトが出来上がりました。

DataGridView(Fremework 2.0から導入)を使ったので、初めて経験でした。
でも、意外と簡単だったので開発者には開発しやすい感じでした。
Excelのように、列の固定が出来るのは、ビックリしました。
しかし、業務ではたぶん、違うソフトを使うと思います。

コンボボックスをデータベースと連結させました。 これも、意外と簡単でした。
後は、入力を不可にして、選ぶだけのプロパティがあったのは、良かったです。

OOP(オブジェクト指向)で開発しました。 なるほど、多人数で開発はしやすいと感じました。
別のクラスに、同じ変数名、メソッド名をつけても、影響がないのがバグが少なくなることが、分かりました。
共通の変数、メソッドを、親クラスにして、子クラスの継承すれば、親クラスが共通関数として、使用できるので、とても便利です。

良く考えてみると、OOPは、メモリの消費が激しいと感じます。
最近のPCでは、そんなにメモリを意識しないですむように、なっているので気にしないと思いますけど、メモリを意識するならば、C言語より開発した方が良さそうです。

とても、楽しかったです。

年末年始

2009-01-06 15:33:13 | 家計簿ソフト
私の年末年始は、家の家計簿ソフトを作成しています。
言語:Visual C#.NET 2008
データベース:SQL-Server 2005

表示には、DataGridViewを使っています。
DataGridViewは、C#.NET 2005(Framework 2.0)から導入されました。
初めて使うので、調べながら作っています。

get、setはしてませんが、オブジェクト指向風に作成しています。
慣れると、とても便利なことが分かりました。

結構、時間がかかる物で、出来上がりません。

家計簿ソフトを作成しているので、しばらくはブログの更新が出来ません。
また、しばらくはお休みする予定です。

Happy New Year!!!

2009-01-01 00:22:44 | その他
Happy New Year!!!

新しい新年を迎えました。

楽しいプログラミングを楽しんで欲しいと思います。
少しでも、プログラムの楽しんで欲しいと思います。

自宅でいるので、あまり最新の情報は手に入らないかも知れませんが、分かる範囲で書いて行こうと思います。

皆さんがよい新年を迎えられるように、願っています。