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

اين الخلل في برنامجي؟

مغلق
بدأه الامبراطور في 23 أكتوبر 2007 · 8 رد · 793 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

..

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

public partial class Form1 : Form
	{
		student[] s = new student[5];
		int count = 0;
		public Form1()
		{
			InitializeComponent();
		}

		private void BtnSubmit_Click(object sender, EventArgs e)
		{		
				string str = "S00" + (count + 1);
				s[count].id = str;
				s[count].name = Convert.ToString(txtNam.Text);
				s[count].age = Convert.ToInt32(TxtAge.Text);
				if (i < 5)
				{
					CmbId.Items.Add(count);
				}
				else
					MessageBox.Show("5 Places has been filled");

		}

وهذا الكلاس Student:

public class student
	{
		public string name;
		public int age;
		public string id;
		//static int count=0;
		public student(string Name, int Age, string Id)
		{
			name = Name;
			age = Age;
			id = Id;
		}

اثناء التشغيل يعرض لي اكسبشن, المشكله هي في التعامل مع الكونستركتر, حيث انني عندي مشكله في تمرير القيم الى الكونستركتر في البرنامج بالذات واني استخدم ارري للاوبجكت...

اعرف ان الحل سهل, ولكن مافي خبرة كافيه...

:)

#3

تفظل اخي...

في الواقع فقد نسخت الاكسبشن من خلال الخيار الذي يوفرة الى الكليببورد, واليك هو:

System.NullReferenceException was unhandled

Message="Object reference not set to an instance of an object."

Source="winapp1"

StackTrace:

at winapp1.Form1.BtnSubmit_Click(Object sender, EventArgs e) in D:\Documents and Settings\saidan\My Documents\Visual Studio 2005\Projects\winapp1\winapp1\Form1.cs:line 23

at System.Windows.Forms.Control.OnClick(EventArgs e)

at System.Windows.Forms.Button.OnClick(EventArgs e)

at System.Windows.Forms.Button.PerformClick()

at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData)

at System.Windows.Forms.Control.ProcessDialogKey(Keys keyData)

at System.Windows.Forms.Control.PreProcessMessage(Message& msg)

at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg)

at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg)

at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNative

ethods.IMsoComponent.FPreTranslateMessage(MSG& msg)

at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNat

veMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

at System.Windows.Forms.Application.Run(Form mainForm)

at winapp1.Program.Main() in D:\Documents and Settings\saidan\My Documents\Visual Studio 2005\Projects\winapp1\winapp1\Program.cs:line 17

at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)

at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ThreadHelper.ThreadStart()

:)

#4

ضع كود خلق الأوبجكت داخل الكونستركتر الخاص بالفورم. هكذا:

public partial class Form1 : Form
	{
		student[] s;
		int count = 0;
		public Form1()
		{
			InitializeComponent();
		s = new student[5];
		}
#5

..

مع الأسف: نفس الاكسبشن يظهر مرة اخرى,,,

يقولون ان المشكلة في طريقة انشاء الاوبجكت, حيث أن الطريقة الموجودة تقوم بتوفير رفرنس فقط على اما اعتقد..

وبالتالي فان هناك امر اخر يجب ان يكتب حتى يقون بانشاء الاوبجكت...

هذا ما فهمته..

#6

السلام عليكم

ضع تكرار لانشاء النسخ من الكائن كالتالي

public partial class Form1 : Form
	{
	   student[] s = new student[5];
		int count = 0;

		public Form1()
		{
			InitializeComponent();

			for (int i = 0; i < 5; i++)

		   {
				s = new student();

			}
		}
	}

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

		   string str = "S00" + (count+1);
		   s[count].id = str;
		   s[count].name = Convert.ToString(txtNam.Text); 
			s[count].age = Convert.ToInt32(TxtAge.Text);
		   // الانتقال للسجل التالي 
			count ++;

			if (count < 5)
			{
				CmbId.Items.Add(count);
			}
			else
			{
				MessageBox.Show("5 Places has been filled");

			}

تحياتي

تم تعديل هذه المشاركة بواسطة الكون في 24 أكتوبر 2007 في 10:04

#7

..

بعد وضع اللوب في البرنامج يظهر خطأ يقول انه يجب ان تمرر Arguments الى الكلاس student

"No Overload Method 'student' takes 0 Arguments;

#8

السلام عليكم

لانك فرضت ان يكون المشيد للكلاس يتطلب بارمترات قم بانشاء مشيد آخر بدون بارمترات كالتالي ا

او ضع في التكرار قيم افتراضية

public class student	
	{
	public string name;	
	public int age;	
	public string id;	
	//static int count=0;	
	//مشيد لا يتطب بارمترات 	
	public student() { }	
	// المشيد الاصلي		
   public student(string Name, int Age, string Id)	
	{		
	name = Name;	
	age = Age;	
	id = Id;		
			   }	
	}

للفائدة و لتجربة التخزين هذا كود لزر اوامر اخر يقوم بعرض بيانات النسخة في مربع الاسم و العمر بناء على الاختيار من مربع القائمة

اختر احد ارقام مربع القائمة و اضغط على زر الاسترجاء ليعرض لك البيانات

 private void button2_Click(object sender, EventArgs e)	
	{
	int x=CmbId.SelectedIndex;	
	txtNam.Text = s[x].name;		
	TxtAge.Text = s[x].age.ToString();	
	}

تحياتي

تم تعديل هذه المشاركة بواسطة الكون في 24 أكتوبر 2007 في 16:51

#9

..

اشكرك على هذه المعلومات,

بالنسبة الى الكونستركتر فأنا علي أن اعرفه بهذه الطريقة, فهو متطلب في البرنامج لانه تدريب للكونستركتر مع انشاء الاوبجكتس....

كما قلت سابقا فان الخلل هنا في طريقة انشاء الاوبجكت وليس في الكونستركتر..

على حسب كلام الي يدرسنه يقول ان السطر الموجود في الاعلى يعطي ريفرنس ولازم تعرف الكائن بطريقة مختلفه, انا صراحه ما فهمت ويش قال لكن هذا المضمون...

اضاف سطر جديد الى البرنامج, جربته ايضا هنا ولم يعمل ولكنه كان يعمل عند المدرس

student stu=(student) s[5];

ولا ادري مالمشكله...

هذا الموضوع مغلق.

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