PDA

View Full Version : بستن یک فرم بوسیله فرم دیگر



abolfazlab
جمعه 02 فروردین 1387, 08:02 صبح
باسلام
ماسه فرم داریم (فرم 1.2.3)که درفرم یک باتن داریم که با کلیک کردن برروی آنها به فرم جدیدبازمی شود
س1)سه فرم موردنظرمان بازاست حال می خواهیم وقتی روی باتن خروج فرم 3کلیک کردیم فرم2 بسته شوداما فرم 1ما(فرم اصلی )همچنان بازباشد
س2)درفرم 2یک تکست باکس داریم که هرگاه اطلاعات موردنظرمان (نام خانوادگی)رادرآن واردکردیم بعدازکلیک برروی دکمه جستجو عملیات جستجورابرای ماانجام بدهدودردیتاگریدفرم3 اطلاعات بدست آمده رانمایش بدهد

hdv212
جمعه 02 فروردین 1387, 12:26 عصر
این نمونه برنامه رو برات گذاشتم، فقط Modifier هاشو دقت کن که در فرم 1، و فرم 2 که دارای TextBox و DataGridView هستن چی گذاشتم، همینطور متغیر هایی که تعریف کردم.

Mahdi.Kiani
جمعه 02 فروردین 1387, 14:51 عصر
این نمونه برنامه رو برات گذاشتم، فقط Modifier هاشو دقت کن که در فرم 1، و فرم 2 که دارای TextBox و DataGridView هستن چی گذاشتم، همینطور متغیر هایی که تعریف کردم.

این جور کد نویسی صحیحه؟
خوب چرا به جای استفاده از چندین کلاس مجزا، چرا کل پروژه را یک کلاس نمی کنید؟!!!!!!!!!!!
این جوری نیاز به public کردن هر چی که دم دستتون میرسه نیست....
به همه چیز دسترسی دارید. هر کاری که عشقتون برسه انجام می دین. و حسابی خوش بحالتون میشه ......
لطفا در این باره بیشتر تحقیق کنید.

چند تا سوال: ممنون میشم براشون جواب پیدا کنید.
1) فلسفه اینکه اصلا از چند تا کلاس، چند تا فرم، interface، Delegate ، event و .... در یک پروژه استفاده میشه چیه؟
2) واقعا چه اشکالی داره، اگه ما کا پروژه را یک کلاس در نظر بگیریم؟ یک فرم.
3) فلسفه این modifier که خودتون هم ازش صحبت کردین چیه؟
4) چرا پیش فرض هر چیزی که در دات نت می نویسین، private هست، نه public ؟
و ....
سال پر باری داشته باشید.

tritilium
جمعه 02 فروردین 1387, 17:05 عصر
آقای کیانی عزیز ! من به شما پیشنهاد می کنم برین مفاهیم شیئ گرایی و برنامه نویسی ساخت یافته رو دو باره مرور کنین .
مسلما کل حم و غم (درست نوشتم ؟؟) برنامه نویس ها شکستن برنامه به قطعات کوچکتر برای اشکال یابی راحت تر و استفاده ی مجدد از کد های از قبل نوشته شده است . جواب سوال هاتونو به طور کامل اونجا می تونین پیدا کنین .
(من هنوز تازه کارم اگه اشتباه می کنم اساتید اصلاح کنن )

Mahdi.Kiani
جمعه 02 فروردین 1387, 19:21 عصر
آقای کیانی عزیز ! من به شما پیشنهاد می کنم برین مفاهیم شیئ گرایی و برنامه نویسی ساخت یافته رو دو باره مرور کنین .
مسلما کل حم و غم (درست نوشتم ؟؟) برنامه نویس ها شکستن برنامه به قطعات کوچکتر برای اشکال یابی راحت تر و استفاده ی مجدد از کد های از قبل نوشته شده است . جواب سوال هاتونو به طور کامل اونجا می تونین پیدا کنین .
(من هنوز تازه کارم اگه اشتباه می کنم اساتید اصلاح کنن )

http://barnamenevis.org/forum/showpost.php?p=446809&postcount=11

http://barnamenevis.org/forum/showthread.php?p=449646#post449646

choobin84
شنبه 03 فروردین 1387, 00:10 صبح
آقای کیانی عزیز ! ......
مسلما کل حم و غم (درست نوشتم ؟؟)
نخیر ، درست ننوشتی:

همّ و غم.

نکته دوم:
دوست من، بنده از اظهار نظر شما و از اینکه در این سایت با سایر برنامه نویسان اقدام به یادگیری و آموزش به صورت همگام پرداخته اید، بسیار سپاسگزارم.

تشکر از دوستانی که مخلصانه و صمیمانه و دلسوزانه علم خود را به صورت کاملا سخاوتمندانه در اختیار دیگران می گذارند نه تنها جایز، که واجب نیز هست.
از زحمات شما برای یادگیری و زحمات آقای کیانی و hdv212 و تمام کاربران عزیز این سایت برای آموزش و تعلیم سپاسگزاری می کنم.

