نمایش نتایج 1 تا 20 از 20

نام تاپیک: ساخت user control برای login به فرم اصلی برنامه

  1. #1

    Tick ساخت user control برای login به فرم اصلی برنامه

    سلام . من میخوام user control ی برای login به فرم اصلی برنامم بسازم ,می خوام روش بهینه ی برای پیاده سازی eventهای مربوطه داشته باشم .منو راهنمایی کنید.

  2. #2
    نقل قول نوشته شده توسط 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());
    }
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله Mahmoud.Afrad : چهارشنبه 17 تیر 1394 در 14:11 عصر
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  3. #3
    مرسی از جواب مفید و کاملتون . میشه توضیح بدید چرا از اینترفیس استفاده کردید ؟

  4. #4
    امکان داره source code آپلود کنی ؟

  5. #5
    سلام . من در استفاده از اینترفیس ها و درکشون مشکل دارم . توی این کد هم متوجه نمیشم این اینتر فیس داره چیکار میکنه ؟ پیاده سازی دیگری به غیر از استفاده از اینترفیس براش وجود داره ؟

  6. #6
    نقل قول نوشته شده توسط az_farzaneh مشاهده تاپیک
    میشه توضیح بدید چرا از اینترفیس استفاده کردید ؟
    من در استفاده از اینترفیس ها و درکشون مشکل دارم . توی این کد هم متوجه نمیشم این اینتر فیس داره چیکار میکنه ؟
    تعریف اینترفیس بصورت خیلی خلاصه و عامیانه :‌ قرارداد و یا واسط بین یک سرویس دهنده(Class Creator) و سرویس گیرنده های از اون(Class Consumers) که همیشه از سمت سرویس دهنده اعمال (Force) میشه.

    در کد، من از تابعی از نوع بولین برای تصدیق هویت استفاده کردم و خب این طبیعیه که شرایط تصدیق هویت در هر برنامه میتونه متفاوت باشه. یکجا ممکنه کلمه عبور در دیتابیس Hash شده باشه و یا جایی دیگر ...
    پس چون نمیشه تابع مشخصی برای تصدیق هویت ارائه داد پیاده سازی این تابع رو به کاربر استفاده کننده از کنترل واگذار میکنیم.
    و این باعث انعطاف میشه. (چون شما هیچ اطلاعی از موجوداتی که قراره در آینده با کنترل شما کار کنند ندارید و این همون جایی ست که اینترفیسها یکه تاز میدان خواهند بود !)
    نقل قول نوشته شده توسط az_farzaneh مشاهده تاپیک
    پیاده سازی دیگری به غیر از استفاده از اینترفیس براش وجود داره ؟
    100% :‌ اما من اینترفیس رو ترجیح میدم ! :دی :پی
    نقل قول نوشته شده توسط az_farzaneh مشاهده تاپیک
    امکان داره source code آپلود کنی ؟
    حتما :‌ ASAP
    << در همون پست شماره #2 ضمیمه شد. >>
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  7. #7
    این کنترل 3 تا ایونت داره : (البته صرف آموزش و در عمل نیازی به پیاده سازی این 3 رخداد نیست و میشه با یک ایونت مشکل رو حل کرد)
    • LoginSuccessed: زمانی که شخص موفق به لاگین میشه
    • LoginFailed: زمانی که شخص سعی میکنه و موفق نمیشه
    • LoginCanceled: زمانی که شخص از لاگین انصراف میده
    چه جوری میشه فقط از یک event استفاده کرد به گونه ای که فهمید user موفق شده ,cancel کرده یا با fail مواجه شده , در واقع یک event تمام این حالتها را در بر بگیره ؟

  8. #8
    نقل قول نوشته شده توسط az_farzaneh مشاهده تاپیک
    چه جوری میشه فقط از یک event استفاده کرد به گونه ای که فهمید user موفق شده ,cancel کرده یا با fail مواجه شده , در واقع یک event تمام این حالتها را در بر بگیره ؟
    یک enum تعریف کنید واسه تمامی حالات موجود از رخدادهای مورد نظر. برای مثال در اینجا داریم :
    public enum LoginEventTypes {     Successed,     Failed,     Cancel }
    و از طرفی شما مجبور به استفاده از کلاس EventArgs نیستید و میتونید از یک کلاس مشتق شده (از EventArgs) استفاده کنید و اطلاعات مورد نظرتون رو (در اینجا همون نتیجه ی لاگین شخص)در اون نگهداری کنید.
    public class LoginEventArgs : EventArgs {     private LoginEventTypes eventType;     public LoginEventTypes EventType     {         get { return eventType; }         set { eventType = value; }     }    private string loginDate;     public string LoginDate     {         get { return loginDate; }         set { loginDate = value; }     }    public LoginEventArgs(LoginEventTypes _eventType)     {         this.loginDate = DateTime.Now.ToString();         this.eventType = _eventType;     } }
    البته در مثال بالا من زمان سعی کاربر به لاگین رو هم نگهداری کردم (شاید واسه Log کردن لازم بشه)

    حالا به کلاس یوزرکنترل میریم و ایونتهای اضافی رو پاک میکنیم و فقط یک ایونت رو نگه میداریم. توجه داشته باشید که امضای دیلیگیت (قسمت قرمز رنگ) نیز عوض شده:
    public delegate void ClickButtonHandler(object sender, LoginEventArgs e);
    public event ClickButtonHandler LoginEvent;

    public void OnLoginEvent(LoginEventTypes _eventType)
    {
    if (LoginEvent != null)
    LoginEvent(this, new LoginEventArgs(_eventType));
    }
    و برای فراخوانی هم کافیه همین یک متود رو با پارامترهای مختلف صدا بزنیم :
    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)
    OnLoginEvent(LoginEventTypes.Successed);
    else
    OnLoginEvent(LoginEventTypes.Failed);
    }

    private void btnCancel_Click(object sender, EventArgs e)
    {
    OnLoginEvent(LoginEventTypes.Cancel);
    }
    و در پایان کد فرم لاگین رو نیز به این شکل تغییر بدید :
    public partial class LoginForm : Form, IAuthentication
    {
    public LoginForm()
    {
    InitializeComponent();
    }

    public bool IsAuthentic(string UserId, string Password)
    {
    if (UserId == "user" && Password == "pass")
    return true;
    return false;
    }

    private int nTry = 0;
    private void loginControl1_LoginEvent(object sender, LoginEventArgs e)
    {
    switch (e.EventType)
    {
    case LoginEventTypes.Successed:
    this.DialogResult = DialogResult.OK;
    break;
    case LoginEventTypes.Failed:
    if (nTry++ > 2)
    {
    MessageBox.Show("ByeBye!");
    this.DialogResult = DialogResult.Abort;
    }
    else
    MessageBox.Show(string.Format("{0}: You have {1} times to try again...", e.LoginDate, (3 - nTry + 1).ToString()));
    break;
    case LoginEventTypes.Cancel:
    this.DialogResult = DialogResult.Ignore;
    break;
    default:
    break;
    }
    }
    }
    کد نهایی این مثال نیز آپلود شد.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله Mahmoud.Afrad : چهارشنبه 17 تیر 1394 در 14:14 عصر
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  9. #9
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط az_farzaneh مشاهده تاپیک
    سلام . من در استفاده از اینترفیس ها و درکشون مشکل دارم . توی این کد هم متوجه نمیشم این اینتر فیس داره چیکار میکنه ؟ پیاده سازی دیگری به غیر از استفاده از اینترفیس براش وجود داره ؟
    جالب!
    قدرت اینترفیسها در پیاده‌نسازی است نه در پیاده سازی!
    همانطوری که سیناجان گفتند واگذار کردن پیاده سازی به استفاده کننده، قابلیت انعطاف پذیری را زیاد میکند . این نه فقط برایه این مثال ولی به طور کلی در برنامه‌نویسی صادق است.
    استفاده از اینترفیس را بهش عادت کنید، یک پله دیگر در برنامه‌نویسی بالاتر میرید.

  10. #10
    اگه احساس میکنید تاپیک شما به نتیجه رسیده لطفا اعلام کنید.
    اینکار برای هدایت دوستان بعدی که با جستجو به تاپیکها میرسند میتونه خوب باشه.
    ممنون
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  11. #11
    کاربر دائمی آواتار dr_csharp
    تاریخ عضویت
    آبان 1386
    محل زندگی
    Tehran
    پست
    599
    سلام.
    وظیفه این دو تیکه ازکد چیه ؟

    parent is IAuthentication

    و

    result = (parent as IAuthentication).IsAuthentic(tbUserId.Text, tbPassword.Text);


    ممنون
    آخرین ویرایش به وسیله Mahmoud.Afrad : چهارشنبه 17 تیر 1394 در 14:15 عصر

  12. #12
    نقل قول نوشته شده توسط dr_csharp مشاهده تاپیک
    سلام.
    وظیفه این دو تیکه ازکد چیه ؟

    parent is IAuthentication
    این کد رو توی یک دستور شرطی گذاشته بودم واسه اینکه چک کنیم که آیا فرم دربرگیرنده ی یوزرکنترل، اینترفیس IAuthentication رو پیاده سازی کرده یا خیر.
    نقل قول نوشته شده توسط dr_csharp مشاهده تاپیک

    result = (parent as IAuthentication).IsAuthentic(tbUserId.Text, tbPassword.Text);
    فرم رو در قالب یک IAuthentication در میاره تا بتونیم متد IsAuthentic اون رو صدا بزنیم.
    آخرین ویرایش به وسیله Mahmoud.Afrad : چهارشنبه 17 تیر 1394 در 14:16 عصر
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  13. #13
    کاربر جدید
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    مشهد
    پست
    22

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    تاپیک خوبی بود با تشکر از مدیر

  14. #14

    Question نقل قول: ساخت user control برای login به فرم اصلی برنامه

    نقل قول نوشته شده توسط sinpin مشاهده تاپیک

    در کد، من از تابعی از نوع بولین برای تصدیق هویت استفاده کردم و خب این طبیعیه که شرایط تصدیق هویت در هر برنامه میتونه متفاوت باشه. یکجا ممکنه کلمه عبور در دیتابیس Hash شده باشه و یا جایی دیگر ...
    ببخشيد استاد مي شه يك مثال بزنيد كه جوري از اين كنترل وقتي استفاده كنيم كه اطلاعات داخل ديتابيس ؟
    و ممكن برنامه چندلايه هم باشه...

  15. #15

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    سلام
    نگاه کن در کد اولی اگر بخواهیم امکانی فراهم بیاوریم که کاربر بخواهد یوزر نیم و پاسوورد را عوض کند چکار باید بکنیم ...
    با تشکر

  16. #16
    کاربر دائمی
    تاریخ عضویت
    آذر 1386
    محل زندگی
    تهران
    پست
    198

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    با سلام
    اگه امكان داره توضيح بديد كه چطوري مي توان به اجزاي user control در پروژه اي ديگر دسترسي پيدا كرد . مثلا چطور مي توان به textbox ها دسترسي پيدا كرد.لطفا سريع پاسخ بديد چون خيلي نيازش دارم .

  17. #17
    کاربر دائمی آواتار shahab_ss
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    bangkok
    سن
    43
    پست
    434

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    یک سوال ، جناب sinpin

    اصولاً استفاده از UserControl زمانی مفید به نظر میرسه که قراره از یک کنترل بیش از یک بار استفاده بشه !
    اما در هر برنامه فقط یک LogIn وجود داره، آیا دلیل خاص دیگه ای باعث شده که شما این کنترل رو به این صورت پیاده سازی کنید ؟

    متشکرم

  18. #18

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    نقل قول نوشته شده توسط shahab_ss مشاهده تاپیک
    یک سوال ، جناب sinpin
    اصولاً استفاده از UserControl زمانی مفید به نظر میرسه که قراره از یک کنترل بیش از یک بار استفاده بشه !
    دقيقاً هدف ساختن يك يوز كنترل همين يعني بيش از يك بار استفاده بشه
    شما يك كنترل مي سازيد و در برنامه هاي مختلف از اون استفاده مي كنيد اين يعني بهره وري بهتر از زمان و بودجه
    اگر اين طور نبود چرا شركت ها به دنبال ارائه كنترل هاي جديد هستند ؟

  19. #19
    کاربر جدید
    تاریخ عضویت
    آذر 1388
    محل زندگی
    تهران
    پست
    7

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    سلام - ممنون از جناب sinpin مفید بود - ولی اینجا چند تا سوال دوستان پرسیدند که اگر جواب داده بشه - بقیه هم استفاده می کنند
    با تشکر

  20. #20

    نقل قول: ساخت user control برای login به فرم اصلی برنامه

    با سلام ...
    چرا LoginSuccessed همش Null هست ؟
    برنامه ایی که آپلود کردید درسته ؛من این برنامه رو یه بار دیگه خودم نوشتم اما برنامه ایی که نوشتم از روی کد اصلی ، ناله ، بنابراین شرط فالس می شه و برنامه درست کار نمی کنه.

تاپیک های مشابه

  1. مقاله جامع: User Control ها و Custom Control ها در ASP.NET
    نوشته شده توسط Behrouz_Rad در بخش مقالات مرتبط با Microsoft .Net Framework
    پاسخ: 12
    آخرین پست: سه شنبه 24 اردیبهشت 1392, 10:35 صبح
  2. login control
    نوشته شده توسط matrix_h85 در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: شنبه 17 شهریور 1386, 14:49 عصر
  3. فرق بین login و user
    نوشته شده توسط arash_m در بخش SQL Server
    پاسخ: 2
    آخرین پست: سه شنبه 23 خرداد 1385, 13:27 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •