PDA

View Full Version : فراخوانی یک متغیر از داخل رویداد یک کلاس



nasimnastaran
چهارشنبه 16 شهریور 1384, 19:01 عصر
سلام
درباره فراحوانی اشیا داخل یک رویداد از یک کلاس می باشد .
فراحوانی رویداد btnOK_Click . میخواهم متغیر های داخل این رویداد (Click)را از کلاس دیگر فراخوانی کنم .و آن را در کلاس دیگر در متغیر خاصی قرار دهم .
متغیر من در کلاس اول از رویداد()btnOK_ClickmyVar به نام myvar1 و متغیر من در رویداد کلاس 2 به نام myvar2 می باشد .
توجه : فراخوانی از یک رویداد منظور من است . ضمنا هر دو کلاس فرم می باشد .

با تشکر بسیار

amir_3530
چهارشنبه 16 شهریور 1384, 22:06 عصر
این را نمی دونم شرمنده

Babak-Aghili
چهارشنبه 16 شهریور 1384, 22:48 عصر
سرگیجه گرفتم !!

میشه یک کم فارسی اش را سلیس تر کنی تا بفهمم صورت سوال چیه ؟

nasimnastaran
پنج شنبه 17 شهریور 1384, 10:55 صبح
جناب آقای بابک !
سلام و خسته نباشید و ممنون از حوصله شما .
ببین . من دو تا فرم دارم و در فرم اول و در رویداد کلیک یک دکمه که اسم این دکمه هم btnOK است . رویداد
() btn_Click را نوشتم و در داخل این رویداد مقداری را به یک متغیر که از نوع int و عمومی هم هست دادم (بنا به ضرورتی که در برنامه داشتم ) . خواستم این مقدار را در رویداد فرم دوم ( رویداد فرم لود) به متغیر دیگر نسبت دهم .این متغیر هم در فرم دوم از نوع int است و شما اسم این متغیر را getmyInt قرار بده .چگونه این کار را انجام دهم ؟
--------------------------------------------------------
رویداد btnOK_Click فرم اول
private void btnOK_Click(object sender, System.EventArgs e) //------ Start
}
............
int myint=5
..........
{
---------------------------------------
رویداد فرم لود در فرم دوم
private void frmPublic_Load(object sender, System.EventArgs e) // -----Start
}
..........
int getmyint;//--- definition a variable in form2
.......
{
--------------------
ضمنا من از طریق ساخت یک شی از کلاس اول ، نتوانستم مقدار متغیر فرم اول را در مقدار متغیر فرم دوم قرار دهم
لطفا راهنمائی کنید
با تشکر !
-----------------------------------------------------------------------------

titbasoft
پنج شنبه 17 شهریور 1384, 11:58 صبح
از مودیفایر static برای تعریف متغیرتون در فرم اول به همراه scope مناسب (مثلا public) استفاده کنید. مثلا:

public static int x

***UNIQUE***
پنج شنبه 17 شهریور 1384, 12:06 عصر
شما میتونی متغیرت رو از نوع Static بگیری و تو هر فرمی خواستی ازش استفاده کن

یا

اگه میخوای فقط تو یه فرم استفاده کنی موقع LoadForm2 از داخل فرم1



Form2 frm = new Form2(myInt);
frm.Show();


و در فرم 2 به این صورت عمل کن و Number که حالا شامل مقدار myInt از فرم 1 است رو در فرم2 استفاده کن



int Number;

public Form2(int x)
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

this.Number = x;
//
// TODO: Add any constructor code after InitializeComponent call
//
}


امیدوارم منظورتون رو درست متوجه شده باشم

Babak-Aghili
پنج شنبه 17 شهریور 1384, 14:33 عصر
بستگی داره ...
اگر در طول اجرای برنامه ، فقط یک بار لازم میشه که اون متغیر مقدار دهی بشود که خب با تعریف static سازگار است ... اینکه خود متغیر را پابلیک بگیرند خوبیت نداره ... پرایوت میگیریم و یک پراپرتی read only با دسترسی پابلیک براش تعریف میکنیم ... اینژولی :



private static int yehChizi;

public static int YehChizi
{
get { return yehChizi; }
}


خف ... حالا توی فلم 2 ... اینژولی هر جا که لاژم بود بهش دسترسی داریم :


int someThing = Form1.YehChizi;
=================================

ولی اگر که هی قرار است مقادیر مختلفی به آن در زمان اجرا داده شود با خوردن یک لیوان چای ! این راه حل به ذهن آکبندم رسیده ...
ایده کلی این است که اشاره گر به فرم 1 را در فرم 2 ذخیره کنیم و نهایتا به این صورت میشود :

1-همان کد بلوک بالا را مینویسیم ولی این بار به کلمه static دیگه احتیاج نداریم.
2- توی همان دکمه که میگین قرار است زور داده شود .. پس از اینکه مقدار مورد نظر را به متغیر yehChizi دادید .. این دستور را هم اضافه میکنیم :
Form2.ToForm1 = this;
3- حالا این کد را برای کلاس ملبوط به فلم 2 تعریف میکنیم :



