چطور میشه تشخیص دا که کدوم button در یک فرم کلیک شده ؟
چطور میشه تشخیص دا که کدوم button در یک فرم کلیک شده ؟
می شه بیشتر راهنمایی کنید ؟؟
ولی بهر حال می تونید از اسم دکمه استفاده کنید !!!
اگه برای چند تا دکمه یک رویداد کلیک مشترک درست کردید( مثلا با کپی پیست) باید از کد زیر کمک بگیرید:
if (sender as tbutton).name then ...
من میخوام برای چند تا دکمه مختلف از یک فرم استفاده کنم ، یعنی وقتی هر کدوم از دکمه ها رو (که در فرمهای مختلف قرار دارن ) کلیک می کنم ، مثلاً form2 نمایش داده بشه ، ولی بسته به اینکه کدوم یک از این دکمه ها کلیک شده در form2 یک عمل خاصی انجام بشه (یه جورایی شاید multi threading) .
از کد بالا هم استفاده کردم ولی وقتی نام Button رو بهش معرفی می کنم error میده .
کدی که من نوشتم اینه :
if (sender as tbutton).name='form4.button1' then
و error ی که میده :
invalid class typecast
آخه name که '' نداره باید بنویسی : if (sender as tbutton).name=form4.button1 then
این رو هم امتحان کردم ولی باز همون error رو داد
نه ببخشید
اینطوری اصلاً syntax error می ده
incompatoble types 'String' and 'Tbottuns
بهتره قبل از انجام Type Cast نوع Sender رو چک کنید، چون Event مربوطه ممکنه توسط کامپوننت های دیگری هم فراخوانی بشه.
در مثال زیر واقعه TForm1.Button1Click توسط 3 دکمه روی فرم، و نیز یک CheckBox فراخوانی میشود:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Sender is TButton then
begin
if (Sender as TButton).Name = 'Button1' then
ShowMessage('You clicked Button1');
if (Sender as TButton).Name = 'Button2' then
ShowMessage('You clicked Button2');
if (Sender as TButton).Name = 'Button3' then
ShowMessage('You clicked Button3');
end;
if (Sender is TCheckBox)
and ((Sender as TCheckBox).Name = 'CheckBox1') then
ShowMessage('You Clicked CheckBox1');
end;
پروژه مثال ضمیمه شده است.
فکر کنم من منظورم رو بد رسوندم .
من یه فرم دارم که روش یه button هست . می خوام از این فرم برای چند تا کار استفاده کنم ، یعنی نمی خوام چند تا فرم مشابه بسازم ؛ فقط مشکل اینه که وقتی button روی فرم رو کلیک کردم ، بسته به اینکه این فرم توسط کدوم کامپوننت (که می تونه در فرمهای دیگه هم قرار داشته باشه) فعال شده ، یک عمل خاص انجام بشه .
یعنی من این فرم رو با چند تا کامپوننت میتونم show می کنم ، حالا میخوام بعد از اینکه فرم نمایش داده شد و روی دکمه موجود در فرم کلیک شد ، تشخیص بدم که این فرم توسط کدوم کامپوننت صدا زده شده .
امیدوارم تونسته باشم منظورم رو برسونم
یک متغیر تعریف و انرا در هر قسمت مقدار قابل تشخیص بدهید
چطور می تونم یک متغیر عمومی در دلفی تعریف کنم ، به طوری که هکه فرمها اون رو بشناسن ؟
چرا لقمه رو می پیچونین؟
Private
برای شما است
Protected
برای شما و بچه های شما
Public
برای همه ! حتی همسایه ها
منظور از شما آبجکت ها !!!!
فرم مورد نظر رو از حالت Auto Create خارج کن (در منوی Project -> Options).
در قسمت Public تعریفات فرم یک متغیر اضافه کن، مثلا اینجوری:
type
TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
Value : Integer;
end;
سپس در Event مربوطه به دکمه مورد نظر بر اساس مقدار Value تصمیم بگیر که چه کاری رو انجام بدی:
procedure TForm2.Button1Click(Sender: TObject);
begin
case Value of
1: ShowMessage('Action 1');
2: ShowMessage('Action 2');
3: ShowMessage('Action 3');
else ShowMessage('Unknown Action ');
end;
end;
در فرم هایی که قراره این فرم رو برای انجام کار مورد نظر فراخوانی کنند یونیت این فرم رو Use کن، سپس اون فرم رو اینطوری فراخوانی کن:
procedure TForm1.Button1Click(Sender: TObject);
var Form2 : TForm2;
begin
Form2 := TForm2.Create(Form1);
Form2.Value := 1;
Form2.ShowModal;
end;
مثال ضمیمه را برای نمونه عملی ببین. من در این نمونه همه فراخوانی ها رو از یک فرم انجام دادم، اما این فراخوانی ها میتونه از فرمهای مختلف صورت بگیره.
موفق باشی.
آخرین ویرایش به وسیله مهدی کرامتی : جمعه 01 مهر 1384 در 12:02 عصر
ببخشید من الان دلفی نسب ندارم ولی فکر می کنم کد زیر کار کنه:
اول خاصیت owner مربوط به ساخت فرم ثانویه را نام کلید کلیک شده قرار بده
child:=TForm2.Create(button1);سپس می تونی تو فرمی که می خواهی اظهارش کنی(form2) خاصیت
Owner.Name;رو چک کنی که نام کدام کلید رادارد که با فرمان case می تونی به راحتی این کار را انجام بدی
نیازی به تعریف متغییر نیست.
خاصیت TAG که در همه کامپونتهای هست به این منظور طراحی شده.
میتونید از اون استفاده کنید.
موفق باشید.