\

Facebook


วันพฤหัสบดีที่ 4 เมษายน พ.ศ. 2556

ระบบ LogIn ใน Windows Form Application


ระบบ LogIn ใน Windows Form Application ซึ่งผมได้สร้างข้อมูลใน Table “Users” ไว้แล้ว โดยมีข้อมูลดังนี้คือ
คอลัมม์ UserID: 1 ,
UserName: admin,
UserPassword: admin,
UserEmail: admin@admin.com

เริ่มต้นก็ทำการสร้างฟอร์มหลักขึ้นมา โดยคลิกขวาที่ชื่อโปรเจกค์ > add new item> windows form ตั้งชื่อ(Name) ว่า frmMain.cs ซึ่ง แล้วลากเอาคอมโพเน้นชื่อว่า MenuStrip กับ StatusbarStrip มาวางไว้ด้านบนและล่างของฟอร์มเพื่อเพิ่มชื่อ นาฬิกา

โดยหลักการ LogIn คือ ให้ฟอร์มของหน้า logIn เด้งขึ้นมาก่อนเพื่อรอการ Authentication หากล็อกอินสำเร็จก็จะผ่านเข้าสู่หน้าเมนหลัก แล้วแสดงชื่อของผู้ใช้งานในปัญจุบัน ภายใต้ status bar
เริ่มต้นโดยการสร้าง Windows Form ใหม่ขึ้นมาหนึ่งอัน คลิกลาก Label เข้ามาวางภายในฟอร์ม 2 อัน (Username กัน Password) และ EditText อีกสองอันเช่นเดียวกัน เพื่อให้ผู้ใช้กรอกข้อมูลทั้งหมด และปุ่ม OK และ Cancel ซึ่งเราจะเข้ามาสร้าง behavior ทีหลัง อ๋อ อย่าลืม ตั้งชื่อ (Name) ให้กับ text ด้วย
ดับเบิลคลิกที่ form เพื่อสร้าง ฟังชั่น On load


        private void frmMain_Load(object sender, EventArgs e)
        {
            this.Hide();
            timer1.Start();
            dlgLogin dlg = new dlgLogin();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                this.CurrentUser = dlg.CurrentUser;
                if (this.CurrentUser != null)
                {
                    lblLogonUser.Text = "Logon User : " + this.CurrentUser.Username;
                }
                this.Show();
            }
            else
            {
                Application.Exit();
            }
        }

ถ้า เราคลิกปุ่ม OK คลาส dlgLogin จะ return ค่า DialogResult.OK มีโค๊ดดังนี้

public partial class dlgLogin : Form
    {
        public User CurrentUser { get; set; }
        SampleEntities db;

        public dlgLogin()
        {
            InitializeComponent();
            db = new SampleEntities();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // Authen user
            var result = from it in db.Users
                         where it.Username == txtUsername.Text && it.Password == txtPassword.Text
                         select it;


            if (result != null && result.Count() > 0)
            { // Pass
                CurrentUser = result.First();
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Username หรือ Password ไม่ถูกต้อง", "Error", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        }

        private void txtUsername_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtPassword.Select();
            }
        }

        private void txtPassword_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnLogin.PerformClick();
            }
        }
    }
โค๊ด LINQ ในการเช็คค่า username password คือ
var result = from it in db.Users
                         where it.Username == txtUsername.Text && it.Password == txtPassword.Text
                         select it;

แปลงได้ ภาษา SQL คือ “SELECT * FROM USERS WHERE USERNAME == username AND PASSWORD == password ซึ่งหากค่าที่ return กลับไม่เป็น 1 แสดงว่า มียูเซอนั้นและการ Authen สำเร็จ
กลับมาที่หน้า Class หลัก frmMain.cs เพื่อ ปุ่มลงไปข้างบน ชื่อว่า User  เพื่อดึงเอาข้อมูล User มาแสดง โดยสร้าง Class ใหม่ขึ้นมาชื่อว่า “frmUsers.cs” (add new item > windows form) ซึ่งมีโค๊ดดังนี้


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

namespace SampleWinForm.Forms
{
    public partial class frmUserList : Form
    {

        public frmUserList()
        {
            InitializeComponent();
        }

        private void frmUserList_Load(object sender, EventArgs e)
        {
            DoLoadData();
        }

        private void DoLoadData()
        {
            using (var db = new SampleEntities())
            {
                List<User> users = (from it in db.Users
                                    select it).ToList();

                gridControl.DataSource = users;
            }
        }

        private void gridView_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
        {
            List<User> users = gridControl.DataSource as List<User>;
            if (users == null)
                return;

            User user = users[gridView.FocusedRowHandle];
            frmUserInfo frm = new frmUserInfo();
            frm.UserID = user.UserID;
            if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
            {
                DoLoadData();
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {

            using(var db = new SampleEntities()){

                frmUserInfo frm = new frmUserInfo();
                frm.UserID = 0;

                if (frm.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
                {
                    DoLoadData();
                }

               }
           
           
        }
    }
}

ฟังชั่น DoLoadData จะถูกเรียกขึ้นใหม่ทุกครั้งเมื่อมีการเรียกใช้ และแสดงข้อมูลในกริด อย่าลืมสร้างปุ่ม add ไว้เพิ่ม user ใหม่ ซึ่งต้องสร้าง class ใมห่ชื่อว่า frmUserInfo.cs โค๊ดมีดังนี้


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

namespace SampleWinForm.Forms
{
    public partial class frmUserInfo : Form
    {
        public int UserID = 0;
        SampleEntities db = new SampleEntities();

        public frmUserInfo()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            DialogResult = System.Windows.Forms.DialogResult.Cancel;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            User user = null;

            if (UserID == 0)
            {
                user = new User();
                db.Users.Add(user);
            }
            else
            {
                var result = (from it in db.Users
                             where it.UserID == UserID
                             select it).ToList();
                if (result.Count() > 0)
                {
                    user = result.First();
                }
            }

            user.Username = txtUsername.Text;
            user.Password = txtPassword.Text;
            user.Email = txtEmail.Text;
            if (db.SaveChanges() > 0)
            {
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Save Failed.");
            }
        }

        private void frmUserInfo_Load(object sender, EventArgs e)
        {
            if (UserID > 0)
            {
                var result = (from it in db.Users
                              where it.UserID == UserID
                              select it).ToList();
                if (result.Count() > 0)
                {
                    txtUsername.Text = result.First().Username;
                    txtPassword.Text = result.First().Password;
                    txtEmail.Text = result.First().Email;
                }
            }
        }
    }
}

เดียวเพิ่มเติมให้กับหน้า LogIn >> บทความนี้ ละเอียดยังไม่พอ ยังไง ก็ติดตามกันด้วยนะครับ

ไม่มีความคิดเห็น:

May be like this posts