PDA

View Full Version : دسترسی به اشیاء یک فرم



mohsen_f_b
جمعه 20 شهریور 1388, 03:05 صبح
سلام
چطوری می تونم به اشیاء یک فرم از یک فرم دیگه دسترسی پیدا کنم؟

باتشکر

اَرژنگ
جمعه 20 شهریور 1388, 03:17 صبح
سلام
چطوری می تونم به اشیاء یک فرم از یک فرم دیگه دسترسی پیدا کنم؟

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

مثال بسیار ساده که از روشهایه درست برنامه‌نویسی استفاده میکند ضمیمه کردم.

mohsenashkboos
جمعه 20 شهریور 1388, 03:23 صبح
من یه برنامه در آدرس زیر گذاشتم برو دانلود کن شاید جوابتو گرفتی:چشمک:

http://barnamenevis.org/forum/showthread.php?t=178728

mohsen_f_b
جمعه 20 شهریور 1388, 11:16 صبح
روش درستش این است که دستیابی نکنید.
به جایه دست انداختن به اعضایه یک شئی دیگر (در این مورد یک شئی دیگر فرم دیگر است)، از اون فرم درخواست کنید که مقادیر را یا ازتان بگیرد و در عضوش (تکست باکس، داتاگرید...هرچی) نشان بده.
مواظب جوابهایه اشتباه که میگند خاصیت Modifier اون کنترلی که میخوای اطلاعاتت توش برگرده رو به internal و یا public تغیر بده باش.
بدترین روش استفاده از یک کلاس و یا فیلد استاتیک است، برایه ذخیره کردن مانند یک متغییر سراسری استفاده میشه و روش واقعا سطح پائیینی است که استفاده‌ نکردن ازش خیلی بهتر است.
یا یک متد در فرمت بساز که هرکی که صداش زد کارهایه داخلیش را خودش انجام بده و یا اینکه تبدیل به یک پروپرتیش کن و دوباره کارهایه داخلی فرم را در خود همان فرم انجام بدید. اینکه اعضا همینطوری قابل دسترسی باشند روش اشتباهی است.
استادها در همین مورد مقالاتی در همین تالار دارند.

مثال بسیار ساده که از روشهایه درست برنامه‌نویسی استفاده میکند ضمیمه کردم.

یه سوال فنی دیگه.
برای اینکه زمانی طرف Enter رو زد تو ComboBox در فرم چکار کنیم؟
باید بگیم وقتی توی Event KeyPress ComboBox ،دکمه Enter زده شده برو btnOk رو کلیک کن؟
یا می تونیم مستقیم بفرستیم؟
اخه شما btnOk رو DI اون OK کردین و در Form1 گفتین وقتی OK زده شد.

باتشکر

اَرژنگ
جمعه 20 شهریور 1388, 11:41 صبح
یه سوال فنی دیگه.
برای اینکه زمانی طرف Enter رو زد تو ComboBox در فرم چکار کنیم؟
باید بگیم وقتی توی Event KeyPress ComboBox ،دکمه Enter زده شده برو btnOk رو کلیک کن؟
یا می تونیم مستقیم بفرستیم؟




private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
this.DialogResult = DialogResult.OK;
}
}




اخه شما btnOk رو DI اون OK کردین و در Form1 گفتین وقتی OK زده شد.


این چیزی که میگید اصلا ربطی به زدن باتن OK ندارد!

Royce_Da
جمعه 20 شهریور 1388, 17:00 عصر
مواظب جوابهایه اشتباه که میگند خاصیت Modifier اون کنترلی که میخوای اطلاعاتت توش برگرده رو به internal و یا public تغیر بده باش.
بدترین روش استفاده از یک کلاس و یا فیلد استاتیک است، برایه ذخیره کردن مانند یک متغییر سراسری استفاده میشه و روش واقعا سطح پائیینی است که استفاده‌ نکردن ازش خیلی بهتر است.
.

پس آقا microsoft این modifier رو واسه چی گزاشته؟

اَرژنگ
جمعه 20 شهریور 1388, 18:07 عصر
پس آقا microsoft این modifier رو واسه چی گزاشته؟

وقتی که کدنویسها (نه برنامه‌نویسا) کار را با ویژوال استودیو شروع میکنند، راحتی کار باهاش پیدا میکنند. برایه همین یک روش آسان شروع کردن میشه.
ولی با هر برنامه‌نویس حرفه‌ای کار کنید، اشکالاتش را میگه.
در قدیم، مگر استفاده از متغییر سراسری را بد نمیدانستند؟ ولی بازهم قابلیت تعریفش را از زبان برنامه‌نویسی در نمیاوردند، استفاده از مدیفایرها مانند استفاده از ۳ چرخه میماند، اولش راه میندازه ولی بعدش وبال گردن میشه.

linux
دوشنبه 14 آذر 1390, 17:59 عصر
با اجازه جناب آرژنگ مثالشان را بهتر کنیم در فرم 2
btnOK.DialogResult = DialogResult.OK;
btnCancel.DialogResult = DialogResult.Cancel;

این خاصیت ها را برای این دو دکمه قرار دهید و
پروپرتی Value را به این شکل تغییر دهید
public string Value
{
get
{
if (this.ShowDialog() == DialogResult.OK)
return this.comboBox1.Text;
return string.Empty ;
}
}
حال در فرم یک Form2 newfrm = new Form2();
textBox1.Text = newfrm.Value;
به نظر خودم که خیلی بهتر شد.
ببنید فرم2 می تواند پیچده تر باشد و حاوی اطلاعات زیادی باشد که باز هم دقیقا روش این هست ولی این بار مقدر Value دیگر رشته نیست ممکن یک کلاسی باشد که خودتان تعریف کرده باشد.