[英]C# Accessing variables from class
我有一個問題,當在表單加載時從名為Members
類中訪問變量並在其中顯示變量時,將這些標簽顯示為空白數據。
我的程序使用登錄表單來執行此操作,這是在它獲取並將成員詳細信息設置到類中時執行的。 它使用以下代碼:
public class Member
{
public int MemberID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string CourseTitle { get; set; }
public string Password { get; set; }
}
private IList<Member> GetMembers()
{
OleDbConnection conn = null;
OleDbDataReader reader = null;
try
{
conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Rhys\Documents\Visual Studio 2013\Projects\AssignmentTrackerV2\AssignmentTrackerV2\bin\Debug\ATDatabase.accdb");
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM MemberDetails WHERE [Name] = @Name AND [Password] = @Password", conn);
cmd.Parameters.AddWithValue("@Name", txtFirstNameLogin.Text);
cmd.Parameters.AddWithValue("@Password", txtPasswordLogin.Text);
reader = cmd.ExecuteReader();
var members = new List<Member>();
while (reader.Read())
{
var member = new Member();
member.MemberID = reader.GetInt32(reader.GetOrdinal("MemberID"));
member.Name = reader["Name"].ToString();
member.Surname = reader["Surname"].ToString();
member.CourseTitle = reader["CourseTitle"].ToString();
members.Add(member);
Form2 frm2 = new Form2();
this.Hide();
frm2.ShowDialog();
}
return members;
}
finally
{
if (reader != null) reader.Close();
if (conn != null) conn.Close();
}
return null;
}
這基本上只是對照數據庫數據檢查用戶名和密碼條目,如果成功,則將名稱,密碼,成員ID和課程標題設置為存儲在類中的變量。
但是,當我在表單2加載事件下使用此代碼時
var member = new Member();
lblName.Text = member.Name;
lblSurname.Text = member.Surname;
lblCourseTitle.Text = member.CourseTitle;
所有標簽僅顯示為空白。 有任何想法嗎?
暫時忽略將明文密碼存儲在數據庫中的可疑邏輯……
在我看來,您無法將檢索到的成員數據傳遞給您創建的Form2
實例,而是使用未初始化的Member
實例初始化表單。
沒有可靠,可靠地重現問題的良好, 簡短 , 完整的代碼示例 ,就無法確定將采用哪種正確方法。 但是從廣義上講,您可能應該將member
引用從GetMembers()
傳遞給Form2
實例,例如,傳遞給其構造函數。
可能看起來像這樣:
Form2 frm2 = new Form2(member);
哪里:
class Form2 : Form
{
private readonly Member _member;
public Form2(Member member)
{
InitializeComponent();
_member = member;
}
}
然后更改您的Load
事件代碼,如下所示:
lblName.Text = _member.Name;
lblSurname.Text = _member.Surname;
lblCourseTitle.Text = _member.CourseTitle;
即完全刪除本地member
變量,而使用類的_member
字段。
還有一個建議,在檢查代碼時, Form2
在while-loop
(在數據收集期間),您可以做的就是首先收集所有數據並將其放入members
集合中,然后可以在表單中顯示每個member
通過將整個集合傳遞給Form2
或者如果您希望將每個成員傳遞給您,則可以在收集所有數據之后( 而不是在收集期間 )進行傳遞。
作為偽代碼:
Collect each Member
-> Add to Members Collection
Form2
通過將Member
傳遞給每個Member
來顯示每個Member
,或者將所有Members Collection
傳遞給Form2
然后通過“ Next
或“ Previous
按鈕遍歷每個成員
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.