private static Form1 toForm1;
public static Form1 ToForm1
{
get
{ return toForm1; }
set
{ toForm1 = value;}
}



4- حالا دیگه میتونیم در Form_Load و یا هرجای دیگر به این صورت به اون مقدار دسترسی داشته باشیم :



private void Form2_Load(object sender, System.EventArgs e)
{
Form1 f1= ToForm1;
int x= f1.GetYehChizi;
}


نتیجه گیری : سلام بر دلفی :چشمک:

titbasoft
پنج شنبه 17 شهریور 1384, 14:56 عصر
یک پراپرتی read only با دسترسی پابلیک براش تعریف میکنیمبه این می گن یک راه حل حرفه ای!

nasimnastaran
پنج شنبه 17 شهریور 1384, 18:01 عصر
خواهش می کنیم ، یک جواب درست حسابی دهید !
اولا با تعریف یک متغیر از نوع public static int myint ( در فرم اول )به هیچ عنوان این متغیر قابل دسترسی در کلاس فرم دوم form2.cs نیست ( باز با تعریف public int myint قابل دسترسی است که مورد اول که هیچ ).
قابل ذکر است که مقدار متغیر در فرم اول و در رویداد() btnOK_Click ممکن است دائم تغییر کند .
آیا روش ساده و آزمایش شده سراغ ندارید ؟؟

Babak-Aghili
پنج شنبه 17 شهریور 1384, 18:11 عصر
قابل ذکر است که مقدار متغیر در فرم اول و در رویداد() btnOK_Click ممکن است دائم تغییر کند .
آیا روش ساده و آزمایش شده سراغ ندارید ؟؟

خب روش دوم .. همونیه که میخوای دیگه ! حالا اگه حال و حوصله ی خوندن و نوشتنش را نداری. اون یک بحث دیگه س
ساده است ... !!
آزمایش شده هم هست ! خب اول آزمایش کردم .. بعد نوشتم اینجا دیگه !

Babak-Aghili
پنج شنبه 17 شهریور 1384, 18:26 عصر
اینجوری نوشتم .. کار کرد ! :لبخندساده

nasimnastaran
پنج شنبه 17 شهریور 1384, 20:12 عصر
جناب آقای عقیلی ، ضمن تشکر از زحمت جنابعالی ، من اصل فایل را برای شما در ایمیلتان فرستادم .
در صورت امکان نگاهی به آن بنمایئد !
با سپاس
ارادتمند : سید مصطفی حسینی

titbasoft
پنج شنبه 17 شهریور 1384, 20:24 عصر
خواهش می کنیم ، یک جواب درست حسابی دهید !
اولا با تعریف یک متغیر از نوع public static int myint ( در فرم اول )به هیچ عنوان این متغیر قابل دسترسی در کلاس فرم دوم form2.cs نیست ( باز با تعریف public int myint قابل دسترسی است که مورد اول که هیچ ).
امیدوارم با استفاده از یک instance از فرم اول برای دسترسی به اون اقدام نکرده باشید. درسته که من ذکر نکرده بودم ولی خودتون هم یک تلاشی بکنید بد نیست! اگر حداقل مطالب جناب عقیلی رو می خوندید این موضوع رو متوجه می شدید:

int someThing = Form1.YehChizi;

در ضمن
مثال اشتباه:

Form1 f=new Form1();
int a=f.myint;
مثال صحیح:

int a = Form1.myint;

Babak-Aghili
پنج شنبه 17 شهریور 1384, 21:18 عصر
1- این آرم مخصوص حاکم بزرگ ، " می تی کومون" است ! زانو بزنید !! ... به آواتار آقای هاشم آل طاها یک التفاتی داشته باشید تا متوجه شوید که نماینده ی حاکم بزرگ هم به سوالات شما پاسخ داده است ولی کوو گوش شنوا ؟!

2- تا این لحظه که چیزی در ایمیل من نبود ...

3- خب به جای اینکه فایلتان را به من که هنوز در سی شارپ بصورت چار دست و پا راه میروم بفرستید .. همین جا آپلود کنید که سایر کاربران هم دسترسی داشته باشند و مشکل حل شود ( اگرچه قاعدتا تا حالا می بایستی حل شده باشه )

4- یعنی مثالی که در پست شماره 11 ارسال کردم هم مشکل را حل نکرد ؟

nasimnastaran
پنج شنبه 17 شهریور 1384, 22:32 عصر
جناب آقای عقیلی !
ضمن تشکر و خسته نباشید ، من اصل فایل را اینجا آوردم.
البته هنوز قسمت هائی از برنامه تکمیل نشده با این حال نام جدول telephone_Note و User_Name است( از اس کیو ال ) .
در اینجا می خواستم بعد از اینکه آی دی کاربر مورد تائید قرار گرفت . این مقدار را گرفته و صرفا اطلاعات شخصی خود کاربر را نشان دهد .
حال خود برنامه را نگاه کنید و اشکال من این که می خواستم عدد گرفته شده (آی دی کاربر ) را در رشته جستجوی اس کیو ال قرار دهم ،‌مشخص می شود .
با تشکر