تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إنشاء مشروع باستخدام sql server و linq وتقارير crystal report
#10
نعود الآن لتصميم النموذج، ونضع عليه أداة الـ MenuStrip وأداة الـ TabControl، نضبط خاصية الـ Dock لأداة الـ TabControl على القيمه Fill:



MenuStrip ستحتوي ما يلي:
  • ملف:

[LIST=1|INDENT=2]
[*]مستخدم جديد: خاصية الـ Name = newuser
[*]حذف مستخدم: خاصية الـ Name = deluser
[*]تعديل البيانات: خاصية الـ Name = edituser
[*]تسجيل الخروج: خاصية الـ Name = signout
[*]إنهاء: خاصية الـ Name = exitapp
[/LIST]



الآن سنعمل نموذج لتسجيل الدخول، من Solution Explorer نضغط على المشروع بالزر الأيمن للفأرة، ثم نختار:
- Add
- Windows Form

ليكن اسمه LoginForm، خصائصة كما يلي:
FormBorderStyle = FixedDialog
MaximizeBox = False
MinimizeBox = False
ShowIcon = False
ShowInTaskbar = False
تسجيل الدخول = Text



نضيف من صندوق الأدوات أداتي Label وأداتي TextBox، و Button، خصائص الأدوات نضبطها كما يلي:
:textBox1
Name = unbox

:textBox2
Name = pasbox
* = PasswordChar

:button1
"دخول" = Text
في الكود الخاص بنموذج تسجيل الدخول، نعرف متغيرين عامين على النموذج:
* في #c نعرف ثلاث متغيرات.
:#C
كود :
[align=left]private DB.PhoneBookDB db = new DB.PhoneBookDB();
internal bool endapp = true;
internal MainForm mf = null;[/align]

:VB
كود :
[align=left]Private db As New DB.PhoneBookDB()
Friend endapp As Boolean = True[/align]

