[ stevs986 @ 06.11.2008. 13:16 ] @
Ovako hteo bih da na pocetku imam login formu koja se posle uspesnog logovanja grana u neku od dve forme i sama se zatvara. Znam da ovo uradim ako koristim MDI kontejner ali bih zeleo da izbegnem njega, da li je to moguce izvesti nekako...?
[ marko1981 @ 06.11.2008. 14:22 ] @
Evo koda iz moje aplikacije, izbacio sam gomilu stvari vezanih za web servise, ali sustina je tu. Mozda sam napravio neku slovnu gresku, ako imas problema, pitaj.

Da bi ovo radilo u formi FrmLogin treba da imas 2 Button-a koji se zovu btnLogin i btnCancel i 2 TextBox-a koji se zovu txtUser i txtPassword.

Ja imam u mom kodu i neke ComboBox-ove za izbor jezika, servera i slicno, a ti ubaci sve sto ti treba.

Button-u btnCancel postavi property DialogResult na Cancel, recimo kroz designer.


Code:

        // Program.cs

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            // ...
            
            bool flag = false;            
            short role = 0;

            using (FrmLogin login = new FrmLogin())
            {
                if ((login.ShowDialog() == DialogResult.OK) && login.IsValidLogin)
                {
                    flag = true;
                    role = login.UserRole;
                }
            }

            if (flag)
            {                
                try
                {
                    switch (role)
                    {
                        case 1:
                            using (MainForm form = new MainForm())
                            {
                               Application.Run(form);
                            }
                            break;

                        // add cases here                        

                        default:
                            break;
                    }
                }
                catch (Exception exc)
                {
                    // process Exception...
                }
            }
        }



Code:

        // FrmLogin.cs

        public FrmLogin()
        {
            InitializeComponent();

            this.passTries = 3;

            // set what is needed
        }

        public bool IsValidLogin
        {
            get
            {
                return isValidLogin;
            }
        }

        public short UserRole
        {
            get
            {
                return userRole;
            }
        }

        private void FrmLogin_Load(object sender, EventArgs e)
        {
            // set what is needed...
  
            this.ActiveControl = this.txtUser;
            this.txtUser.Focus();
            this.txtUser.Text = string.Empty;
            this.txtPassword.Text = string.Empty;
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {            
            Application.Exit();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {     
                this.btnLogin.Enabled = false;

                this.Cursor = Cursors.AppStarting;

                Application.DoEvents();

                try
                {
                        this.Authorize();
                }
                catch (Exception exception)
                {                   
                        // log error...
                        this.isValidLogin = false;
                        this.Cursor = Cursors.Default;
                        this.btnLogin.Enabled = true;                    
                }
         }

         private void Authorize()
         {
             // do authorization

             // set isValidLogin property

             // set userRole value

             if (!this.isValidLogin)
             {
                 this.txtPassword.Clear();
                 this.txtPassword.Focus();

                 this.passTries--;

                 MessageBox.Show("Login Error");
              }

              this.Cursor = Cursors.Default;
              this.btnLogin.Enabled = true;

              if ((this.isValidLogin == true) || (this.passTries < 1))
              {
                  base.DialogResult = DialogResult.OK;
                  base.Close();
              }
         }

         private bool isValidLogin = false;
         private short passTries = 3;
         private short userRole = 0;
[ stevs986 @ 06.11.2008. 16:59 ] @
Mnogo hvala na odgovoru, nemam trenutno vremena da se udubim u malo dublju analizu... Sutra cu testirati pa ako negde zapnem pitacu... Ovako na prvi pogled nigde nisam video gde zatvaras login formu da ona ne ostane aktivna...
[ marko1981 @ 06.11.2008. 17:08 ] @
Izostavio sam da napisem jos jednu stvar.

Postavi CancelButton property forme FrmLogin na vrednost "btnCancel".
[ stevs986 @ 06.11.2008. 17:13 ] @
Ok, sutra cu se detaljno pozabaviti time pa se javljam ako budem imao nekih problema... Pozdrav i mnogo hvala...