前回、IDList for CSはほぼ出来上がっている(実際動作試験中)、と豪語したので、そのデビューを記念して写真集にしましょう。
1.起動
「コントロールに専用ファイル入出力を持たせるのはあまりない」「ユーザーコントロールのメインウィンドウに任せるべき」という批判があろうとは思いますが、私は「平文、暗号文でのID、パスワード情報のコピーは作れでも、システムが使用するファイルはそのコントロールに任せたい」と考え、idListクラス(DataGridViewから派生させた機能拡張コントロール)には、
(1)システムデータファイルを保存するフォールダーを作成し、
(2)(最初は未作成のでエラーになりますが)作成したID・パスワードファイルを自動的に暗号化、隠蔽化して終了時に保存し、
(3)次からの起動で自動的に読み込むようにしています。
という機能を持たせることにしました。以下の画像はテスト中のものですが、オリジナルのC++とBCCSkelton製のIDListのデータファイル(Shift-JISベースの文字列)を借りてきて、起動時に読み込んでいます。
画面を見るとわかるように、SDIウィンドウnoIDListにはツールバーが付いており、全てのメニュー処理がツールバーボタンでできるようになっています。
2.ファイル操作
基本的にこのアプリは「何かの会員やサービスを受ける際に登録するIDとパスワードの個人的管理」を目的としており、基本簡素なデータベースと考えていただいて結構ですので、取り扱うデータは唯一「ユーザーのIDとパスワード情報(その他個人情報を含む)」という高いセキュリティ対象情報になります。従って(特に平文での)安易なコピーは望ましくないのですが、バックアップ目的や個人の事情により必要な場合もあろうかと、平文、暗号文共に読み書き機能は付けました。
ご注意:最初にIDList for CSを立ち上げ、データを入力して終了させると、IDListFilesフォールダーが生成されますが、出来ていると思ったシステムデータファイルが見えません。
え"~
とびっくりするでしょうが、ここで本当にないのかPowershellで"dir"コマンドを実行しても何も表示されません。しかし、"dir "コマンドに「隠しファイル」も表示する"-Force"オプションを付けると、
IDList.datがちゃんと存在していることが分かります。又IDListを再度立ち上げてIDList.datが上書きされるとExplorerにも
表示されるようになるみたいです。(尚、ファイルの左下の変な箱は最初「暗号化されて」いるという意味かと思ったのですが、どうもOneDriveがらみみたいですね。MS Learn)
3.編集操作
これがデータベースの基本機能なのですが、「個人のID・パスワード情報の管理」の為、基礎となる情報単位を、"idItem"というクラスに設定し、次のように"メンバーシップ"、"ログインID"、"パスワード"、"備考"という文字列プロパティをメンバーに持っています。(オリジナル作成時はもっと何か付加すべきかと思案しましたが、以後5年間実用してきて、これで必要 && 十分だと確信しています。)(注)
注:尚、Google Geminiによれば、DataGridViewが"List<T>"を含むデータ集合をDataSourceメソッドで読み込むためには「"また、これらのオブジェクトにバインドするときは、公開プロパティのみをバインドでき、公開フィールドはバインドできません。"(英語原文: "Also, when binding to these objects, only the public properties (not public fields) can be bound.")」(Geminiが引用した出典-ただし和訳、英語原文共に引用されている文は見当たりませんでした<爆>)
///////////////////////////////////
//IDListで使用するIDデータのクラス
///////////////////////////////////
public class idItem
{
[DisplayName("メンバーシップ")]
public string Membership {get; set;}
[DisplayName("ログインID")]
public string ID {get; set;}
[DisplayName("パスワード")]
public string Password {get; set;}
[DisplayName("備考")]
public string Remark {get; set;}
//比較メソッドの定義
public int CompareMembershipTo(idItem other)
{
if(ReferenceEquals(other, null)) //参照比較
return 1; //thisが大きい
//0なら等しい、負なら小さい、正なら大きい
return this.Membership.CompareTo(other.Membership);
}
public int CompareIDTo(idItem other)
{
if(ReferenceEquals(other, null)) //参照比較
return 1; //thisが大きい
//0なら等しい、負なら小さい、正なら大きい
return this.ID.CompareTo(other.ID);
}
public int ComparePasswordTo(idItem other)
{
if(ReferenceEquals(other, null)) //参照比較
return 1; //thisが大きい
//0なら等しい、負なら小さい、正なら大きい
return this.Password.CompareTo(other.Password);
}
public int CompareRemarkTo(idItem other)
{
if(ReferenceEquals(other, null)) //参照比較
return 1; //thisが大きい
//0なら等しい、負なら小さい、正なら大きい
return this.Remark.CompareTo(other.Remark);
}
}
この情報単位を「追加、検索、編集、削除」することが必須なので、先ずメニューに
そして「右クリックのポップアップメニュー(コンテキストメニュー)」でも
アクセスすることができます。
「データの追加」と「データの編集」は、そのタイトルの(実は同じ)ダイアログで行っており、
(↑は「データの編集」の時の画面)
「データの編集」は、表の上で特定の行をダブルクリックすることでもこのダイアログを呼び出すことができるようにしています。尚、意に反した、偶発的なデータ改変が発生しないように「セルのダブルクリックによる編集機能」は
this.EditMode = DataGridViewEditMode.EditProgrammatically; //ダブルクリック編集不可
で殺しています。(同様のRM観点から器となるSDIウィンドウも、敢えてDrag&Dropによるファイル入力機能を廃止しました。)
検索と削除の機能は「指定の文字列
を含むセルがあるか否か」で行を複数選択するようにして、続けて「削除」を選択すれば、複数のidItemを削除することができます。また、続けて「編集}を選択すれば選択行が逐次編集できるようにしています。
4.並び替え操作
オリジナルのIDLIstではListViewにデータを持たせ、ListViewのソート機能を使って各列でソートさせることができましたので、同じ機能をメニュー、
及び列のヘッダーバークリックで実現しています。
メニューやツールバーボタンによるソートは専用のダイアログが現れて、
列と順序の指定を行います。なお、WYSWYGなので見えている通りの順序でデータは保存されます。
5.ヘルプ
ヘルプは「使い方」と「バージョン」(情報)の二つ
ですが、「使い方」は飽くまで「習作でBCCSDkelton、C++のIDListを移植」したアプリなので、
目いっぱい手抜き
しています。先ずメッセージボックスで
//////////////////
// IDListの使い方
//////////////////
IDListは個人の使うログインIDとパスワードに係る情報を管理するツールです。
BCCForm and BCCSkeltonで作成したIDListのヘルプファイルをご覧ください。
と表示して、旧い
を呼び出しています。(これは私も初めて使うSystem.Windows.Form.Help.ShowHelp()メソッドの機能でした。)
そして、トリとなるのが、
です。
ps. これは単なる移植プログラムですし、器となるメインウィンドウはCells for CSやBoids for CSの使いまわしなので、全部見たい方はBCCForm and BCCSkeltonパッケージにアップしますので、そこから見ていただき、「ブログではつまみ食い」程度のコード紹介に止めようかと思っています。