نضغط على زر الدخول مرتين بالفأرة لنذهب للحدث الافتراضي التابع له Click، سوف نختبر قيم النص لأداتي مربع النص فيما إذا كانت فارغة:
:#C
كود :
[align=left]if (String.IsNullOrEmpty(unbox.Text.Trim()) || String.IsNullOrEmpty(pasbox.Text.Trim()))
{
    MessageBox.Show("يجب إدخال اسم المستخدم وكلمة المرور", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    return;
}
[/align]

:VB
كود :
[align=left]If String.IsNullOrEmpty(unbox.Text.Trim()) OrElse String.IsNullOrEmpty(pasbox.Text.Trim()) Then
    MessageBox.Show("يجب إدخال اسم المستخدم وكلمة المرور", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Exit Sub
End If
[/align]

نتبعه الكود التالي:
:#C
كود :
[align=left]try
{
    var user = from u in db.Users
               where u.Username == unbox.Text.Trim() && u.Password == pasbox.Text.Trim()
               select u;

    if (user.Count() != 0)
    {
        if (!user.SingleOrDefault().Active)
        {
            MessageBox.Show("لقد أدخلت اسم مستخدم موقوف", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }

        endapp = false;
        Close();
    }
    else MessageBox.Show("اسم المستخدم أو كلمة المرور خطأ", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

catch { } [/align]

:VB
كود :
[align=left]Try
    Dim user = From u In db.Users
               Where u.Username = unbox.Text.Trim().ToLower() AndAlso u.Password = pasbox.Text.Trim().ToLower()
               Select u

    If user.Count() <> 0 Then
        If Not user.SingleOrDefault().Active Then
            MessageBox.Show("لقد أدخلت اسم مستخدم موقوف", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        endapp = False
        Close()

    Else
        MessageBox.Show("اسم المستخدم أو كلمة المرور خطأ", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    End If

Catch

End Try
[/align]

جملة تحديد تم شرحها سابقاً، وباقي الكود واضح، اللهم المتغير endapp سوف يتضح بعد كتابة الكود التالي في حدث FormClosing:
:#C
كود :
[align=left]if (endapp) Application.Exit();[/align]

:VB
كود :
[align=left]If endapp Then End
[/align]

يجب علينا أن ننهي البرنامج في حالة إغلاق النموذج بدون تسجيل الدخول، كي لا يتم الدخول للبرنامج.

نعود للنموذج الرئيسي ونذهب لتبويب الكود التابع له، لنضيف إجراء كما يلي:
:#C
كود :
[align=left]private void LogIn()
{
    tabControl1.SelectedIndex = 0;

    LoginForm lf = new LoginForm();
    lf.endapp = true;
    lf.mf = this;
    lf.unbox.Text = String.Empty;
    lf.pasbox.Text = String.Empty;
    lf.ShowDialog();
}
[/align]

:VB
كود :
[align=left]Private Sub LogIn()
    TabControl1.SelectedIndex = 0

    LoginForm.endapp = True
    LoginForm.unbox.Text = String.Empty
    LoginForm.pasbox.Text = String.Empty
    LoginForm.ShowDialog()
End Sub
[/align]

في آخر كود إجراء التحميل للنموذج الرئيسي، تحت جملة الشرط نكتب:
:#C
كود :
[align=left]LogIn();[/align]

:VB
كود :
[align=left]LogIn()[/align]

الكود كاملاً داخل حدث تحميل النموذج الرئيسي:
:#C
كود :
[align=left]        private void MainForm_Load(object sender, EventArgs e)
        {
            if (!db.DatabaseExists())
                try { db.CreateDatabase(); }
                catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }

            try
            {
                var users = from d in db.Users
                            where d.Admin
                            select d;

                if (users.Count() == 0)
                {
                    DB.Users admin = new DB.Users();
                    admin.Username = "Admin";
                    admin.Password = "Admin";
                    admin.Admin = true;
                    admin.Active = true;

                    db.Users.InsertOnSubmit(admin);
                    db.SubmitChanges();
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); }

            LogIn();
        }[/align]

:VB
كود :
[align=left]    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not db.DatabaseExists() Then
            Try
                db.CreateDatabase()

            Catch ex As Exception
                MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
            End Try
        End If

        Try
            Dim users = From d In db.Users
                      Where d.Admin
                      Select d

            If users.Count() = 0 Then
                Dim admin As New DB.Users
                admin.Username = "Admin"
                admin.Password = "Admin"
                admin.Admin = True
                admin.Active = True

                db.Users.InsertOnSubmit(admin)
                db.SubmitChanges()
            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

        LogIn()
    End Sub
[/align]

لنرى مشروعنا كيف يعمل الآن، نجرب تسجيل الدخول دون كتابة شيء في مربعات النصوص، نجرب أيضاً كتابة اسم مستخدم وكلمة مرور خطأ، وأيضاً نغلق النموذج لنرى أنه لا يعود للنموذج الرئيسي بل يخرج من البرنامج كامل، ولا ننسى أن ندخل معلومات صحيحة لنرى أنه يعمل بشكل جيد.

سوف ننهي خيارات المستخدم أولاً، لذا قبل أن نبدأ بها يجب علينا تحديد الصلاحيات، سوف نمنع المستخدمين من إضافة مستخدم جديد للبرنامج وحذف مستخدم من البرنامج، باستثناء المدير، نعود للكود داخل حدث ضغط زر تسجيل الدخول ونكتب داخل جملة الشرط الرئيسية وتحت جملة الشرط الفرعية:
:#C
كود :
[align=left]mf.newuser.Enabled = user.SingleOrDefault().Admin;
mf.deluser.Enabled = mf.newuser.Enabled;
[/align]

:VB
كود :
[align=left]MainForm.newuser.Enabled = user.SingleOrDefault().Admin
MainForm.deluser.Enabled = MainForm.newuser.Enabled
[/align]

SingleOrDefault دالة تعود بصف واحد من جملة التحديد، والصف يحتوي خاصية Admin التي أدرجناها سابقا في فئة الـ Users، أسندنا قيمتها لخاصية التمكين في خيار إضافة مستخدم جديد، كما أسندنا قيمة التمكين في خيار حذف المستخدم لتساوي قيمة التمكين في خيار إضافة مستخدم جديد، بقي أن نخزن اسم المستخدم لكي نعدل بياناته، دون الحاجة لكتابة اسمه الحالي وكلمة المرور الخاصة به الحالية في النموذج الخاص بذلك، سوف نضيف في النموذج الرئيسي خاصية نخزن بها اسم المستخدم:
:#C
كود :
[align=left]private string un  = String.Empty;

internal string Username
{
    get { return un; }
    set { un = value; }
}
[/align]

:VB
كود :
[align=left]Private un As String = String.Empty

Friend Property Username As String
    Get
        Return un
    End Get

    Set(ByVal value As String)
        un = value
    End Set
End Property
[/align]

نذهب لنموذج تسجيل الدخول، لنكتب تحت سطري الصلاحيات:
:#C
كود :
[align=left]mf.Username = unbox.Text.Trim();
[/align]

:VB
كود :
[align=left]MainForm.Username = unbox.Text.Trim()
[/align]

الكود كامل في نموذج تسجيل الدخول:
:#C
كود :
[align=left]    public partial class LoginForm : Form
    {
        public LoginForm()
        {
            InitializeComponent();
        }

        private DB.PhoneBookDB db = new DB.PhoneBookDB();
        internal bool endapp = true;
        internal MainForm mf = null;

        private void Button1_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(unbox.Text.Trim()) || String.IsNullOrEmpty(pasbox.Text.Trim()))
            {
                MessageBox.Show("يجب إدخال اسم المستخدم وكلمة المرور", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            try
            {
                var user = from u in db.Users
                           where u.Username == unbox.Text.Trim() && u.Password == pasbox.Text.Trim()
                           select u;

                if (user.Count() != 0)
                {
                    if (!user.SingleOrDefault().Active)
                    {
                        MessageBox.Show("لقد أدخلت اسم مستخدم موقوف", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    mf.newuser.Enabled = user.SingleOrDefault().Admin;
                    mf.deluser.Enabled = mf.newuser.Enabled;
                    mf.Username = unbox.Text.Trim();

                    endapp = false;
                    Close();
                }
                else MessageBox.Show("اسم المستخدم أو كلمة المرور خطأ", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch { }
        }

        private void LoginForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (endapp) Application.Exit();
        }
    }
[/align]

:VB
كود :
[align=left]Public Class LoginForm

    Private db As New DB.PhoneBookDB()
    Friend endapp As Boolean = True

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If String.IsNullOrEmpty(unbox.Text.Trim()) OrElse String.IsNullOrEmpty(pasbox.Text.Trim()) Then
            MessageBox.Show("يجب إدخال اسم المستخدم وكلمة المرور", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        Try
            Dim user = From u In db.Users
             Where u.Username = unbox.Text.Trim().ToLower() AndAlso u.Password = pasbox.Text.Trim().ToLower()
             Select u

            If user.Count() <> 0 Then
                If Not user.SingleOrDefault().Active Then
                    MessageBox.Show("لقد أدخلت اسم مستخدم موقوف", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    Exit Sub
                End If

                MainForm.newuser.Enabled = user.SingleOrDefault().Admin
                MainForm.deluser.Enabled = MainForm.newuser.Enabled
                MainForm.Username = unbox.Text.Trim()

                endapp = False
                Close()

            Else
                MessageBox.Show("اسم المستخدم أو كلمة المرور خطأ", Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If

        Catch

        End Try
    End Sub

    Private Sub LoginForm_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If endapp Then End
    End Sub
End Class
[/align]
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
إنشاء مشروع باستخدام sql server و linq وتقارير crystal report - بواسطة DreamsDotNet - 10-03-13, 07:00 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم