2012-07-16 76 views
1

好的,用戶成功登錄後,警告框將顯示用戶名,然後將彈出另一個表單,以便用戶更改其密碼。我想在條件語句中使用用戶名(來自登錄表單)的值來更改密碼。從兩個或多個表單中獲取值C#

我如何獲得來自另一個表單的這個值?謝謝。

景觀的形象在這裏:http://i49.tinypic.com/11r7zw8.png

+0

一種方法是使用使用登錄形式的公共屬性的用戶名,你可以在其他形式的訪問。 – Adil 2012-07-16 05:00:56

回答

2

是什麼迷惑ü? 將用戶名傳遞給下一個表單,我沒有看到第三個表單必須知道其他表單的原因。這將是一個更無用的依賴。

+0

好吧,那我該怎麼傳遞它呢? – 2012-07-16 05:05:46

+0

可能是他是初學者 – Adil 2012-07-16 05:06:05

+0

取決於你如何顯示第三種形式。向我們展示一些內部邏輯。但通常它應該是這樣的(我想):如果授權成功,您將打開歡迎對話框。比你打開第三種形式,對嗎?在那裏創建一個名爲UserName的屬性(或者使用username參數創建一個構造函數)。可能會有一些我不知道的細微差別。讓我知道在這種情況下更具體 – Artiom 2012-07-16 05:09:54

0

您可以創建一個Custom Event,在成功登錄時提出,您可以將該信息與CustomEventArgs一起傳遞,然後在發出第二個表單時使用它。

事情是這樣的:

Form1中

public partial class Form1 : Form 
{ 

    Logon logon; 
    PasswordChange pass; 

    public Form1() 
    { 
     InitializeComponent(); 

     logon = new Logon(); 
     logon.raiseLoginEvent += new Logon.LoginSuccesful(logon_raiseLoginEvent); 
     logon.ShowDialog(); 

    } 

    void logon_raiseLoginEvent(object sender, LoginEventArgs e) 
    { 
     pass = new PasswordChange(); 
     pass.LoginName = e.Login; 
     pass.ShowDialog(); 
    } 


} 

登錄

public partial class Logon : Form 
{ 
    public delegate void LoginSuccesful(object sender, LoginEventArgs e); 
    public event LoginSuccesful raiseLoginEvent; 

    public Logon() 
    { 
     InitializeComponent(); 
    } 


    private void Logon_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     LoginEventArgs ev = new LoginEventArgs("Admin"); 
     raiseLoginEvent(this, ev); 
    } 
} 

public class LoginEventArgs : EventArgs 
{ 
    public LoginEventArgs(string s) 
    { 
     loginName = s; 
    } 
    private string loginName; 
    public string Login 
    { 
     get { return loginName; } 
     set { loginName = value; } 
    } 
} 

PasswordChange

public partial class PasswordChange : Form 
{ 
    public PasswordChange() 
    { 
     InitializeComponent(); 
    } 

    public string LoginName 
    { 
     get {return textBox1.Text; } 
     set { textBox1.Text = value; } 
    } 

} 
0

這樣做的一種方法是在登錄表單中使用公共屬性,以便您可以以其他形式訪問的用戶名。

例如:

裏面LoginForm的,創建一個公共屬性

public string UserName { get; private set;} 

填寫LoginForm的這個屬性,並傳遞給其他形式。在創建第二種形式的對象時,可以從第一種形式訪問數據,然後將其傳遞給其他形式的屬性/構造函數。

例如,

FacultyForm facultyForm=new FacultyForm(); 
facultyForm.UserName = loginForm.UserName; //in this case you have to create a property in other form too. 

這僅僅是做到這一點的方法之一。

這是否解決了問題?

另一種方法是使用委託/事件。

+0

剛剛發現一個相對類似的帖子以及http://stackoverflow.com/questions/3552169/sharing-a-variable-between-two-winforms – Adil 2012-07-16 05:06:49

+0

如何將它傳遞給另一種形式? – 2012-07-16 05:15:06

+0

在創建第二種形式的對象時,可以從第一種形式訪問數據,然後將其傳遞給其他形式的屬性/構造函數。例如, 例如, FacultyForm facultyForm = new FacultyForm(); facultyForm.UserName = loginForm.UserName; //在這種情況下,您必須以其他形式創建一個屬性。這只是這樣做的一種方式。 – Adil 2012-07-16 05:37:46

0

使登錄表單的UserName文本框爲public,以便您可以從任何其他表單獲取。

您可以LoginForm.designer.cs修改代碼來做到這一點

+0

公共控制是一個糟糕的錯誤。最好避免它。順便說一句 - 沒有理由這樣做 – Artiom 2012-07-16 06:17:43