在庫管理システムの考え方
今回は簡単なシステムが作れれば良いので、定期的に在庫確認をし、入力するだけです.
苦労した点
操作性を良くするため、該当のボタンを押すとテンキーを表示し、入力された数字をボタンに表示する仕様にしました.
複数のボタンが必要となるため、ボタンをループで自動生成しておりますが、自動生成したボタンにイベントを持たせる点に苦労しました.
動作
スクロールさせると動作が重たくなりアプリが落ちることがあったため、1画面に表示できるアイテムの上限を設け、ページを切り替える方式にしました.
背面のPanelにbackground imageを設定しているので、それが重くなる原因かと思われます.
データベース
Excelに保存し、ClosedXMLを使用して読み書きをしています.
いつかはSQLを使いたいところです...
コントロールの自動生成(例)
labelとButtonを自動生成し、Buttonにクリックイベントを持たせます.
(イベントハンドラ=KeypadShow_Click)
using ClosedXML.Excel;
XLWorkbook workbook = new XLWorkbook("Inventory.xlsx");
IXLWorksheet worksheet = workbook.Worksheet(1);
int lastRow = worksheet.LastRowUsed().RowNumber();
AUTOlabel = new Label[lastRow];
AUTObutton = new Button[lastRow];
for (i = 1; i <= lastRow; i++)
{
AUTOlabel[i] = new Label();
AUTOlabel[i].Name = "AUTOlabel" + j;
AUTOlabel[i].BackColor = Color.Transparent;
AUTOlabel[i].ForeColor = Color.Black;
AUTOlabel[i].Font = new Font("MS UI Gothic", 13, FontStyle.Bold);
AUTOlabel[i].TextAlign = ContentAlignment.MiddleLeft;
AUTOlabel[i].Text = i.ToString();
AUTOlabel[i].Location = new Point(3, i * 57 - 54);
AUTOlabel[i].Size = new Size(291, 53);
AUTOlabel[i].Visible = true;
AUTObutton[i] = new Button();
AUTObutton[i].Name = "AUTObutton" + j;
AUTObutton[i].BackColor = Color.DarkGreen;
AUTObutton[i].ForeColor = Color.White;
AUTObutton[i].Font = new Font("MS UI Gothic", 13, FontStyle.Bold);
AUTObutton[i].TextAlign = ContentAlignment.MiddleCenter;
AUTObutton[i].Text = i.ToString();
AUTObutton[i].Location = new Point(300, i * 57 - 54);
AUTObutton[i].Size = new Size(99, 53);
AUTObutton[i].FlatStyle = FlatStyle.Popup;
AUTObutton[i].Visible = true;
AUTObutton[i].Click += new EventHandler(KeypadShow_Click);
AUTObutton[i].Tag = AUTObutton[j].Name;
}
クリックイベントの記述です.
変数"tagNum"にクリックされたボタンのタグが代入されます.
これにより、ボタンごとの処理を変えることができます.
string select;
private void KeypadShow_Click(object sender, EventArgs e){
var tagNum = ((Button)sender).Tag;
}