using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

// Bitte beachten Sie auch den Fortsetzungsband zu diesem Buch, falls
// Ihnen das Programmieren Spaß gemacht hat und Sie sich fortgeschritteneren 
// Themen zuwenden wollen. Alle Informationen zum Fortsetzungsband finden
// Sie auf der Website: www.tiefer-einsteigen.de 

namespace LoginControl
{
    public delegate void LoginOnClickHandler(object sender, LoginEventArgs e);

    [DefaultEvent("LoginClicked")]
    public partial class LoginControl : UserControl
    {
        /// <summary>
        /// Gibt an, wie oft der Login-Button angeklickt wurde
        /// </summary>
        [Category("Default")] 
        [Description("Anzahl der Klicks auf die Login-Schaltfläche")]
        public int ClickCount { get; private set; }

        [Description("Wird ausgelöst, wenn die Login-Schaltfläche geklickt und in beiden Textfeldern Eingaben vorhanden sind.")]
        public event LoginOnClickHandler LoginClicked;

        public LoginControl()
        {
            InitializeComponent();
            this.ClickCount = 0;
        }

        public void ShowMessage(string message)
        {
            if (message == null || message == String.Empty)
                lblMessage.Visible = false;
            else
            {
                lblMessage.Text = message;
                lblMessage.Visible = true;
            }
        }

        protected virtual void OnLoginClicked(LoginEventArgs e)
        {
            if (this.LoginClicked != null)
                LoginClicked(this, e);
        }
        

        private void btnOK_Click(object sender, EventArgs e)
        {
            bool dataEntered = true;

            if ((this.tbPass.Text.Length == 0) ||
                (this.tbName.Text.Length == 0))
            {
                dataEntered = false;
            }

            if (dataEntered == true)
            {
                this.ClickCount++;
                LoginEventArgs loginEventArgs = new LoginEventArgs(this.tbName.Text, this.tbPass.Text);
                this.OnLoginClicked(loginEventArgs);
            }
        }

        private void tbName_Validating(object sender, CancelEventArgs e)
        {
            if (this.tbName.Text.Length == 0)
                errorProvider.SetError(this.tbName, "Name muss angegeben werden.");
            else
                errorProvider.SetError(this.tbName, "");
        }

        private void tbPass_Validating(object sender, CancelEventArgs e)
        {
            if (this.tbPass.Text.Length == 0)
                errorProvider.SetError(this.tbPass, "Name muss angegeben werden.");
            else
                errorProvider.SetError(this.tbPass, "");
        }
    }

    public class LoginEventArgs : EventArgs
    {

        public string EnteredName { get; private set; }
        public string EnteredPass { get; private set; }

        public LoginEventArgs(string enteredName, string enteredPass) 
        {
            this.EnteredName = enteredName;
            this.EnteredPass = enteredPass;
        }
    }

    
}
