2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#でタブレット向け在庫管理システムを構築する

Posted at

在庫管理システムの考え方

今回は簡単なシステムが作れれば良いので、定期的に在庫確認をし、入力するだけです.

苦労した点

操作性を良くするため、該当のボタンを押すとテンキーを表示し、入力された数字をボタンに表示する仕様にしました.
複数のボタンが必要となるため、ボタンをループで自動生成しておりますが、自動生成したボタンにイベントを持たせる点に苦労しました.

動作

スクロールさせると動作が重たくなりアプリが落ちることがあったため、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;
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?