
نوشته شده توسط
az_farzaneh
سلام . من میخوام user control ی برای login به فرم اصلی برنامم بسازم ,می خوام روش بهینه ی برای پیاده سازی eventهای مربوطه داشته باشم .منو راهنمایی کنید.
این حالت ساده شده ی کنترلی است که من در برنامه هام مینویسم :
public partial class LoginControl : UserControl
{
public LoginControl()
{
InitializeComponent();
}
private void btnLogin_Click(object sender, EventArgs e)
{
bool result = false;
Control parent = this.Parent;
if (!(parent is IAuthentication))
return;
result = (parent as IAuthentication).IsAuthentic(tbUserId.Text, tbPassword.Text);
if (result)
OnLoginSuccess();
else
OnLoginFail();
}
private void btnCancel_Click(object sender, EventArgs e)
{
OnLoginCancel();
}
public delegate void ClickButtonHandler(object sender, EventArgs e);
public event ClickButtonHandler LoginSuccessed;
public event ClickButtonHandler LoginFailed;
public event ClickButtonHandler LoginCanceled;
public void OnLoginSuccess()
{
if (LoginSuccessed != null)
LoginSuccessed(this, new EventArgs());
}
public void OnLoginFail()
{
if (LoginFailed != null)
LoginFailed(this, new EventArgs());
}
public void OnLoginCancel()
{
if (LoginCanceled != null)
LoginCanceled(this, new EventArgs());
}
}
این کنترل 3 تا ایونت داره : (البته صرف آموزش و در عمل نیازی به پیاده سازی این 3 رخداد نیست و میشه با یک ایونت مشکل رو حل کرد)
LoginSuccessed: زمانی که شخص موفق به لاگین میشه
LoginFailed: زمانی که شخص سعی میکنه و موفق نمیشه
LoginCanceled: زمانی که شخص از لاگین انصراف میده
روش قدم به قدم پیاده سازی یک ایونت بصورت هایلایت شده قابل ردگیری است (که این فرآیند تکراریه و همیشه یه همین شکل انجام میشه)
از طرفی هر فرمی که از این کنترل استفاده میکنه باید اینترفیس زیر رو پیاده سازی کنه :
public interface IAuthentication
{
bool IsAuthentic(string UserId, string Password);
}
برای مثال استفاده در یک فرم :
public partial class LoginForm : Form, IAuthentication
{
public LoginForm()
{
InitializeComponent();
}
private int nTry = 0;
private void loginControl1_LoginFailed(object sender, EventArgs e)
{
if (nTry++ > 2)
{
MessageBox.Show("ByeBye!");
this.DialogResult = DialogResult.Abort;
}
else
MessageBox.Show(string.Format("You have {0} times to try again...", (3 - nTry + 1).ToString()));
}
private void loginControl1_LoginCanceled(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Ignore;
}
private void loginControl1_LoginSuccessed(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
public bool IsAuthentic(string UserId, string Password) { if (UserId == "user" && Password == "pass") return true; return false; }
}
و این هم کدی که نهایتا در شروع کار مینویسم :
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
LoginForm login = new LoginForm();
if (login.ShowDialog() == DialogResult.OK)
Application.Run(new MainForm());
}