سلام .
احتمالا سئوالم تكراريه.
مي خواستم بدونم كه چطور مي شه مثلا يك متغير ازنوع string يا يك آرايه يا هر چيز ديگه يي در يك فرم مقدار بگيره و در يك فرم ديگه بشه مقدارش رو گرفت و بررسي كرد يا حتي تغييرش داد.#c
ممنون
Printable View
سلام .
احتمالا سئوالم تكراريه.
مي خواستم بدونم كه چطور مي شه مثلا يك متغير ازنوع string يا يك آرايه يا هر چيز ديگه يي در يك فرم مقدار بگيره و در يك فرم ديگه بشه مقدارش رو گرفت و بررسي كرد يا حتي تغييرش داد.#c
ممنون
سلام.
سوالتون تکراریه خوب اگه میدونید لطفاً جستجو کنید.واسه خودتون نمیگم.واسه خودم میگم!!از بس سوالای تکراری جواب دادم!!
داخل فرم 1 متغیر رو به صورت زیر تعریف کنید:
بالای فرم 1 یک متغیر از نوع فرم دوم تعریف کنید:کد:public string A;
بالای فرم دوم یک متغیر از نوع فرم اول تعریف کنید:کد:public frm2 FRM2M = new frm2();
حالا تو فرم لود فرم 1 بتایپ:کد:public Form1 FRM1 = new Form1();
حالا اگه میخوای از متغیر فرم اول تو فرم دوم استفاده کنی کد زیر رو تو فرم دوم بتایپ:کد:FRM2M.FRM1 = this;
موفق باشید.کد:FRM1.A = "AAA";
ممنون.يك بار جستجو كردم ديدم چيزاي بي ربط اومد ديگه نگشتم.
ضمنا راه ديگه يي نداره؟ من شنيده بودم كه بايد يك كلاس ساخت و با استفاده از اون متغير رو جا به جا كرد
جستجوی سایتو بی خیال ... از عمو گوگل استفاده کن .
به این صورت :کد:عبارت مورد نظر site:www.forum.p30world.com
ممنون.پيدا كردم.
ولي جواب سئوال دومم رو نگرفتم.اگه ما 5 تا فرم داشتيم و چند تا متغير جا به جا مي شد يعني بايد همه رو تو هم ديگه new كنيم؟ يه كم يه جوراييه
روشتون کاملا اشتباهه.با این روش شدیدا برخورد میشه چون اصول شی گرایی (در اینجا کپسوله سازی) رو زیرپا میگذاره.نقل قول:
تا اونجا که ممکن هست باید از public کردن یک متغیر خودداری کرد.
یک راه اینه که می تونید از property ها استفاده کنید .....
و یک راه دیگه هم استفاده از یک کلاس static هست.....
همون طور که گفتم شما می تونی از یک کلاس static استفاده کنی.به این صورت:نقل قول:
ولي جواب سئوال دومم رو نگرفتم.اگه ما 5 تا فرم داشتيم و چند تا متغير جا به جا مي شد يعني بايد همه رو تو هم ديگه new كنيم؟ يه كم يه جوراييه
برای این منظور از Configuration هم می تونید استفاده کنید.(Settings)کد:static class MyClass
{
private static string s;
public static string Str
{
get { return MyClass.s; }
set { MyClass.s = value; }
}
}
//Form1 Codes
private void button1_Click(object sender, EventArgs e)
{
MyClass.Str = "sajjad";
new Form2().Show();
}
//Form2 Codes
private void Form2_Load(object sender, EventArgs e)
{
this.Text = MyClass.Str;
}
ممنونم دوست من...نقل قول:
من چون عجله داشتم و حصوله نوشتن فضای نام کلاس رو نداشتم!! فکر کردم شما میدونید....!!!
منظورم از فضای نام NameSpace یک کلاس جداگانه بود که در اینصورت اگه Public نشه از متغیر و کلاس نمیتونین استفاده کنین.
خوب شما اگه دوتا پروژه جداگانه داشته باشین آیا میتونین به این روشی که گفتین عمل کنین؟
static هم در همه موارد استفاده نمیشه.باید جواب سوال عمومی باشه.این تایپی که شما فرمودین فقط در یک پروژه و یک فرم استفاده میشه.
راستی روش درسته فقط عمومیه یعنی همه جا میتونی استفاده کنی.
خوب بی خیال شما اگه بخوای داخل فرم دوم از متغیر فرم 1 استفاده کنی بازم Static میکنی؟همیشه کپسول نیست بعضی وقتها پیکنیک هم هست!
در هر صورت ممنونم.
سلامنقل قول:
برای پاس دادن یک پارامتر از یک فرم به فرم دیگه شما باید ابتدا constructor فرم دوم را طوری تغییر بدید که مقدار بگیره .
تغییراتی که در فرم 2 باید داده شود .
کد زیر برای فرم 1 تا یک پارامتر را پاس دهدکد:private string test = "";
public Form2(string Ptest)
{
InitializeComponent();
test = Ptest;
}
موفق باشی :)کد:form2 frm=new form2("عبارتی که می خواهید پاس شود");
frm.showdialog();
ببخشید.ولی باید بگم.نمی دونم شما انتقادپذیر هستید یا نه.ولی قصد جسارت ندارم و فقط به اندازه ای که می تونم به ارتقاء سطح علمی کمک کنم فکر می کنم.
خوب دلیل نمیشه که روش غلط رو آموزش بدیدنقل قول:
من چون عجله داشتم و حصوله نوشتن فضای نام کلاس رو نداشتم!! فکر کردم شما میدونید....!!!
اگه توجه کنید من یه روش دیگه هم تحت عنوان استفاده از Property ها ارائه کردم.نقل قول:
خوب شما اگه دوتا پروژه جداگانه داشته باشین آیا میتونین به این روشی که گفتین عمل کنین؟
static هم در همه موارد استفاده نمیشه.باید جواب سوال عمومی باشه.این تایپی که شما فرمودین فقط در یک پروژه و یک فرم استفاده میشه.
راستی روش درسته فقط عمومیه یعنی همه جا میتونی استفاده کنی.
خوب بی خیال شما اگه بخوای داخل فرم دوم از متغیر فرم 1 استفاده کنی بازم Static میکنی؟همیشه کپسول نیست بعضی وقتها پیکنیک هم هست!
در این روش تلفیقی از کدی که جناب mahdi7610 ارائه کردن و Property استفاده میشه.من نگفتم همه جا از static استفاده کنید.گفتم این هم یه روشه.
در خط پایین کدی که گذاشتم هم گفتم می تونید از Configuration یا AppSettings استفاده کنید که این هم فقط یه روشه.
اما در مورد اصل کپسوله و اصل پیکنیک: < D: >
نگاه کنید دوست عزیز.کدنویسی پیشرفته نیاز به دانستن چیزهای زیادی داره.استانداردهایی برای اون ارائه شده که encapsulation و information hiding هم از اون مستثنی نیستن و از اصول اساسی به حساب میان.نمیگم من کدنویسی پیشرفته بلدم ولی حداقل این چیزها رو رعایت میکنم...
امیدوارم شما و بقیه دوستان هم همینطوری یا حداقل بهتر از من باشید....
موفق باشید...
سلام
همون طور که سجاد جان گفتند یک روش پاس دادن اطلاعات استفاده از property ها هستش . که در واقع کار اصلی property پاس دادن پارامترها بین فرم ها هستش .
در واقع اگه تعداد پارمترها بیشتر باشه بهترین راه استفاده از property ها هستش .
هنگام استفاده از property دیگه نیازی نیست constructor فرم 2 را تغییر بدیم . بلکه یک پراپرتی تعریف می کنیم که باعث می شه پارامترهایی از کلاس فرم 1 را دریافت کنه .
درسته یک برنامه را هر طوری که بخواهیم میتونیم بنویسیم اما در برنامه نویسی شی گرا باید اصول شی گرایی کاملا رعایت بشه .
موفق باشید :)
سلام.
از داداش مهدی و داداش سجاد وقعاً ممنونم یه چیزی به معلوماتم اضافه شد.:10::10::33:امیدوارم که دیگه از این اشتباهات نکنم. البته میدونستم پروپرتی چی بود ولی نمیدونم چرا استفاده نکردم شاید عجله کردم یا یادم رفت.:31:.
راستی انتقاد پذیر یعنی چی؟(ببخشید من زبان فارسیم ضعیفه(شاید یادم رفته(شایدم...))).
برای همه دوستان آررزوی موفقیت میکنم.این کنکور پاک مخمو دیوونه کرده.
علی جان همه ما اینجا هستیم تا داشته هامون را بزاریم و به نداشته ها برسیم .نقل قول:
کلا فلسفه این نوع فروم ها اینه که بتونیم اشکالات همدیگه را برطرف کنیم .
ادم انتقاد پذیر ادمی هستش که همیشه با نقد شدن یک قدم در راه پیشرفت خودش برداشته .نقل قول:
راستی انتقاد پذیر یعنی چی؟
موفق باشی :)
من هم خوشحال شدم که در اضافه شدن معلومات شما نقش داشتم.نقل قول:
از داداش مهدی و داداش سجاد وقعاً ممنونم یه چیزی به معلوماتم اضافه شد. [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] امیدوارم که دیگه از این اشتباهات نکنم. البته میدونستم پروپرتی چی بود ولی نمیدونم چرا استفاده نکردم شاید عجله کردم یا یادم رفت. [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته من نباید این پست رو بدم.در حقیقت یه off-topic هستش.ولی حالا که زدم اینو بگم که به مطالعه دقیق کتابهای انگلیسی بپردازید و به فرومهای فارسی هم اکتفا نکنید....
موفق باشید....
بهترین راهش اینه که متغیرهایی رو که میخوای share کنی به صورت استاتیک تو یه کلاس جداگانه مثلاً Common بگذاری و از هر فرمی با نوشتن Common.strName به متغیرهات دسترسی پیدا کنی (در اینجا متغیر strName) ، امیدوارم متوجه شده باشی.
با اجازه اساتید یه راه هم من بگم! البته استاتیک اصلشه ولی میتونی مقدارشو توی یه فایل یا رجیستری سیو کنی و تو هر فرمی قبل از باز شدن مقدارو فرا بخونی .
یا علی!