سئوال های آقای کیانی نه از این جهت که به موضوع اشراف ندارند مطرح شده است ، که از روی این است که توجه ما و سایر کاربران ،به موضوعات مهمی که در پست اول و دوم مطرح شده جلب شود.

کلاس بندی کردن برنامه ها و کوچک کردن برنامه ها یکی از موضوعات مهمی هست که در تمام پروژه ها باید مد نظر قرار گیرد ، اما چیزی که در این تایپیک مطرح شده این نیست.(قریب به یقین صورت سئوال رو کاملا متوجه نشده اید)

private یا public ؟؟؟ ... مسئله اینست.

نه بذارید بهتر سئوال را بپرسم: چرا آقای کیانی مرتبا اصرار می کنن که نباید به هر خصوصیتی از یک شی از فرم دیگر و یا کلاس دیگر احتیاج داریم، آنرا public تعریف کنیم.

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

شاید ، تعریف کردن یک property به صورت public ، برای انجام کار مورد نظر بسیار مناسب باشه ، اما آقای کیانی هنوز نتوانسته اند که به من و خیلی از کاربران این سایت بقبولانند که تعریف public یک شی (برای دسترسی به یک خصوصیت آن شی) برخلاف شی گرایی است.(هر چند پذیرفته ام پاس دادن یک داده بین فرم ها بسیار بهتر است)

مثلا این حرصو می خورن که :

درست است که با روش public کردن شی هم میشه به مقدار passedParameter دسترسی داشت اما در این روش اصل Encapsulation که یکی از اصول مهم شی گرایی است زیر سوال میره و استفاده از این نوع حرکات در زبانی مثل سی شارپ که به قول بعضیا نطفش را با OOP بستن کار درستی نیست
آقای کیانی عزیز، چرا وقتی می خواهیم به کلاس فرم دوم دسترسی پیدا کنیم ناچاریم اونو public تعریف کنیم؟
اگر چیزی که شما می گویید برخلاف شی گرایی باشد ، پس کلاس تعریف فرم دوم و سوم هم باید private باشد و تعریف به این شکل با توجه به دید شما ، برخلاف شی گرایی است.

در فرم دوم داریم:

public partial class Form2 : Formو در فرم اول اینگونه می نویسیم:

Form2 f=new Form2();
f.Show()

برین مفاهیم شیئ گرایی و برنامه نویسی ساخت یافته رو دو باره مرور کنین

ممنون از راهنمایی و توصیه بجاتون.

Mahdi.Kiani
شنبه 03 فروردین 1387, 11:07 صبح
اول سلما
دوم سال نو مبارک
سوم : ممنون از لطفت نسبت به من


:
آقای کیانی عزیز، چرا وقتی می خواهیم به کلاس فرم دوم دسترسی پیدا کنیم ناچاریم اونو public تعریف کنیم؟
اگر چیزی که شما می گویید برخلاف شی گرایی باشد ، پس کلاس تعریف فرم دوم و سوم هم باید private باشد و تعریف به این شکل با توجه به دید شما ، برخلاف شی گرایی است.

در فرم دوم داریم:

public partial class Form2 : Formو در فرم اول اینگونه می نویسیم:

Form2 f=new Form2();
f.Show()


.

یه سری توضیحات کلی میدم و جواب سوال شما هم آخر توضیحات هست..

حالا اجازه بدین که یکمی درباره این قضایا صحبت کنم. اینکه چرا و کجا باید فیلد ها را public کرد. کجا باید آن ها را به صورت Public static در نظر گرفت.و خیلی از مسائل دیگه که یک مشکل بزرگ برای برخی از برنامه نویسیان است.
سعی می کنم که خیلی ساده و روان و بیشتر به صورت عامیانه مطرح کنم.
نکته اول: اینکه من هیچ وقت نگفتم که مثلا public static کردن یک فیلد در کلاس بر خلاف oop و مسائل مربوط به آن است. اگر هم در جایی این مسئله را عنوان کردم بسته به اون مورد خاص بوده. پس قبل از هر چیز باید باز متذکر شوم که تعریفی مانند public static برای فیلدی در کلاس هیچ

ایرادی نخواهد داشت. اما، اما مسئله این جاست که کجا و برای چه فیلد هایی باید این کار را کرد و برای چه فیلد هایی نباید این کار را کرد و آن ها را باید private تعریف کرد و در صورت نیاز کپسوله کرد اون ها را...


