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

[تنبيه - عنوان غير مناسب : ]مشكلة فى السى شارب من أول يوماتعلمته لحد دلوقتى

بدأه EnigmaLine في 27 نوفمبر 2011 · 9 رد · 1,918 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

انا المكشلة دى معايا من اول ما اتعمل السى شارب لحد دلوقتى مش لاقلها حل

المشكلة ان فى الشارب لازم اعرف الفورم قبل ما افتحه

رمز برمجي:

Form2 frm2 = new Form2();

frm2.Show();

كده تمام وبقفل الفورم عادى جدا ( الفورم رقم 2) وبدوس على الزرار فى الفورم الاول بيفتحه تانى

كل ده تمام المشكله الولى ان انا مش بقدر ابعت قيمة للفورم رقم 2 من اى زرار تانى فى الفورم الاول علشان هو متعرف تحت الزرار الاول

يعنى انا لو عندى الفورم الاول فى 2 زرار والفورم التانى فى تكست بوكس

عندى الزرر الاول فى الفورم الاول بكتب فيه الكود السابق علشان افتح الفورم التانى

بس اكتب فى الزرار التانى للفورم الاول الكود ده

رمز برمجي:

Form2 frm2 = new Form2();

frm2.textBox1.Text = "2";

طبعا قيمة التكست بوكس فى الفورم التانى مش بتتغير وده طبعا علشان انا معرف الفورم التانى داخل الزرارا الاول

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

رمز برمجي:

Form2 frm2 = new Form2();

وفى الزرار الاول للفورم الاول

رمز برمجي:

frm2.Show();

وفى الزرار التانى للفورم الاول

رمز برمجي:

frm2.textBox1.Text = "2";

كده بيشتغل تمام اكيد كلكو جربتو كده

المشكلة اللى ظهرتلى بعد كده ان انا مش بقدر اقفل الفورم علشان انا لما بقفله و افتحه تانى (الفوم التانى ) مش بيفتح معايا وبيدينى رسالة خطأ معناها ان الفورم اللى بحاول افتحه اتدمر ومش هاينفع افتحه تانى

حليت المشكلة دى بانى مش بقفل الفورم التانى بقيت اعمله اخفاء فى حدث الخروج من الفورم

رمز برمجي:

e.Cancel = true;

this.Hide();

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

Out OF Memory

ياريت اللى عنده حل لمشكلتى يقولى حلها ضرروى

#2

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

كل ما عليك هو تغيير خاصية الـ Modifiers إلى Public للـ textBox1 في الفورم الثاني .

ومن ثم عند تكوين كائن من الفورم الثاني تستطيع اسناد قيمة بنفس الطريقة التي ذكرتها "بدون ظهور اي أخطاء"

Form2 fm=new Form2();

Fm.textBox1.Text="Test";

fm.Show();

انصحك بقراءة هذه المقالة واضحة جداً.

تمناتي لك بالتوفيق.

تم تعديل هذه المشاركة بواسطة Rose Muhammed في 27 نوفمبر 2011 في 14:51

2

((إِنَّ اللَّهَ وَمَلائِكَتَهُ يُصَلُّونَ عَلَى النَّبِيِّ يَا أَيُّهَا الَّذِينَ آمَنُوا صَلُّوا عَلَيْهِ وَسَلِّمُوا تَسْلِيمًا))

#3

انا عارف الكلام اللى حضرتك كاتبه ده ياريت تقرا الموضوع للأخر

انا ماعنديش مشكلة في ارسال قيمة الى فورم من فورم آخر

دى حاجة من ضمن حاجات عايز اعملها فى الفورم مثلا فى حاجه تانية

لو انا عايز اشغل تايمر او اى حاجه تانية زى button1.performclick()

اعملها ازاى

−2
#4

عند حدث الضغط على الزر الأول, اكتبي التالي:

frm2 = new Form2();
frm2.Show();

هذا الكود يقوم بإعادة إنشاء متحول الفورم الثاني في كل مرة يتم الضغط على الزر 1

