ユーザーのログインが成功すると、アラートボックスにユーザー名が表示され、ユーザーがパスワードを変更できる別のフォームがポップアップ表示されます。パスワードを変更できるようにするために、条件ステートメントで (ログインフォームからの) ユーザー名の値を使用したいと考えています。
別のフォームから取得したこの値を取得するにはどうすればよいですか? ありがとう。
ここで画像を見る:
何があなたを混乱させますか? ユーザー名を次のフォームに渡します。3 番目のフォームが他のフォームを認識しなければならない理由がわかりません。これは、もう 1 つの無駄な依存関係になります。
ログインに成功したときに発生するカスタム イベントを作成し、 CustomEventArgsで情報を渡し、2 番目のフォームを起動するときにそれを使用できます。
このようなもの:
フォーム1
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; }
}
}
パスワードの変更
public partial class PasswordChange : Form
{
public PasswordChange()
{
InitializeComponent();
}
public string LoginName
{
get {return textBox1.Text; }
set { textBox1.Text = value; }
}
}
これを行う 1 つの方法は、他のフォームでアクセスできるユーザー名のログイン フォームでパブリック プロパティを使用することです。
例えば:
LoginForm 内で、パブリック プロパティを作成します。
public string UserName { get; private set;}
このプロパティを LoginForm に入力し、他のフォームに渡します。2 番目のフォームのオブジェクトを作成するときに、最初のフォームからデータにアクセスし、それを別のフォームのプロパティ/コンストラクターに渡すことができます。
例えば、
FacultyForm facultyForm=new FacultyForm();
facultyForm.UserName = loginForm.UserName; //in this case you have to create a property in other form too.
これは、これを行う方法の 1 つにすぎません。
これで問題は解決しますか?
これを行う別の方法は、デリゲート/イベントを使用することです。
ログイン フォームの UserName テキスト ボックスを公開して、他のどのフォームからもアクセスできるようにします。
LoginForm.designer.cs のコードを変更できます。