من با یک مثال عامیانه دو اصل مهم OOP را ابتدا توضیح می دم. اولی مخفی سازی اطلاعات یا Information Hiding است.
مخفی سازی اطلاعات به صورت خلاصه یعنی اینکه نحوه پیاده سازی داخلی یک آیجکت از عملکرد آن جدا باشه. حالا این یعنی چی؟
فرض کنید که پدر آقای choobin به آقای choobin می گه هر روز عصر باید 10 تا نون از نانوایی اسدالله بوفوم ، بگیری بیای خونه.... اما، پدر آقای choobin بهش نمیگه که وقتی خواستی بری مغازه اسدلله از فقط باید از کوچه ید الله بری....
این آقای choobin هستند که تشخیص میدن امروز از کوچه ید الله برن و فردا از کوچه سیف الله (دلیلش هم کاملا به خودش مربوطه )...
در واقع پدر آقای choobin هر روز عصر 10 تا نون از نوع نان های آقای بوفوم از آقای choobin می خواد. حالا اینکه آقای choobin چطوری این 10 تا نون را تهیه می کنه، اصلا برای پدرشون مهم نیست..
در واقع همان ضرب المثل تو بدم، بمیرو بدم.. پیش می آید.

و اما اصل دوم برنامه نویسی شی گرا، یعنی Encapsulation یا کپسوله سازی...
کپسوله سازی در مهندسی نرم افزار به معناهای متفاوتی به کار میره... مثلا در بعضی جا ها ، تولید یک component جدید و بسته بندی کردن آن را کپسوله سازی می نامند.
اما منظور ما در اینجا از کپسوله سازی، میشه گفت که مهر و موم کردن یک فیلد (آبجکت یا ...) می باشد به صورتی که آبجکت های دیگه اثرات جانبی یا همون side effect بر روی اون فیلد ما نداشته باشه..
به عنوان مثال:
فرض کنید سیف الله، پسر 12 ساله ای به نام ید الله داره... این آقا یدالله (قهرمان قصه ما ) دوستی به نام حمد الله داره.. یه روز حمد الله میاد در خونه یدالله که یک CD به اون بده....
حالا به دو سناریوی زیر توجه کنید:
سناریوی اول اینکه حمد الله مستقیما با ید الله در تماس باشه (Public کردن یک فیلد در کلاس )، فرض کنید که حمدالله یک فیلم +18 برای ید الله آورده.. اون وقت چی میشه؟ اگه حمد الله به راحتی بتونه که فیلم را به دست ید الله برسونه ، اون بیچاره را هم از راه به در می کنه (side effect )
حالا سناریوی دوم : سناریوی دوم اینه که حمدالله با واسطه پدرش یعنی سیف الله خان با دوستش یعنی ید الله در ارتباط باشه، خوب در این صورت 2 حالت پیش میاد:
یا اینکه حمد الله از آوردن CD منصرف میشه
و یا اینکه اون قدر کله شقه که میاد و CD را میده به پدر یداله ، یعنی سیف الله خان.
حالا آقا سیف الله می تونه قبل از اینکه CD را بده به پسرش یعنی ید الله ، ابتدا محتویات CD را چک کنه.. اگر محتویات CD مربوط به -12 میشد، (ید الله 12 سالشه) اونو میده به ید الله ولی اگه محتویات CD +18 بود ( اونو یا دور میندازه و یا خودش استفاده می کنه looooooool )... در واقع چیزی که مهم است این نیست که CD را آقا سیف الله میندازه دور یا خودش استفاده می کنه، بلکه نکته مهم اینه که هیچ خطری، پسر آقا سیف الله، یعنی ید الله کوچولو را تحدید نکرده ( جلوگیری از اثرات جانبی)
--
با این قصه هزار و یک شبی که تعریف کردم، فکر کنم باید متوجه شده باشین که کجا باید فیلد هاتون را به صورت public تعریف کنید و کجا اون را به صورت private تعریف کنید و سپس اون را کپسوله کنید ( به صورت property کردن)
حالا یک مثال عملی تر و programming تر :
فرض کنید کلاسی به نام person تعریف کردین و متغیری را به عنوان نام شخص در نظر گرفتین..

دو کد زیر را در نظر بگیرید.





class Person
{
public Person()
{

}


public int Age;

}



نحوه استفاده از کلاس فوق




Person newPerson = new Person();
newPerson.Age = -12;
MessageBox.Show("The Person Age= "+newPerson.Age);

// run without any problem



حالا کد زیر را دقت کنید:




private int age;

public int Age
{
get
{
return age;
}
set
{
if (value <= 18)
throw new Exception("ید الله از این فیلم ها نگا نمیکنه !!!");
age = value;
}
}




همانطور که میبنید، روی فیلد Age قواعد جامعیتی تعریف کردیم ..
حالا اگه کد زیر را بنویسید





Person newPerson = new Person();
try
{
newPerson.Age = -12;
MessageBox.Show("The Person Age= " + newPerson.Age);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}




برنامه اجرا نخواهد شد و خطا خواهد داد (البته خطای runtime منظورم است)

در واقع property ها چیزی غیر از دو متد نیستند. یعنی کد دوم معادل با کد زیر است






