我正在开发一个C#窗体窗体应用程序。在我的申请中,我有3种形式(主表单有一个列表框和两个按钮(入住和退房),入住表格和结帐表格)。在主窗体上,列表框包含用户名,如果用户第一次选择他们的名字,则必须启用登记按钮以供用户登记...但是,如果用户登记并关闭应用程序,当他们重新打开它时,应该启用按钮检出并禁用检入。如何在Windows窗体应用程序上实现状态
我被告知使用应用程序/用户状态,但由于我是编程新手,我不知道如何实现Windows窗体状态。
我该怎么办?
谢谢
我正在开发一个C#窗体窗体应用程序。在我的申请中,我有3种形式(主表单有一个列表框和两个按钮(入住和退房),入住表格和结帐表格)。在主窗体上,列表框包含用户名,如果用户第一次选择他们的名字,则必须启用登记按钮以供用户登记...但是,如果用户登记并关闭应用程序,当他们重新打开它时,应该启用按钮检出并禁用检入。如何在Windows窗体应用程序上实现状态
我被告知使用应用程序/用户状态,但由于我是编程新手,我不知道如何实现Windows窗体状态。
我该怎么办?
谢谢
没有“Windows窗体状态”这样的事情。您有几种选择来实现财产以后这样的,其中有:
所有这三种解决方案都要求您对“进入东西”进行排序。写更多关于你有什么可用(数据库服务器等),或者你是否想要固定数量的用户,我可以扩展这个答案来帮助你入门。
我去排队了怎么办2号:
创建的状态分配给一个用户名的小帮手类:
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”的形式获取值。
然后,创建一个名为UserStates
的用户范围应用程序设置(转至项目设置的settings-tab并添加一个新的设置类型System.Collections.Specialized.StringCollection
)。您可以从代码访问此设置,如Properties.Settings.Default.UserStates
。它基本上是一个字符串列表。
要添加并坚持一个新的条目,你可以这样做:
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
事件如下:
// 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();
这仍然存在用户状态来设置当前列表。
请注意:我已经在Visual Studio中测试过了,现在它可以正常工作。我留下了如何将列表框条目映射到内部列表中的UserState
对象作为新问题的主题的问题:-D
此方法的缺点:它不太灵活 - 添加更多每个用户的状态涉及一些编码。
阅读关于类型化数据集以及如何从XML存储/读取它们可能会更好。这给了你一些“数据库感觉”,而不必实际使用数据库。
你的意思是应用程序/用户设置? https://msdn.microsoft.com/en-us/library/bb397750%28v=vs.110%29.aspx – TAMTAM 2015-03-31 15:07:58
应用程序状态通常定义为反映应用程序当前模式的枚举。如果您处于“新用户”状态,某些按钮可能被禁用/启用,而不是“正常”状态。您可以将它作为一个可用于所有表单的类来实现。这可以是一个在应用程序启动时被初始化的静态类 – 2015-03-31 15:08:03