65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的打卡应用程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (6投票s)

2012年12月15日

CPOL

2分钟阅读

viewsIcon

30048

downloadIcon

530

简单的打卡应用程序

引言

几年前,我写了一段代码来倒计时某个特定事件——你可以在这里阅读该文章。在九月份我目前的全职工作结束后,我参与了几个不同的项目,同时进行,并意识到我确实需要一个简单易用的打卡应用程序,它可以简单地计算我在每个项目上花费的时间。使用“倒计时提醒”的相同代码库,并对其进行略微修改以用作打卡应用程序,似乎是合理的。

是的,这篇文章非常简短,但也许你觉得这个应用程序有用,或者给我一些关于你希望添加功能的想法。我在文章末尾讨论了一些想法。

幕后

本节讨论了对倒计时提醒代码所做的更改。

用户界面

你可以阅读倒计时提醒文章来了解用户界面是如何工作的——我做了一些小的修改,取消了选择字段的选项,从而导致了一种更直接的初始化计数器组的方式。

protected void CreateCounterGroups()
{
  int pos = 0;
  dayGroup = new Group("Days");
  hourGroup = new Group("Hours");
  minuteGroup = new Group("Minutes");
  secondGroup = new Group("Seconds");

  foreach (Group group in new List<Group>() { dayGroup, hourGroup, minuteGroup, secondGroup })
  {
    group.Location = new Point(pos, 0);
    pos += group.Width;
    Controls.Add(group);
  }

  Width = 6 * Group.GroupWidth;
}

然而,在计时器的呈现方式方面,其他一切都保持不变。

我更改了弹出菜单,包括“开始”和“停止”选项

我还修改了数据结构,这反映在设置用户界面中

数据结构

底层数据结构只包含描述和时间

private static void CreateTable()
{
  counterTable = new DataTable("Counters");
  counterTable.Columns.Add("Index", typeof(Int32));
  counterTable.Columns.Add("Description", typeof(string));
  counterTable.Columns.Add("Time", typeof(long));

  counterView = new DataView(Program.counterTable);
  counterView.Sort = "Index";
}

理想情况下,应该使用DataSet来支持第二个子表,以记录开始和停止日期时间活动,但这留待未来版本实现。

一次一个项目

这个硬编码的功能...

private void startToolStripMenuItem_Click(object sender, EventArgs e)
{
  Program.StopCounters();
  Program.StartCurrentCounter();
}

...确保一次只能“打卡”一个项目——为其计费时间。

What Next?

虽然 Code Project 上似乎没有像这样的应用程序,但也有一些精巧的打卡应用程序可以从智能手机下载,以及常规的桌面应用程序,但我并不总是把手机放在身边。也就是说,肯定需要一些功能

  • 每日/每周/每月活动报告和图表
  • 用于计费目的的特定时间段的摘要报告
  • 与其他设备合并数据——例如,如果我在火车上使用笔记本电脑工作,我想将该信息与桌面应用程序合并。嗯……基于云的数据?

所以,这只是一个开始,我们拭目以待。

© . All rights reserved.