class Person
{
public Person()
{

}


private int age;

public void Set(int _age)
{
if(_age <=18)
throw new Exception("ید الله از این فیلم ها نگا نمیکنه
!!!");
this.age = _age;


}

public int Get()
{
return this.age;
}
}





باز هم اگر کد زیر را بنویسید





try
{
newPerson.Set(-12);
MessageBox.Show("The Person Age= " + newPerson.Age);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}




همان خطا را در زمان اجرا دریافت خواهد کرد و اینجوری فیلد Age را از خطرات جانبی مصون نگه خواهد داشت.


حالا بریم سر این سوال که آقای choobin پرسیدند که چرا فرم ها به صورت public تعریف می شوند...
ببین عزیز دلم، زمانی که ما بخواهیم به آبجکتی ، توسط آبجکت های دیگه دسترسی داشته باشیم، باید خاصیت modifier اونو public بگیریم. این جور نیست که همه کلاس ها public هستند و یا همه متد ها باید public بشند..
خیلی از متد ها private تعریف میشن... نمونش event هایی که درون یک کلاس می نویسین.. مثلا رویداد کلیک، خودش نوعی متد است. میبینید که private است. چرا؟ چون این متد نباید خارج از کلاس خودش فراخوانی بشه..

اما فرم ها، و یا بعضی از کلاس ها، اعمالی را برای برنامه ما انجام میدهند. مثلا من به آقای کرامتی می گم، که هر موقع من یک عدد به شما دادم، شما سینوس اون عدد را به من بر گردان.... آقای کرامتی به من میگه که من یه متد به نام Sin در اختیارت می ذارم.. تو عددت را به من بده من این کار را برات می کنم... حالا ممکنه که آقای کرامتی درون خودش 270 تا متد دیگه که private هستند را فراخوانی کنه تا سینوس عدد من را بگیره و بهم بده... و یا اینکه از هیچ متد اضافی استفاده نکنه و ذهنی حاصل را حساب کنه و به من بده ....
خوب حالا اگه خاصیت modifier آقای کرامتی به صورت public نباشه که اصلا من به ایسون دسترسی ندارم که بخوام ازش برای سینوس حساب کنه....

پ و :
میبین choobin خان، ساعتت 11:30 هنوز صبحانه نخوردم .. اینا هم که با این کش کشون کردن ساعت همه چیز را به .. دادند

sinpin
شنبه 03 فروردین 1387, 11:42 صبح
در ادامه ی فرمایشات دوست خوبمون
در آدرس زیر نیز تصویری هست (از فصل encapsulation از کتاب Head First C# (http://safari.peachpit.com/9780596514822)) که شاید به تنهایی گویا باشد.
http://en.csharp-online.net/Encapsulation

hdv212
شنبه 03 فروردین 1387, 12:15 عصر
این جور کد نویسی صحیحه؟
شما به بزرگی خودت ما رو ببخش، اگه صحیح نبود، Modifier ها رو در اختیار برنامه نویسان قرار نمیداد، به علاوه، برای روشن شدن مطلب، من نخواستم کد نویسی رو پیچیده کنم تا اون دوستی که سوال رو در خواست کرده بودن، زودتر به مطلب برسن، شما میتونی به جای عوض کردن Modifier ها به Public، یه Public Property بسازی که مقدار فیلد Private رو برگردونه، این روش کاملا درست و متطقیه و به کرات ازش استفاده میکنن.


خوب چرا به جای استفاده از چندین کلاس مجزا، چرا کل پروژه را یک کلاس نمی کنید؟!!!!!!!!!!!
شما چطور میتونی کلاس فرم 2 رو با کلاس فرم 1 که هر کدوم خصوصیات و توابع مختص خودشون هستن رو در یک کلاس واحد قرار بدی، مگر اینکه بخوای کلاس فرم 2 رو به جای ارث بری از کلاس Form، از Form1 ارث بری کنی و بعد ببینی چه اتفاقی میفته، خواهش میکنم یه مقدار فکر کنید.

بقیه ی موارد رو هم که دوستان گفتن، قصد این تاپیک چیزی بود که دوستمون در پست اول پرسیدن.

Mahdi.Kiani
شنبه 03 فروردین 1387, 13:26 عصر
اگه صحیح نبود، Modifier ها رو در اختیار برنامه نویسان قرار نمیداد،



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



به علاوه، برای روشن شدن مطلب، من نخواستم کد نویسی رو پیچیده کنم تا اون دوستی که سوال رو در خواست کرده بودن، زودتر به مطلب برسن



فکر کنم ئر این باره قبلا بحث شده، به جای اینکه یه ماهی نه چندان خوب بگیری بدی دست دوست سوال کننده، بهتره ماهیگیری یادش بدی.....
با این کاری که شما به ایشون گفتین، این موضوع در ذهن دوستمون واسه یک عمر نقش می بنده که هر جا خواست به چیزی دسترسی پیدا کنه و نتوانست، بره و اونو فورا public کنه .. و این یعنی مرگ یک برنامه نویس ( از نظر من)




شما میتونی به جای عوض کردن Modifier ها به Public، یه Public Property بسازی که مقدار فیلد Private رو برگردونه، این روش کاملا درست و متطقیه و به کرات ازش استفاده میکنن



در این مورد، در پست قبلیم و در قسمت توضیحات مربوط به encapsulation کاملا توضیح دادم .. اونا با دقت بیشتری بخونین





شما چطور میتونی کلاس فرم 2 رو با کلاس فرم 1 که هر کدوم خصوصیات و توابع مختص خودشون هستن رو در یک کلاس واحد قرار بدی، مگر اینکه بخوای کلاس فرم 2 رو به جای ارث بری از کلاس Form، از Form1 ارث بری کنی و بعد ببینی چه اتفاقی میفته، خواهش میکنم یه مقدار فکر کنید



جواب این، در نقل قول پایینی است که آقای choobin فرمودند




سئوال های آقای کیانی نه از این جهت که به موضوع اشراف ندارند مطرح شده است ، که از روی این است که توجه ما و سایر کاربران ،به موضوعات مهمی که در پست اول و دوم مطرح شده جلب شود





واقعا به نظر شما من دنبال جواب سوال هایی بودم که در پست شماره 3 گفتم؟ یا اینکه می خواستم با دادن جواب اون سوالات، به اشتباهاتتون پی ببرین؟

لینک های درون پست شماره 5 را هم با دقت بسیار زیاد مرور کن

موفق باشید

اَرژنگ
شنبه 03 فروردین 1387, 20:28 عصر
شما به بزرگی خودت ما رو ببخش، اگه صحیح نبود، Modifier ها رو در اختیار برنامه نویسان قرار نمیداد، به علاوه، برای روشن شدن مطلب، من نخواستم کد نویسی رو پیچیده کنم تا اون دوستی که سوال رو در خواست کرده بودن، زودتر به مطلب برسن، شما میتونی به جای عوض کردن Modifier ها به Public، یه Public Property بسازی که مقدار فیلد Private رو برگردونه، این روش کاملا درست و متطقیه و به کرات ازش استفاده میکنن.

خیر! دلایل وجود قابلیتها ربطی به صحیح بودن و یا منطقی بودن از استفاده ازشان ندارد. این مثال خوبی بر سوءاستفاده از قابلیتهاست.




شما چطور میتونی کلاس فرم 2 رو با کلاس فرم 1 که هر کدوم خصوصیات و توابع مختص خودشون هستن رو در یک کلاس واحد قرار بدی، مگر اینکه بخوای کلاس فرم 2 رو به جای ارث بری از کلاس Form، از Form1 ارث بری کنی و بعد ببینی چه اتفاقی میفته، خواهش میکنم یه مقدار فکر کنید.

بقیه ی موارد رو هم که دوستان گفتن، قصد این تاپیک چیزی بود که دوستمون در پست اول پرسیدن.
جواب این سوال ربطی به ارث بری ندارد. روش درست انجام این کار را تا حال چندین بار اینجا پست کردم و فقط به سادگی باید انجام داد

sinpin
شنبه 03 فروردین 1387, 22:32 عصر
باسلام
ماسه فرم داریم (فرم 1.2.3)که درفرم یک باتن داریم که با کلیک کردن برروی آنها به فرم جدیدبازمی شود
س1)سه فرم موردنظرمان بازاست حال می خواهیم وقتی روی باتن خروج فرم 3کلیک کردیم فرم2 بسته شوداما فرم 1ما(فرم اصلی )همچنان بازباشد
س2)درفرم 2یک تکست باکس داریم که هرگاه اطلاعات موردنظرمان (نام خانوادگی)رادرآن واردکردیم بعدازکلیک برروی دکمه جستجو عملیات جستجورابرای ماانجام بدهدودردیتاگریدفرم3 اطلاعات بدست آمده رانمایش بدهد

