الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن إغلاق البرنامج

بدأه blacksun911 في 21 يوليو 2010 · 12 رد · 1,271 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اليوم عندي سؤالين سهلين إن شاء الله :

1- انا عندي فورم رئيسي وهو ال login يدخل فيه اسم المستخدم وكلمة المرور وبعدها حسب اسم المستخدم يذهب الى فورم معين . السؤال هو كالتالي :

كيف اغلق فورم ال login ?

اذا عملت له this.close() البرنامج كله يقفل .

واذا عملت له this.hide(); البرنامج ما يقفل نهائياً (يظل شغال في الخلفية).

السؤال الثاني :

انا كنت شغال على قاعدة بيانات acces وحولت sql بس واجهتني بعض المشاكل وحليتها . المشكلة اللي انا فيها الآن :

ان ال sql يضيف فراغ بعد النص وبالتالي لما تسوي جملة select مشروطة بنص مساوي للنص الموجود في الداتابيس لايظهر شئ لأنه في الداتابيس النص + الفراغ !!! كيف ممكن اتخلص من هذا الفراغ ؟

وتقبلوا خالص تحياتي

#2

ممكن يأخي تستخدم  panel بحيث panel1  تضع فيه عملية التحقق من إسم المستخدم و panel2 تضع فيه عمليات المتاحة للمستخدم

panel1.Visible = true;
            panel2.Visible = false;
            if (User.text == "User")
            {
                panel2.Visible = true;
                panel1.Visible = false;
            }

بحيث هذا حل له مزايا كثيرة أهمها إنقاص ضغظ على ذاكرة لأنك لا تستخدم فورم كامل و إنما تستخدم عدة Panel في فورم واحد

#3

برضوا ما فهمت بالظبط قصدك

كيف هتربط الفورم بال panal ?

كيف طريقة تعريف ال panales ?

ارجو التوضيح مع الشكر مسبقاً

تحياتي

#4

أخي أداة البانل هي مكان تقدر تحط فيه أي أداة تبغاها وتتحكم بالأدوات عن طريق البانل , بإختصار إعتبر أداة البانل هي كفورم مصغر .

فكرة الأخ mohammeding هو إنك تعمل ثنين Panles واحد بديل لفورم الدخول وواحد آخر بديل للفورم الذي تريده وتضع الأدوات بداخلهم

طبعاً البانل الثاني يكون الـ (Visible) يساوي false وعند التحقق من اليوزر والباسوورد بدال ماتفتح فورم جديدة تقول بإخفاء البانل الأول وإظهار البانل الثاني عن طريق الكود اللذي وضعه أخوي الكريم .. واضح؟؟؟

تم تعديل هذه المشاركة بواسطة azooz-tamimi في 21 يوليو 2010 في 21:11

118650.jpg
#5
اقتباس

بحيث هذا حل له مزايا كثيرة أهمها إنقاص ضغظ على ذاكرة لأنك لا تستخدم فورم كامل و إنما تستخدم عدة Panel في فورم واحد

لا آظن أن فورم تحوي على بيانات دخول ستسبب ذلك الضغط الكارثي على الذاكرة :) ...

الآفضل تقسيم Project إلى "وحدات Forms" بدلأ من "زيادة تعقيد " الفورم الواحد ، هذا رأيي ...

يمكنك إستخدام MDIParent و تصبح فورم الدخول و الفورم الثاني عبارة عن MDI Child ...

بالتوفيق

تم تعديل هذه المشاركة بواسطة م. حسام فيصل في 22 يوليو 2010 في 11:44 — السبب: تصحيح إملائي

#6

بالنسبة لسؤالك الثاني ممكن تضيف في جملة ال select فراغ عشان يطابق الموجود بالداتا بيس :) .. جربها وقلي

118650.jpg
#7
اقتباس

ا آظن أن فورم تحوي على بيانات دخول ستسبب ذلك الضغط الكارثي على الذاكرة

