اذهب إلى المحتوى

السؤال

نشر

السلام عليكم لماذا عند الضغط علي انتر تظهر بيانات في داتا قريد 4 ولكن عند اضافة صنف من جديد يظهر اخير ولا يحتفظ بالقديم ممكن حل مشكلة 

  if (e.KeyCode == Keys.Enter)
  {
          
        ff.dataGridView4.Rows.Add(label2.Text,textBox1.Text);
      ff.ShowDialog();
  }

 

Recommended Posts

  • 0
نشر

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

في كل مرة تضغط فيها على Enter يتم تنفيذ السطر ff.ShowDialog()، أي يتم فتح الفورم ff من جديد وبما أن ShowDialog() يفتح النموذج كنافذة جديدة مستقلة فعند كل ضغطة إنتر يتم إنشاء نسخة جديدة من الفورم أو إعادة تهيئته وبالتالي يفقد البيانات القديمة في dataGridView4.

والحل يجب أن تجعل الفورم ff مفتوح أو محفوظ مسبقا في الذاكرة ثم فقط تضيف الصف الجديد دون إعادة فتحه.

فمثلا لنقوم بفتح الفورم مرة واحدة فقط

Form4 ff = new Form4(); // أنشئه خارج الحدث، مثلاً في أعلى الكود أو في ال constructor

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        ff.dataGridView4.Rows.Add(label2.Text, textBox1.Text);
        ff.Show(); // أو Show() بدلاً من ShowDialog() حتى لا يوقف التنفيذ
    }
}

أما إذا كنت تحتاج ShowDialog() لسبب معين مثل إغلاقه بعد كل إدخال فيجب أن تحفظ البيانات في متغير أو قاعدة بيانات أو List مؤقتة ثم تعيد تحميلها.

List<string[]> items = new List<string[]>();

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        items.Add(new string[] { label2.Text, textBox1.Text });
        Form4 ff = new Form4();
        foreach (var row in items)
        {
            ff.dataGridView4.Rows.Add(row);
        }
        ff.ShowDialog();
    }
}

 

  • 0
نشر
بتاريخ On 24‏/10‏/2025 at 12:00 قال ايمن ميلاد:

نفدت خطوة واحد لزالت نفس مشكلة يضيف صنف 

ثم يختفي قديم

تقصد الحل الأول؟ هل قمت بإغلاق الفورم ff من زر الإغلاق X، فالنظام سيقوم بتدميره Dispose، وفي المرة التالية عند إضافة صف إليه، البرنامج سيحاول الكتابة على ورقة تم رميها بالفعل، وسيظهر خطأ ObjectDisposedException.

لذا عرف الفورم خارج الحدث، على مستوى الكلاس أي الفورم الرئيسي:

public partial class MainForm : Form // اسم الفورم الرئيسي لديك
{
    Form4 ff; 

    public MainForm()
    {
        InitializeComponent();
    }

    //  باقي الكود هنا  

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {

            if (ff == null || ff.IsDisposed)
            {
                ff = new Form4(); 
            }

            ff.dataGridView4.Rows.Add(label2.Text, textBox1.Text);

            
            if (!ff.Visible)
            {
                ff.Show(); 
            }
            else
            {
                ff.BringToFront();
            }
        }
    }
}

عرفت المتغير ff على مستوى الكلاس ليحتفظ بقيمته ولا يتم تدميره مع كل ضغطة Enter.

و if (ff == null || ff.IsDisposed) قبل أن نستخدم ff، نتأكد هل هو غير موجود null أو هل تم إغلاقه وتدميره IsDisposed إن كان كذلك، ننشئ نسخة جديدة منه، لنضمن أننا دائماً نتعامل مع فورم صالح للاستخدام.

و if (!ff.Visible) لمنع فتح الفورم مرة أخرى في حال مفتوحبالفعل، وبدلاً من ذلك يجلبه للأمام باستخدام BringToFront().

  • 0
نشر
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 sales
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

       




        invoice ff ;



        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Enter)
            {

                if (ff == null || ff.IsDisposed)
                {
                    ff = new invoice();
                }

                ff.dataGridView4.Rows.Add(label2.Text, textBox1.Text);


                if (!ff.Visible)
                {
                    ff.Show();
                }
                else
                {
                    ff.BringToFront();
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

اخي اختار صنف يضفيه ثم عند اضافة صنف جديد يظهر جديد ويختفي قديم 

يمكن ارسل لكي ip  تدخل تحل مشكلة لي عن طريق anydisk

  • 0
نشر
بتاريخ 3 دقائق مضت قال ايمن ميلاد:
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 sales
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

       




        invoice ff ;



        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Enter)
            {

                if (ff == null || ff.IsDisposed)
                {
                    ff = new invoice();
                }

                ff.dataGridView4.Rows.Add(label2.Text, textBox1.Text);


                if (!ff.Visible)
                {
                    ff.Show();
                }
                else
                {
                    ff.BringToFront();
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

اخي اختار صنف يضفيه ثم عند اضافة صنف جديد يظهر جديد ويختفي قديم 

يجب ألا تدع نافذة الفاتورة تُدمر عند إغلاقها، بل قم بإخفائها فقط، لتحتفظ النافذة ببياناتها وهي الأصناف الموجودة في الـ DataGridView، وفي المرة التالية التي تحتاجها، ستقوم بإظهارها مرة أخرى بدلاً من إنشائها من الصفر.

في  invoice.cs أو ما شابه لديك أنشئ الدالة التالية:

private void invoice_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;

    this.Hide();
}

 

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...