1- بستن فرم دوم توسط فرم 3 :

private void button1_Click(object sender, EventArgs e)
{
Application.OpenForms["Form2"].Close();
}2- برای فرم دوم هم (DataSource پراپرتی ای از فرم 1 است که به دیتاسورس دیتاگرید آن فرم اشاره دارد) :

private void button2_Click(object sender, EventArgs e)
{
Form1 frm = Application.OpenForms["Form1"];
frm.DataSource = GetResult(this.textBox1.Text);
}بخشی از تعریف فرم 1 :

public partial class Form1 : Form
{
public object DataSource
{
get { return dataGridView1.DataSource; }
set { dataGridView1.DataSource = value; }
}
}

hdv212
یک شنبه 04 فروردین 1387, 11:49 صبح
واقعا به نظر شما من دنبال جواب سوال هایی بودم که در پست شماره 3 گفتم؟ یا اینکه می خواستم با دادن جواب اون سوالات، به اشتباهاتتون پی ببرین؟
شما میخوای با زدن پستهایی که هی ربطی به موضوع پست اول نداره چیو ثابت کنی ؟ مطمئن باش کسی نمیاد برنامتو هک کنه.

خیر! دلایل وجود قابلیتها ربطی به صحیح بودن و یا منطقی بودن از استفاده ازشان ندارد. این مثال خوبی بر سوءاستفاده از قابلیتهاست.
شما میدونی دلیل افزودن Public Property ها به یک کلاس چیه ؟ مگه نه اینکه هدف، خواندن و نوشتن داده روی اعضای خصوصی یک کلاسه ؟
مگه شما در تعریف کلاسهات از این قابلیت به کرات استفاده نمیکنی :

