PDA

View Full Version : مبتدی: ارث بری از فرم



ma_barnamenevis
یک شنبه 20 فروردین 1391, 10:59 صبح
می خواهم فرم Frm_Bill از فرم Frm_Global ارث بری کند ، به شکل زیر عمل کردم :


namespace Damoon_c
{
public ref class Frm_Global : public System::Windows::Forms::Form
{
public:
Frm_Global(void)
{
InitializeComponent();
}
protected:
~Frm_Global()
{
if (components)
{
delete components;
}
}



namespace Damoon_c {
public ref class Frm_Bill : public Frm_Global
{
public:
Frm_Bill(void)
{
InitializeComponent();
}
protected:
~Frm_Bill()
{
if (components)
{
delete components;
}
}

نمی دونم اشکال کارم کجاست !

mehdi.mousavi
سه شنبه 22 فروردین 1391, 15:49 عصر
نمی دونم اشکال کارم کجاست !

سلام.


نام گذاری کلاس ها بدین شکل صحیح نیست (به گفتگوی فنی شماره یک رجوع کنید).
متود InitializeComponent در Base Class بصورت private تعریف شده، بنابراین شما نمیتونید اونو از کلاس Frm_Bill فراخوانی کنید.
اصلا نیازی به فراخوانی InitializeComponent ندارید. کلاس Frm_Bill هنگام Instantiate شدن متود InitializeComponent رو فراخوانی خواهد کرد. به بیان دیگه، وقتی Frm_Bill شما new بشه، ابتدا Constructor کلاس Base فراخوانی میشه (و در نتیجه InitializeComponent) و سپس کد موجود در Constructor کلاس Frm_Bill اجرا خواهد شد. همچنین هستش Destructor کلاس... (البته اینجا، ابتدا destructor کلاس Frm_Bill فراخوانی میشه، سپس، اجرا به destructor کلاس base منتقل میشه و در نتیجه components ها cleanup میشن.

بنابراین، اگر نام کلاسها رو تصحیح کنیم، کد زیر رو خواهیم داشت:


#include "GlobalForm.h"

namespace MyNameSpace {
public ref class BillForm :public GlobalForm
{
public:
BillForm(void)
{
}

~BillForm()
{
}
};
}

حالا می تونید توی Constructor و Destructor کد مورد نظر خودتون رو بنویسید...

موفق باشید.