منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[C#.NET] نقل بيانات من فور الي فورم - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (https://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (https://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : [C#.NET] نقل بيانات من فور الي فورم (/showthread.php?tid=52163)



نقل بيانات من فور الي فورم - Elalfee - 08-03-25

السلام عليكم  سؤال في لغة السي شارب عايز انقل بيانات من داتا جريد فيوا في فورم 1  مخزنه في ماي سيكوال  الي داتا جريد فيوا في فورم 2 او الي تكست بوكس في فورم اخر لتسجيلها في  ماي سيكوال اخر ممكن الكود لو سمحتم وشكرا جزيلا


RE: نقل بيانات من فور الي فورم - Taha Okla - 08-03-25

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

المشكلة عندك هي : كيف تتحكم بأداة موجودة على نافذة ثانية؟؟  :

لن أشرح لك المشكلة نفسها بل مثال بسيط عنها 
وأنت قم بحل مشكلتك مع نقل البيانات،

للتبسيط : أفتح مشروع جديد وضع فيه نافذتين :
في النافذة الأولى ضع عليها زرين (button1) - (button2)
وفي النافذة الثانية ضع عليها (textBox1)
من أجل أن  تجعل الـ (textBox1) مرئية في كل النوافذة الأخرى 
عليك منح صلاحيات الرؤية لها وذلك من خلال الخاصية (Modifiers) اختر منها القيمة (Public) مثلاً..

نرجع للنافذة الأولى التي سنقوم من خلالها التحكم بمدخلات التكست الموجودة على النافذة الثانية.
عليك أولاً أن تصنع متغير مرتبط مرجعياً بالنافذة الثانية بحيث يتحكم بالنافذة الثانية إن كانت مفتوحةو إن لم تكن مفتوحة يفتح نسخة جديدة عنها.
ضمن منطقة التصريح العام تكتب الكود التالي:

كود :
Form2 frm2 = (Form2)Application.OpenForms["Form2"];



ضمن حدث الـ (button1) عليك أن تكتب الكود التالي:
كود :
if (frm2 != null)
   frm2.Activate();
else
{
   frm2 = new Form2();
   frm2.Show();
}

بهذا تصبح النافذة الثانية مرتبطة بالمتغير (frm2) فأي أمر يوجه لها من خلاله يتم تنفيذه على كل أداة خاصية الرؤية فيها (Public) يتم تنفيذه مباشرة..
لو أردنا أن نكتب أي شيء في مربع النص الموجود على النافذة الثانية نعطيه الأمر :
كود :
frm2.textBox1.Text = "Hello...";

فيصبح الكود الموجود على النافذة الأولى بالشكل التالي :
كود :
Form2 frm2 = (Form2)Application.OpenForms["Form2"];
private void button1_Click(object sender, EventArgs e)
{

   if (frm2 != null)
       frm2.Activate();
   else
   {
       frm2 = new Form2();
       frm2.Show();
   }

   
}

private void button2_Click(object sender, EventArgs e)
{
   frm2.textBox1.Text = "Hello";
}

الزر الأول يربط النافذة الثانية إن كانت ظاهرة أو ينشئها من جديد ويربطها بالمتغير frm2
والزر الثاني يتحكم بالمدخلات في مربع النص الموجود على النافذة الثانية ..
هذه الطريقة فيك تعممها على كل الأدوات في أي نافذة من نوافذ السي شارب ..

والآن جاء دورك : لتساعد نفسك في مشروعك..


RE: نقل بيانات من فور الي فورم - Elalfee - 09-03-25

اشكرك اخي الكريم taha علي المعلومة القيمة هذه واستفدت منها كثرا وسوف اجربها علي مشروع اخر ولكن في هذا المشروع  يبدوا اني لم اوفق في شرح ما اريد حتي تتمكن من مساعدتي انا عندي فورم1 وفورم 2 كل واحد به  به داتاجريد فيو مرتبطا ب ماي سيكوال اسمه data و به جدولين الاول اسمه product  وده للفورم 1 والثاني اسمه  warehouse وده للفورم الثاني وعند عمل select  في الداتا جريد فيو فورم 1 يفتح فورم 3 وبه 4 او 5 text Box واحد لاسم المنتج والثاني للكميه وهكذا ويوجد 2  button واحد لاتمام التحويل من data product الي data warehouse وال button 2 للرجوع عن ارسال البيانات  وهذا كل ما في الامر وارجوا  يكون فيه طريقه لهذا ؟؟؟؟ !!!


RE: نقل بيانات من فور الي فورم - salamandal - 07-01-26

(09-03-25, 08:49 AM)Elalfee كتب : اشكرك اخي الكريم taha علي المعلومة القيمة هذه واستفدت منها كثرا وسوف اجربها علي مشروع اخر ولكن في هذا المشروع  يبدوا اني لم اوفق في شرح ما اريد حتي تتمكن من مساعدتي انا عندي فورم1 وفورم 2 كل واحد به  به داتاجريد فيو مرتبطا ب ماي سيكوال اسمه data و به جدولين الاول اسمه product  وده للفورم 1 والثاني اسمه  warehouse وده للفورم الثاني وعند عمل select  في الداتا جريد فيو فورم 1 يفتح فورم 3 وبه 4 او 5 text Box واحد لاسم المنتج والثاني للكميه وهكذا ويوجد 2  button واحد لاتمام التحويل من data product الي data warehouse وال button 2 للرجوع عن ارسال البيانات  وهذا كل ما في الامر وارجوا  يكون فيه طريقه لهذا ؟؟؟؟ !!!

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

كود :
    public partial class FactForm : Form
    {
    private int year;
       private int factureNumber;
        public FactForm(int factureNumber, int year)
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            this.factureNumber = factureNumber;
           this.year = year;
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }


اما فتح النموذج الخاص بالفاتورة فيكون بالطريقة التالية 

كود :
          new FactForm(factNumber, year).Show();

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


اتمنى ان اكون قد وفقت في توصيل الفكرة


RE: نقل بيانات من فور الي فورم - asemshahen5 - 29-01-26

ضع كلاس جديد و عرف فيه متغيير من نوع ستاتك و استدعه من اي فورم و عبأه ما تريد و من ثم استدعه من فورم ثان في حدث اللود مثلا و حمل منه القيمة المعبئة او عرف خاصية ستاتك في كلاس و عبئها في الفوررم الأول و حمل منها القيمة المعبئة مثال :

كود تعريف المتغيير و كود تعريف خاصية جديدة :

كود :
namespace WindowsFormsApp1
{
   internal class Class1
   {
       internal static string Test = "";
       public static string SendTo { get; set; }
   }
}

كود الفورم 1 تعبئة المتغيير و الخاصية الجديدة :

كود :
namespace WindowsFormsApp1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
           Class1.Test = textBox1.Text;
           Form2 frm = new Form2();
           frm.ShowDialog();
       }

       private void button2_Click(object sender, EventArgs e)
       {
           Class1.SendTo=textBox1.Text;
           Form2 frm= new Form2();
           frm.ShowDialog();
       }
   }
}

كود تحمييل القيم المعبئة من اللمتغيير أو الخاصية الجديدة الى ليبل في الفورم الثان :

كود :
namespace WindowsFormsApp1
{
   public partial class Form2 : Form
   {
       public Form2()
       {
           InitializeComponent();
       }

       private void Form2_Load(object sender, EventArgs e)
       {
           if (Class1.Test.Length == 0)
           {
               label1.Text = Class1.SendTo;
           }
           else
           {
               label1.Text = Class1.Test;
           }

       }
   }
}