class myClass
{
private string name;
public string Name
{
get { return name;}
set { name = value;}
}
}


جواب این سوال ربطی به ارث بری ندارد. روش درست انجام این کار را تا حال چندین بار اینجا پست کردم و فقط به سادگی باید انجام داد
پس به چی ربط داره ؟

نمیدونم چرا تا تقی به توقی میخوره، مدافعان حقوق امنیت نرم افزاری میان و به جای بیان جواب اصلی موضوع، با یه سری مباحث تئوریک، تاپیک رو از بحث اصلی خارج میکنن.

hdv212
یک شنبه 04 فروردین 1387, 15:04 عصر
در Form1، آبجکت dataGridView1 رو انتخاب و Modifier اونو به Private تغییر بدید،
سپس یه متد به صورت زیر بنویسید که خاصیت DataSource دیتاگریدویو رو به DataTable ای که بهش پاس میشه بایند کنه :
دقت کنید که Modifier این متد به صورت Internal تعریف شده، از public هم میتونید استفاده کنید.

internal void BindGridViewDataSource(DataTable dt)
{
this.dataGridView1.DataSource = dt;
}حالا در Form2، رویداد button2_Click رو به صورت زیر اصلاح کنید :

private void button2_Click(object sender, EventArgs e)
{
//frm.dataGridView1.DataSource = GetResult(this.textBox1.Text);
frm.BindGridViewDataSource(this.GetResult(this.tex tBox1.Text));
}بقیه ی Propertyهای Private رو هم میتونید با تعریف یک تابع از نوع Public یا Internal در فرم های دیگه مورد دسترسی قرار دهید.

Mahdi.Kiani
دوشنبه 05 فروردین 1387, 10:31 صبح
با سلام به همگی دوستان

****
دوست عزیزم، آقای hdv212 ، من نمی دونم که چرا شما فکر کردین که من می خوام بحث را به مجادله بکشونم یا بحث بیخود راه بندازم...
همونطور که خودتون می دونین، برنامه نویسی با وجود محیط هایی مثل دات نت و اون قسم برنامه هایی که ما تو ایران می نویسیم (اکثرا) خیلی راحت شده ...
بیش از 90 درصد کار ها، قبلا براتون آماده شده ...
پس ما حداقل سعی کنیم که اون 10 در صدی( شایدم کمتر) که به عهده ماست را خوب و اصولی انجام بدیم ...
درسته که هدف اصلی فروم ها، اینه که افرادی به جواب پرسش هاشون برسن و هیچ تضمینی نه از مدیران و نه از سایر کاربران برای گیرنده جواب وجود نداره که آیا جوابی که در یافت کرده بهترین جواب بوده یا نه ....
اما در این فروم، و با وجود متخصصینی همچون خود شما، یکمی بیشتر باید نسبت به این موضوع حساس باشیم که جواب هایی که داده میشه، حرفه ای تر، اصولی تر و حداقل نزدیک به استاندارد های برنامه نویسی باشه ...
یادمون نره که اگر برنامه نویس، برنامه نویس شده، به خاطر کاربران خوبی بوده که در هر بخش به مقتضای اون در آن بخش وجود داشته و بدون هیچ چشم داشتی به سوالات کاربران جوابگو هستند ...
شاید اگر این جواب را که در پست شماره 2 دادید را در سایت یا فرومی غیر ازز اینجا میدیدم، بی تفاوت از کنار آن رد می شدم .....

***********
و اما در مورد property ها یه نکته بگم، و تمام.. انشاء الله که این بحث هم به خوبی پایان می پذیرد..
شما گفتین، مگه نه اینکه property ها جهت دسترسی به اعضای private کلاس ها هستند.
در جواب باید بگم که بله کاملا حق با شماست .. ولی این موضوع سطحی ترین نگاه به property ها خواهد بود .. چون اگر واقعا چنین بود، یعنی تنها هدف از ایجاد property ها دسترسی به اعضای private کلاس ها بود، می تونم به جرات بگم که ماکروسافت کار بیهوده ای انجام داده.. چون می شد، که با public کردن همون متغیر ها به اونا دسترسی داشت... اما نکته مهم اینه که هدف، تنها رسیدن و دسترسی محض به اعضای private کلاس نیست .. من این موضوع را در پستی که در صفحه قبل زدم، کامل توضیح دادم ... کاری که با property ها قابل انجام است و با public کردن خود فیلد، امکان پذیر نیست، کنترل کردن اون متغیر یا فیلد است ...
فرض کنید به فیلدی فقط باید حروف بگیره، اون موقع چطوری می تونین با public کردن متغیر، این کنترل را بر روی متغیر داشته باشین؟
***************************
به هر حال هدف از ایجاد این بحث ها، فقط و فقط بالا رفتن، سطح اطلاعات و حرکت کردن به سمت رسیدن به اصول صحیح تولید نرم افزار (در درجه اول برای خودم)است .. و الا اینکه شما یا هر کس دیگه ای ، بیاد و هر چیزی که تو برنامه داره را به صورت public static (اون هم با تاکید زیاد) قرار یده نه صدمه ای به من و برنامه هام میرسه و نه ......
**********
در پایان از همه دوستان و به خصوص از آقای hdv212 ، اگر که باعث رنجششان شدم عذر خواهی می کنم
موفق باشید
سال پر باری داشته باشید

