ايمن ميلاد نشر الجمعة في 07:25 أرسل تقرير نشر الجمعة في 07:25 السلام عليكم لماذا عند الضغط علي انتر تظهر بيانات في داتا قريد 4 ولكن عند اضافة صنف من جديد يظهر اخير ولا يحتفظ بالقديم ممكن حل مشكلة if (e.KeyCode == Keys.Enter) { ff.dataGridView4.Rows.Add(label2.Text,textBox1.Text); ff.ShowDialog(); } 1 اقتباس
0 محمد_عاطف نشر الجمعة في 08:31 أرسل تقرير نشر الجمعة في 08:31 وعليكم السلام ورحمة الله وبركاته. في كل مرة تضغط فيها على 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 ايمن ميلاد نشر الجمعة في 09:00 الكاتب أرسل تقرير نشر الجمعة في 09:00 (معدل) نفدت خطوة واحد لزالت نفس مشكلة يضيف صنف ثم يختفي قديم تم التعديل في الجمعة في 09:33 بواسطة ايمن ميلاد اقتباس
0 Mustafa Suleiman نشر منذ 6 ساعة أرسل تقرير نشر منذ 6 ساعة بتاريخ 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 ايمن ميلاد نشر منذ 4 ساعة الكاتب أرسل تقرير نشر منذ 4 ساعة 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 Mustafa Suleiman نشر منذ 4 ساعة أرسل تقرير نشر منذ 4 ساعة بتاريخ 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(); } 1 اقتباس
0 ايمن ميلاد نشر منذ 4 ساعة الكاتب أرسل تقرير نشر منذ 4 ساعة لزالت نفس مشكلة اخي مصطفي ممكن تحل مشكلة لي عن طريق anydisk اقتباس
0 Mustafa Suleiman نشر منذ 4 ساعة أرسل تقرير نشر منذ 4 ساعة بتاريخ 10 دقائق مضت قال ايمن ميلاد: لزالت نفس مشكلة اخي مصطفي ممكن تحل مشكلة لي عن طريق anydisk أرفق مجلد المشروع بشكل مضغوط لتفقده اقتباس
0 ايمن ميلاد نشر منذ 2 ساعة الكاتب أرسل تقرير نشر منذ 2 ساعة (معدل) ماهي مشكله اخي مصطفى تم التعديل في منذ 2 ساعة بواسطة ايمن ميلاد اقتباس
السؤال
ايمن ميلاد
السلام عليكم لماذا عند الضغط علي انتر تظهر بيانات في داتا قريد 4 ولكن عند اضافة صنف من جديد يظهر اخير ولا يحتفظ بالقديم ممكن حل مشكلة
10 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.