PDA

View Full Version : پیغام خطای Control '' has no parent window



m-khorsandi
جمعه 13 خرداد 1384, 01:49 صبح
درود

دوستان اگه راه حلی در مورد پیغام خطای Control '' has no parent window به
نظرشون میرسه، ممنون میشم کمکم کنن.

یه عکس از پیغام خطا و نمونه برنامه ایی که شامل پیغام خطا میشه رو هم گذاشتم.

m-khorsandi
جمعه 13 خرداد 1384, 01:59 صبح
در کل برنامه 7-8 خط بیشتر نیست، همینجا میذارم تا نیازی به Dowload نمونه برنامه نباشه:



procedure TForm1.FormCreate(Sender: TObject);
var
WinParent: TWinControl;
cbx: TComboBox;
Panel: tpanel;
begin
WinParent := TWinControl.Create(self);
Panel := tpanel.Create(WinParent);
cbx := TComboBox.Create(Panel);
cbx.Parent := WinParent; //Panel;
cbx.Items.Add('aaa');
end;

vcldeveloper
جمعه 13 خرداد 1384, 02:49 صبح
برای WinParent و Panel هم باید Parent تعریف کنید. برای این کار می تونید یا از متد CreateParented بجای Create استفاده کنید، یا خاصیت Parent هر کدوم از دو کنترل فوق رو تنظیم کنید:


WinParent := TWinControl.CreateParented(self);
Panel := tpanel.CreateParented(WinParent);

m-khorsandi
جمعه 13 خرداد 1384, 11:38 صبح
آقای کشاورز ممنون با راه حل شما مشکل حل شد.
اما اگه من بخوام با استفاده از کلاس TWinControl یه کامپوننت بنویسم که روی اون هم یک ComboBox و هم
یک Panel باشه، اون موقع برای Parent مربوط به TWinControl چه کاری باید انجام بدم.
البته این رو بگم که با Panel ایی که روی WinControl ساخته میشه مشکلی ندارم و برای ساختن
ComboBox روی WinControl هم مشکلی نیست ولی به محض اینکه میخوام چند تا item به ComboBox.Items ساخته شده روی WinControl اضافه کنم پیغام خطای بالا رو میده.
این کار رو هم برای ComboBox.Parent := Self کردم.

باز هم به خاطر راهنمایی ازتون ممنونم.

vcldeveloper
شنبه 14 خرداد 1384, 04:49 صبح
اما اگه من بخوام با استفاده از کلاس TWinControl یه کامپوننت بنویسم

ولی به محض اینکه میخوام چند تا item به ComboBox.Items ساخته شده روی WinControl اضافه کنم پیغام خطای بالا رو میده.
یه چیزی شبیه به این:


type
TMyClass = class(TWinControl)
private
FComboBox : TComboBox;
FPanel : TPanel;
public
constructor Create(AOwner: TComponent); override;
end;

implementation
{ TMyClass }
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Parent := TWinControl(Owner);
FPanel := TPanel.CreateParented(Self.Handle);
FComboBox := TComboBox.CreateParented(FPanel.Handle);
//Other initialization codes
end;

البته هنوز متوجه نشدم که وقتی یه TPanel دارید و روش هم TComboBox میزارید، چه لوزمی داره که از TWinControl هم استفاده کنید.

m-khorsandi
دوشنبه 16 خرداد 1384, 17:28 عصر
نه منظورم این نبود که روی Panel یه دونه ComboBox میخوام بذارم.
در هر صورت بابت راهنمائی بسیار ارزشمندت ازت ممنونم، مشکلم حل شد.