اَرژنگ
دوشنبه 05 فروردین 1387, 18:09 عصر
اما در این فروم، و با وجود متخصصینی همچون خود شما، یکمی بیشتر باید نسبت به این موضوع حساس باشیم که جواب هایی که داده میشه، حرفه ای تر، اصولی تر و حداقل نزدیک به استاندارد های برنامه نویسی باشه ...
یادمون نره که اگر برنامه نویس، برنامه نویس شده، به خاطر کاربران خوبی بوده که در هر بخش به مقتضای اون در آن بخش وجود داشته و بدون هیچ چشم داشتی به سوالات کاربران جوابگو هستند ...
شاید اگر این جواب را که در پست شماره 2 دادید را در سایت یا فرومی غیر ازز اینجا میدیدم، بی تفاوت از کنار آن رد می شدم .....


با سلام و درود در خدمت کسانیکه برایه کدنویسی بهتر مبارزه میکنند،
به قول معروف اگر میبینید نابینا و چاه است باید راهنمائی کنید.
پایئن آوردن استاندارد خودتان فرقی با پخشگرائی کد سطح پائین نداردن.
این درست است که خیلی کدها همان جواب را میدند، ولی دانستن روش درست بر شما واجب میکند که به بقیه هم همان روش را بگید.
البته من هم گاها دیگر خسته شدم و دیگر به ترویج روش درست بی اعتنا شدم ولی از من سنی گذشته ، شما جوانها که روش درست را میدانید بهش سفت نچسبید و بغیر از روش درست روش دیگری را پیشنهاد نکنید آخر و عاقبت برنامه نویسی را باید فاته‌اش را خواند.
برنامه‌نویس در اسم زیاد است، ولی هر کسی لیاقتی لقب برنامه‌نویس را ندارد، و اگر شما که جواب درست را میدانید و در مقابل جوابهایه سطح پائین بی تفاوت بگذرید ، شما هم شریک جرمید :) (برایه همین من دیگر به فرومهایه دیگر نگاه نمیندازم).
مبارزه برایه کد نویسی بهتر را ادامه بدید، در دنیایه واقعی خیلی چیزهایه اشتباه وجود دارد که خارج از قدرت ما برنامه نویساست، ولی در فروم برنامه نویسی ، برنامه نویسان واقعی باید روش درست را ترویج کنند و جلویه کدهایه سطح پائیین را (به هر دلیلی ، حتا اگر مشکل یک بابائی را درجا حل میکند) را بگیرند.

از بهترین جواب کمتر نفرستید و اگر کسی که سوال را میپرسد قابلیت فهم جواب شما را ندارد باید بره جستجو و پژوهش کند. سطح‌ خودتان را برایه دیگران پائین نیاورید.

پیروز باد رویایه بهترین کد نویسی! شکست در نبرد با کد بد را هیچ وقت قبول نکنید!

hdv212
دوشنبه 05 فروردین 1387, 18:33 عصر
جناب ..... عزیز ممنون از فرمایشات گرانبهاتون
من هیچ نیازی به سر زدن به فروم سی شارپ ندارم و تنها هدفی که دارم فقط عیب یابی و کمک به بچه هایی هستن که تازه کار هستن و تو کارشون مشکل دارن، چون خودم از این سایت خیلی چیزا یاد گرفتم، منت سر کسی نمیذارم و قصدم هم این نیست که بگم من خیلی چیز بارمه، نه آقا ما گردنمون از مو باریک تره، ولی اجازه هم نمیدم بعضی ها با به رخ کشیدن علمشون بیان زحمات چند ساله ی منو نادیده بگیرن، از این جر و بحث ها هم زیاد بوده ولی همه به خوبی و خوشی تموم شده و .... .
من برای این فروم دیگه حرفی ندارم.

