PDA

View Full Version : سوال: مشکل در اجرای کد override



MahmoodM30
شنبه 12 فروردین 1396, 14:28 عصر
سلام به دوستان عزیز ممنون میشم در مورد این مشکل من رو راهنمایی کنید

توی پروژه ام دو تا فرم دارم به اسم های BaseForm و Form1 مثلا و Form1 از BaseForm ارث بری میکنه حالا من توی فرم BaseForm یه کدی نوشتم به این شکل

namespace WindowsFormsApplication1
{
public partial class BaseForm : Form
{
public BaseForm()
{
InitializeComponent();
}

public virtual void SaveRecord(bool applyMode)
{
MessageBox.Show("BaseForm Run");
}
}
}

و کد فرم Form1 به شکل زیر

namespace WindowsFormsApplication1
{
public partial class Form1 : BaseForm
{
public Form1()
{
InitializeComponent();
}

public override void SaveRecord(bool applyMode)
{
MessageBox.Show("save");
}

private void button1_Click(object sender, EventArgs e)
{
base.SaveRecord(true);
MessageBox.Show("اطلاعات با موفقیت ذخیره شد", "پیغام",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
}
}

حالا من توی فرم Form1 رو دکمه کلیک میکنم پیغام "BaseForm Run" از فرم BaseForm اجرا میکنه و بعد باید از Form1 هم بیاد و پیغام "save" رو هم نشون بده ولی درست کار نمیکنه و نمیدونم کجاو اشتباه نوشتم در کل کد زیر از Form1 اجرا نمیشه

public override void SaveRecord(bool applyMode)
{
MessageBox.Show("save");
}

Mahmoud.Afrad
شنبه 12 فروردین 1396, 15:45 عصر
نباید هم اجرا بشه. شما متد SaveRecord از کلاس پایه(base) را فراخوانی کردید نه متد SaveRecord در کلاس مشتق شده.

MahmoodM30
شنبه 12 فروردین 1396, 15:48 عصر
ممنون میشم یکم بیشتر توضیح بدید و بگید خب چطوری باید انجام بدم تا درست کار کنه

MahmoodM30
سه شنبه 15 فروردین 1396, 01:06 صبح
سلام مجدد به دوستان در مورد این سوال به نتیجه ای نرسیدم گنگ شده برام میخخواستم ببینم آیا کد BaseForm رو به شکل زیر بنویسم درسته بنظر؟ ممننون میشم دوستان یه راهنمایی کلی بکنن

namespace WindowsFormsApplication1

{

public partial class BaseForm : Form

{
public BaseForm()
{
InitializeComponent();
}

public virtual void SaveRecord(bool applyMode)

{
MessageBox.Show("BaseForm Run");
SaveRecord(true);


}

}

}

Mahmoud.Afrad
سه شنبه 15 فروردین 1396, 03:38 صبح
شما مشخص نکردید چه چیزی میخواهید. ترتیب اجرا رو مشخص کنید. آیا با اجرای یک متد باید متد دیگر هم اجرا بشه یا نه؟

در هر صورت، در کلاس مشتق شده میتونید در محل مناسب ، متد کلاس پایه رو هم صدا بزنید.

MahmoodM30
سه شنبه 15 فروردین 1396, 11:26 صبح
ممنون دوست عزیز
من میخوام با زدنbutton1 توی فرم BaseForm بیاد یه کدی رو که کارش چک کردن خالی بودن فیلد ها هست رو برام اجرا کنه و وقتی اون رو اجرا کرد فیلد خالی بود خب متوقف میشه و میگه فلان فیلد خالیه حالا من این کد رو ننوشتم و به جاش MessageBox.Show("BaseForm Run"); رو گذاشتم حالا اگه این اجرا بشه میخوام بعدش دوباره بیاد تو فرم1 من کد زیر رو اجرا کنه

public override void SaveRecord(bool applyMode)

{

MessageBox.Show("save");
}

Mahmoud.Afrad
سه شنبه 15 فروردین 1396, 18:37 عصر
متوجه نمیشم دیگه کجاش مشکل دارید. کافیه هر جا و به هر ترتیبی نیاز داشتید متد کلاس پایه رو فراخوانی کنید.
public override void SaveRecord(bool applyMode)
{
base.SaveRecord(applyMode);
MessageBox.Show("save");
}

private void button1_Click(object sender, EventArgs e)
{
this.SaveRecord(true);
MessageBox.Show("اطلاعات با موفقیت ذخیره شد", "پیغام",
MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}