كل مبرمج له فكرته كما قلت لا تسبب ضغظ كارثي على ذاكرة فقط أردت أنا أن تكون برامجنا أكثر إحترافية بحكم دراستي لمادة complexity algorithm  والتي تلزمنا إنقاص الضغظ على الذاكرة قدر إلازام

مازلت أتعلكم منك أخ حسام بارك الله فيك

#8
اقتباس

كل مبرمج له فكرته كما قلت لا تسبب ضغظ كارثي على ذاكرة فقط أردت أنا أن تكون برامجنا أكثر إحترافية بحكم دراستي لمادة complexity algorithm والتي تلزمنا إنقاص الضغظ على الذاكرة قدر إلازام

دعني أختلف معك في هذه النقطة :

عندما تبني برنامجاً إحترافياً فإنك تتبع ما أمكن من مبادئ هندسة البرمجيات : الصيانة و إعادة الإستخدام . مثلاً : شاشة تسجيل الدخول : هل هي مخصصة لبرنامج معين أم موجودة في أغلب البرامج التي تنفذها ؟ بالطبع ستجيبني موجودة في أكثر من نظام ، السؤال : هل ستقوم في كل مرة بتنفيذ نظام جديد بإعادة كتابة و برمجة Panel التي تحوي على المكونات الخاصة بتسجيل الدخول مثلاُ ؟ طبعاً لا فهذا غير إحترافي ، أليس كذلك :wink: ؟

المنطق يقول أن "وحدة" تسجيل الدخول "Login Module " مختلف تماماً فهي تملك (على سبيل المثال ) صف class و فورم form مستقل يعالج قضية تسجيل الدخول دون أي "تداخل" مع Module آخر ، لذلك قمت ببناء "مكتبة " library تحتوي على هذا الوحدة ، في كل برامجي أقوم بالربط مع هذه المكتبة حيث أقوم بإستدعاء الفورم لمعرفة هل المستخدم يحق له الدخول Authenticated أم لا ، طبعاُ أستخدم Generic type للمستخدم ... إلخ .

على كل حال : جزاك الله خيراً و آنني آمل أننا لم نشتت صاحب الموضوع :) ..

بالتوفيق

#9
م. حسام فيصل كتب:

دعني أختلف معك في هذه النقطة :

عندما تبني برنامجاً إحترافياً فإنك تتبع ما أمكن من مبادئ هندسة البرمجيات : الصيانة و إعادة الإستخدام . مثلاً : شاشة تسجيل الدخول : هل هي مخصصة لبرنامج معين أم موجودة في أغلب البرامج التي تنفذها ؟ بالطبع ستجيبني موجودة في أكثر من نظام ، السؤال : هل ستقوم في كل مرة بتنفيذ نظام جديد بإعادة كتابة و برمجة Panel التي تحوي على المكونات الخاصة بتسجيل الدخول مثلاُ ؟ طبعاً لا فهذا غير إحترافي ، أليس كذلك :wink: ؟

المنطق يقول أن "وحدة" تسجيل الدخول "Login Module " مختلف تماماً فهي تملك (على سبيل المثال ) صف class و فورم form مستقل يعالج قضية تسجيل الدخول دون أي "تداخل" مع Module آخر ، لذلك قمت ببناء "مكتبة " library تحتوي على هذا الوحدة ، في كل برامجي أقوم بالربط مع هذه المكتبة حيث أقوم بإستدعاء الفورم لمعرفة هل المستخدم يحق له الدخول Authenticated أم لا ، طبعاُ أستخدم Generic type للمستخدم ... إلخ .

على كل حال : جزاك الله خيراً و آنني آمل أننا لم نشتت صاحب الموضوع :) ..

بالتوفيق

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

ثانياً: بخصوص سؤالي ، كيف يتم عمل child mdi

وتقبلوا خالص تحياتي

#10

بارك الله فيك أخ حسام نعم كما قلت من ناحية هندسة البرمجيات

فقط أناكنت أحكي على درجة التعقيد و أكثر إستهلاك لذاكرة

للأن تقييم خوارزميات لايأخد على صحتها و إنما على درجة تعقيدها

