وقتي پنجره‌ها حرف مي‌زنند



در برنامه‌نويسي نرم‌افزارهاي ويندوزي، انتقال اطلاعات ميان فرم‌‌ها يکي از مشکلاتي است كه برنامه‌نويسان مبتدي ويندوز با آن روبرو مي‌شوند. بگذاريد مشکل را با يک مثال به‌طور واضح‌تر بررسي کنيم. فرض کنيد فرمي داريد که اطلاعات کلي در آن به‌نمايش در مي‌آيد حال شما نياز داريد اطلاعات کلي را با جزئيات بيشتر ملاحظه کنيد يا اين‌که تک‌تک آنها را در به‌طور جداگانه مورد بررسي و ويرايش و حذف قرار دهيد. براي اين کار شما نياز داريد كه اطلاعات را از يک فرم به فرم ديگر انتقال دهيد. براي اين کار راه‌هاي متفاوتي وجود دارد که در اين مقاله قصد داريم چند مورد از آنها را بررسي کنيم.

?- انتقال از طريق سازنده کلاس فرم: در اين روش شما اطلاعات مورد نظر را به سازنده يک فرم پاس مي‌دهيد و در فرم اين اطلاعات را بازيابي مي‌کنيد.
?- دسترسي به فيلدهاي عمومي يک کلاس فرم: در اين روش فيلدهايي را در کلاس فرم فرزند تعريف مي‌کنيم و با ساختن يک نمونه از آن و دسترسي به فيلدها آنها را مقداردهي مي‌کنيم (اين روش ساده‌ترين روش است واستفاده از آن به هيچ‌وجه توصيه نمي‌شود).
?- استفاده از ويژگي‌ها: در اين روش شما يک ويژگي (Property) در کلاس فرم فرزند تعريف مي‌کنيد و با انتقال اطلاعات به آن آنها را در فرم فرزند مورد بررسي قرار مي‌دهيد، براي استفاده از اين روش يک نکته را بايد در نظر بگيريد، اين‌که ويژگي‌ها در زمان ساختن يک نمونه از کلاس مقادير پيش‌فرض مي‌گيرند و بعد از ساختن يک نمونه از کلاس نياز هست که ويژگي‌ها مقداردهي شوند و دسترسي به داده‌ها در متدهاي Getter و Setter آنها مورد استفاده قرار مي‌گيرند.
?- استفاده از Tag: پيش از اين‌که اين روش را توضيح دهيم بگذاريد يک بررسي در مورد تگ‌ها داشته باشيم. تعريفي که مايکروسافت از تگ‌ ارائه داده، اين است: «تگ، يك شيء است که داده‌هاي يک کنترل را مي‌گيرد يا برمي‌گرداند.» مقدار تگ يک نمونه از کلاس System.Object در net. را قبول مي‌کند، همان‌طور که مي‌دانيد System.Object پدر تمام کلاس‌ها و ساختارها در net. است، پس مي‌توان در تگ هر آبجکتي را قرارداد. براي مثال شما مي‌توانيد يک DataTable که شامل داده‌هاي شما است را در تگ قرار دهيد يا حتي يک فرم را در آن قرار دهيد. البته اين روش شبيه روش3 است؛ يعني شما از يک ويژگي استفاده مي‌کنيد، به‌جاي اين‌که شما آنرا تعريف کنيد خود net. آن را تعريف کرده است.
?- در اين روش از نماينده (Delegate): استفاده مي‌کنيم، به‌طور خلاصه نماينده يک اشاره‌گر به تابع است، بدين معنا که شما آدرس يک تابع را به يک نماينده مي‌دهيد و نماينده توسط مکانيزمي که دارد آنرا اجرا مي‌کند، خوب چگونه از اين روش استفاده کنيم، يک نماينده در فرم پدر تعريف مي‌کنيد اين نماينده به متدي اشاره مي‌کند که به‌طور مثال يک DataTable را دريافت مي‌کند. خوب حال در فرم فرزند شما يک تابع به‌صورت عمومي تعريف مي‌کنيد که با تعريف نماينده همخواني داشته باشد و مقدار نماينده در فرم پدر را برابر متد تعريف شده در فرم فرزند قرار مي‌دهيم و سپس آنرا اجرا مي‌کنيم.