我正在開發一個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