اَرژنگ
دوشنبه 05 فروردین 1387, 19:04 عصر
جناب ..... عزیز ممنون از فرمایشات گرانبهاتون
من هیچ نیازی به سر زدن به فروم سی شارپ ندارم و تنها هدفی که دارم فقط عیب یابی و کمک به بچه هایی هستن که تازه کار هستن و تو کارشون مشکل دارن، چون خودم از این سایت خیلی چیزا یاد گرفتم، منت سر کسی نمیذارم و قصدم هم این نیست که بگم من خیلی چیز بارمه، نه آقا ما گردنمون از مو باریک تره، ولی اجازه هم نمیدم بعضی ها با به رخ کشیدن علمشون بیان زحمات چند ساله ی منو نادیده بگیرن، از این جر و بحث ها هم زیاد بوده ولی همه به خوبی و خوشی تموم شده و .... .
من برای این فروم دیگه حرفی ندارم.
از همه کمتر من بارمه،
ولی اگر شما میدونید که درست میگید نباید عقب نشینی کنید، اگر شما که جوانید و میدانید چی درست هست و از سطح خودتان کمتر را برایه بقیه صلاح‌بدانید، با اینکه دارید در بعد مشکلشان را حل میکنید، مشکلات دیگری که آفریده میشند به گردن من و شماست که با اینکه میدونیم چیزی نمیگیم.
شما واقعا نمیدونید که چی میدونید تا موقعی که وایستید و برایه چیزی که میدونید دفاع کنید ( منطقی مانند دفاعی که برایه تزه دکتاراشان انجام بدند).

اگر کسانیکه که منطقا میدانند بهترین جواب چی هست و برایه مصلحت از دیگران دریغ کنند ، جواب درست را تازه‌کآرها چطوری پیدا میکنند؟

اگر شما زحمت کشیدید و یاد گرفتید ، وظیفه‌اتان است که همانطوری ترویج کنید، وگرنه مثل ما پیرها حساب میشیدید (تقریبا یک چیزی مانند نیمه مرده که لگدمان هم بزنند حاله گلایه هم نداریم).

چزیی که اینجا بهش جر و بحث میگند، در مباحث علمی ضروری است و هر کی که در قسمتهایه علمی میخواهد پیشرفت کند باید نظراتش را دفاع کند.

بهترین چیزهایی که من یاد گرفتم از همین که از نظرم دفاع کردم بوده، و وقتی که متوجه شدم که چیزی که فکر میکنم اشتباه است پیشرفت کردم. درست بودن و یا اشتباه بودن در یک مطلب ربطی به مقدار زحمات در یک رشته ندارد. خیلی از متخصصین در خیلی موارد اشتباه هسنتد، ولی هنوز از متخصص‌بودنشان چیزی کم نمیشه.

همه ما آدمیم. اگر کسی فکر کند نباید اشتباه کند و یا اینکه از خطا بدور است، یا خداست یا اینکه دیوانست! اگر هم مطعن باشیم که درست داریم میگیم، در دفاع از عقیده‌مان دلایل درستیش را بهتر درک میکنیم.

اگر یکی ۱۰۰ تا نظر بدهد و هر ۱۰۰ تاش هم از یک لحاضی اشتباه باشد بازهم از شخصیتش هیچ چی کم نمیشه، تازه این بابا بیشترین سود را میبرد! چرا؟ چونکه کسی که ۱۰۰ تا نظر میدهد و هر ۱۰۰ تاش هم درست است چه چیزه جدیدی را یاد میگیرد؟

تنها موقعی زحمات پایمال میشند که یکی جواب درست را بداند و ساکت بشیند.

در نبرد با بَدکُدان شکست وجود ندارد، بازنده کسانی هستند که از بهترین کمتر را قبول کنند!
درود و پیروزی بر کسانیکه مداوما هم سطح دیگران و هم خودشان را بالا میبرند.

vcldeveloper
سه شنبه 06 فروردین 1387, 02:23 صبح
دوستان عزیز:

خواهشا روی جواب سوال مطرح شده تمرکز کنید و از بحث های حاشیه ایی و بی نتیجه خودداری کنید. فردی سوالی پرسیده، کاربرانی هم که به این تاپیک مراجعه می کنند یا جواب دهنده هستند، یا همین سوال برای خودشان هم مطرح بوده. اگر به فرض جواب کاربری از نظر فنی اشتباه بوده، با ذکر دلایل فنی و بدون پرداختن به حاشیه دلیل اشتباه بودن آن را ذکر کنید. کسی اینجا به سوابق شما، یا سطح دانش فنی شما، یا ایده آل ها و آرمان های شما کاری نداره. اگر با هم مشکل دارید، در صورتی که بحث به نوعی به برنامه نویسی مربوط میشه، پیام های خصوصی برای این کار در نظر گرفته شده، در غیر اینصوت می تونید از چت، ای میل، تلفن و... استفاده کنید.

اگر رعایت نکنید، مجبور میشم تاپیک را قفل کنم.

موفق باشید

armiya
شنبه 17 فروردین 1387, 22:12 عصر
سلا م اگ این دو ست ما با متد ها یک کم با زی کنه مشکل یستن فر م هاشون حل می شه منظورم متد های show و hideئا سه جستجو هم می تو نه این کد مفید با شه select * from databasename where حا لا هر شر طی که می خواد بزاره