وكما قلت فهندسة برمجيات علم كبير فهو في حده تخصص في الجامعة

فتسجيل دخول فهو علم في حد ذاته مذكرات تخرج تقام عليه

سنستخدم طريقة أخ حسام و التي ترتكز على MDIParent and MDI Child

post-163892-061346500 1279843466_thumb.g

أنشئ فورم أب إسمه Form1 و فورم إبن إسمه Form2

وهاهو كود الأب

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

namespace parentmdi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.IsMdiContainer = true;
            Form2 frmchild = new Form2();
            frmchild.MdiParent = this;
            frmchild.Show();
        }




    }
}

كود ألأبن

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

namespace parentmdi
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "root")
            {
                this.Close();
            }
        }


    }
}

كود برنامج في مرفقات

parentmdi.rar

المرفقات
Pare_Chil.gif

تم تعديل هذه المشاركة بواسطة mohammeding في 23 يوليو 2010 في 03:22

1
#11

إخواني الكرام

مازلت مشكلتي قائمة وذلك لان بعد ادخال اسم المستخدم وكلمة السر سيتم الاختيار بين فورمين حسب كلمة السر المدخلة

رجاء النظر الى هذا الكود

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

namespace House_OF_Rays
{
    public partial class login : Form
    {
        public login()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

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

        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection();
            string connectionstring = "Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=Houseofrays;Data Source=192.168.1.7";
            // con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data source= " + myPath;
            con = new SqlConnection(connectionstring);
            String mySelection;
            mySelection = "select * from Login where User_Name =  '" + textBox1.Text.Trim() + "' and Password = '" + textBox2.Text.Trim() + "' ";
            SqlCommand cmd = new SqlCommand(mySelection, con);
            con.Open();

            SqlDataReader loader = cmd.ExecuteReader();
            if (!loader.Read())
            {
                label3.Text = "incorrect user name or password";
                con.Close();
            }
            else
            {
                string user = loader[0].ToString();
                if (user.Trim() == "11")
                {
                    Form1 ii = new Form1();
                    ii.Show();
                    this.Hide();
                }
                else if (user == "22")
                {
                    Store_Form ii = new Store_Form();
                    ii.Show();
                }
                //DialogResult = DialogResult.OK;
            }
        }

        private void login_Load(object sender, EventArgs e)
        {

        }
    }
}
#12

لم تقم بتنفيذ الكود الذي وضعه الآخ mohammeding !!! في المشاركة 4 ...

#13
اقتباس
السؤال الثاني :

انا كنت شغال على قاعدة بيانات acces وحولت sql بس واجهتني بعض المشاكل وحليتها . المشكلة اللي انا فيها الآن :

ان ال sql يضيف فراغ بعد النص وبالتالي لما تسوي جملة select مشروطة بنص مساوي للنص الموجود في الداتابيس لايظهر شئ لأنه في الداتابيس النص + الفراغ !!! كيف ممكن اتخلص من هذا الفراغ ؟

أخي الكريم من أحد التوابع للسلاسل النصية في ال sql هي:

trim و يتم استخدامها كالتالي:

بمثال أننا أضفنا على الجدول dr الذي يحتوي على عمودين(ااسم الأول و الكنية) السطر التالي

insert into dr values('bilal    ','salas')

كما ترى أخي أن الاسم بلال يحوي بنهايته على عدة فاغات لذلك عندما تريد استدعائه من قاعدة البيانات عليك استخدام التعليمة trim :

select trim(firstname) from dr where lastname='salas'

بالتالي ستكون النتيجة هي سلسلة نصية(الاسم)خالية من الفراغات من قبلها أو بعدها و يوجد تعليمتين أخرتين هما ltrim and r trim يعني

left trim and right trim

أرجو أن أكون قد أجبتك عن السؤال الثاني من طرحك

و عفوا على التأخير

تم تعديل هذه المشاركة بواسطة abulwleed في 8 أغسطس 2010 في 15:51

مواضيع مشابهة