我正在开发一个c#windows窗体应用程序。在我的应用程序中,我有3个表单(主表单有一个列表框和两个按钮(签入和签出),签入表单和签出表单)。在主窗体上,列表框包含用户名,如果用户第一次选择其名称,则必须启用签入按钮以供用户签入...但是如果用户签入然后关闭应用程序,当他们重新打开时,应该启用按钮检出并禁用登记。
我被告知使用应用程序/用户状态,但由于我是编程新手,我不知道如何实现Windows窗体状态。
我该怎么办?
谢谢
答案 0 :(得分:2)
没有“Windows Forms状态”这样的东西。你有几个选项来实现这样的事情,其中包括:
所有这三种解决方案都要求您进行“融入事物”。详细了解您的可用内容(数据库服务器等)或是否需要固定数量的用户,我可以扩展此答案以帮助您入门。
我将列出如何做第二名:
创建一个小助手类,为用户名分配状态:
public class UserState
{
public string UserName { get; set; }
public bool CheckedIn { get; set; }
public override string ToString() { return String.Format("{0}={1}", UserName, CheckedIn); }
}
此类允许您存储用户名和签入状态,并通过调用ToString()
获取“user = false”形式的值。
然后,创建一个用户范围的应用程序设置(转到项目设置的设置选项卡并添加名为System.Collections.Specialized.StringCollection
的{{1}}类型的新设置)。您可以从代码UserStates
访问此设置。它基本上是一个字符串列表。
要添加并保留新条目,您可以执行以下操作:
Properties.Settings.Default.UserStates
用户“Test”(以及之前存在的条目)的状态现在存储在程序重启之间。
现在的想法是在启动程序时构建用户及其状态列表,并在退出时存储此列表。
将此声明为类中的成员变量:
UserState state = new UserState() { UserName = "Test", CheckedIn = false };
Properties.Settings.Default.UserStates.Add(state.ToString());
Properties.Settings.Default.Save();
在表单的private List<UserState> userStates = new List<UserState>();
事件中执行以下操作:
OnLoad
这会在集合设置中的每个存储行的内部用户列表中创建一个新条目。
单击按钮时,更改列表中相应if (Properties.Settings.Default.UserStates == null || Properties.Settings.Default.UserStates.Count == 0)
{
// Add your users to the collection initially. This is the first
// run of the application
userStates.Add(new UserState() { ... });
...
}
else
{
// Each line in the setting represents one user in the form name=state.
// We split each line into the parts and add them to the internal list.
for (int i = 0; i < Properties.Settings.Default.UserStates.Count; i++)
{
string stateLine = Properties.Settings.Default.UserStates[i];
string[] parts = stateLine.Split('=');
userStates.Add(new UserState() { UserName = parts[0].Trim(), CheckedIn = Boolean.Parse(parts[1].Trim()) });
}
}
对象的状态。
在表单的UserState
事件中执行以下操作:
OnClose
这会将当前的用户状态列表保留为该设置。
请注意:我现在已经在Visual Studio中对此进行了测试,但它确实有效。我留下了如何将列表框条目映射到内部列表中的// Create the collection from scratch
Properties.Settings.Default.UserStates = new System.Collections.Specialized.StringCollection();
// Add all the users and states from our internal list
foreach (UserState state in userStates)
{
Properties.Settings.Default.UserStates.Add(state.ToString());
}
// Save the settings for next start
Properties.Settings.Default.Save();
对象的问题/作为新问题的主题:-D
这种方法的缺点:它不是很灵活 - 每个用户添加更多状态涉及一些编码。
您可以更好地阅读有关类型化数据集以及如何从XML存储/读取它们。这为您提供了某种“数据库感觉”而无需使用数据库。