#5

ده برنامج صغير رفعته لتوضيح المشكلة

testoutofmemory.rar

هتلاحظ ان البرنامج شغال عادى بس المشكلة ان انا مش بقفل الفورم التانى انا بعمله اخفاء وده عاملى مشكلة ان البرنامج مع كتر التشغيل بيهنج

ولو شيلت الكود ده من حدث الإغلاق فى الفورم التانى

 e.Cancel = true;
            this.Hide();

مش هاتعرف تفتح الفورم تانى

تم تعديل هذه المشاركة بواسطة EnigmaLine في 27 نوفمبر 2011 في 17:08

#6

السلام عليكم

testoutofmemory2.rar

((إِنَّ اللَّهَ وَمَلائِكَتَهُ يُصَلُّونَ عَلَى النَّبِيِّ يَا أَيُّهَا الَّذِينَ آمَنُوا صَلُّوا عَلَيْهِ وَسَلِّمُوا تَسْلِيمًا))

#7

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

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

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

.:: Wish to become better and better ::.

#8

اخى تفضل الكود ده.... هذا الكود مثالا لحل مشكلتك

private void button1_Click(object sender, EventArgs e)

{

form1 a = new form1();

a.ShowDialog();

this. ..............TableAdapter.Fill(this.dataset1.form1); --->>

السطر ده تجربه لو عندك dataset و bindingsource ولو مش عندك ما فيش داعى تحطه

}

واتمنى لك التوفيق وشكرا

تم تعديل هذه المشاركة بواسطة صوت الماضى في 28 نوفمبر 2011 في 04:02

#9

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

بالنسبة لمشكلتك -حسب ما فهمت- أنك تريد طريقة للوصول للفورم بأعضائه من أي مكان بمشروعك,أليس كذلك؟

إن كان كذلك فلك التالي:

بداية سنقوم ببرمجة Generic Class للتعامل مع الكائنات من النوع Form كالتالي:

internal  class FormInitializer<F> where F:Form
   {

       F _Form;



       internal F Form
       {
           get
           {
               if (_Form==null || _Form .IsDisposed)
                   _Form = (F)(Activator.CreateInstance(typeof(F)));
               return _Form;
           }
       }

   }

مهمة الكلاس السابق هو إنشاء كائن جديد من الفورم المراد التعامل معه.

الخطوة الثانية نقوم ببرمجة كلاس آخر بحيث يكون static ولنسمّه مثلا FormsManager

ونصرح بداخله عن النماذج المراد التعامل معها بيحث تكون أيضا static , بالطبع سنستخدم الكلاس السابق FormInitializer لإنشاء نماذج

internal static class FormsManager
    {
        internal static FormInitializer<Form1> Form1= new FormInitializer<Form1>();
        internal static FormInitializer<Form2> Form2= new FormInitializer<Form2>();


    }

أما الآن وبكل بساطة يمكنك الوصول لForm1 و Form2 من أي مكان بالمشروع دون الحاجة لإنشاء نسخ جديدة

مثلا:

private void button1_Click(object sender,EventArgs e)
{
FormsManager.Form1.textBox1.Text="Welcome";
}

تم تعديل هذه المشاركة بواسطة Mohammed Asaad في 28 نوفمبر 2011 في 06:08

#10

يجد الاعتماد على الكونترست بتاع فورم 2

مرفق مثال لهاذا

نصحية برمجية

حاول اثناء كتابة الكود تقليل المتغيرات وال object بقدر المستطاع واختصار الكود

مثال استخدم

private void button1_Click(object sender, EventArgs e)
        {
            new Form2().Show();
        }

بدل

private void button1_Click(object sender, EventArgs e)
        {
            Form2 x = new Form2();
            x.Show();
        }

وهكذا

WindowsFormsApplication2.rar

تم تعديل هذه المشاركة بواسطة Black-Ghost في 13 يناير 2012 في 12:22

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