PDA

View Full Version : مشکل با Usercontrol ها



mehdi58
جمعه 01 اردیبهشت 1385, 08:34 صبح
سلام
توی این فروم گشتم و مطالب مختلفی در زمینه Usercontrol دیدم اما به جوابم نرسیدم ( شاید هم بوده و من خطاکار ندیدم)
سوالم اینه :
من یه Usercontrol دارم که شامل یه سری کنترلهاست وقتی که اون رو به فرمم اظافه می کنم(منظورم Usercontrol است) حالا میخوام مثلا اطلاعاتی که داخل یکی از Textbox های اون Usercontrol قرار گرفته رو توی دیتابیس ذخیره کنم اما دسترسی به Textbox ندارم !
خوب باید چیکارکنم
یه چیزایی در مورد Property هم توی تاپیکها خوندم اما باز هم متوجه نشدم .
ممنون میشم از راهنمایی شما

white fox
جمعه 01 اردیبهشت 1385, 08:57 صبح
شما اگر با مفاهیم OOP آشنائی داشته باشید میدونید پراپرتی در NET به چه صورت هست.
باید یک پراپرتی که حتما هم از نوع Public باید تعریف بشه در UserControl تون بنویسید و در قسمت Get میتونید مقدار TextBox برگردونید توی صفحه اصلی هم برای دسسترسی به اون پراپرتی باید از نام یوزر کنترل و بعد نقطه و اسم پراپرتی که عمل GET انجام میگیره و مقدار تکست باکس برمیگرده چیزی مانند زیر:

کد درون UserControl:


Public Class UserControl1
Inherits System.Web.UI.UserControl

Public ReadOnly Property txt() as string
Get
Return textbox1.text
End Property
End Class


کد درون فرم اصلی:


dim x as string = UserControl1.txt
response.write(x)

mehdi58
جمعه 01 اردیبهشت 1385, 11:08 صبح
آقا دستت درد نکنه

mehdi58
جمعه 01 اردیبهشت 1385, 18:29 عصر
سلام
روشی رو که گفته بودین انجام دادم اما به مشکل برخوردم!
فایل رو واستون فرستادم اگه امکان داره اون بررسی کنین.
ضمنا اگه توی Usercontrol من دو یا بیشتر Textbox بود و خواسته باشم که مقادیر هر کدوم رو در فرم از اونها بگیرم باید چند تا Property بنیوسم یا اینکه راه دیگه ای هم داره؟

white fox
شنبه 02 اردیبهشت 1385, 06:21 صبح
با سلام....
اصولا کدتون ایراد خاصی نداشت جز اینکه در فرم اصلیتون یعنی WebForm1 وقتی کنترل رو اضافه کردید خود VS خودکار کد مربوط به معرفی کنترل رو به کدتون اضافه نکرده در Codebehinde تون در قسمت جنرال کدتون متن زیر رو وارد کنید:



Protected WithEvents WebUserControl11 as WebUserControl1


در مورد سوال دومتون خوب اگر فقط قصد خواندن متن از تکستباکسها رو داشته باشید و عمل تایید صحت اطلاعات توسط پراپرتی نمیخواید انجام بگیره شاید راحت ترین کار این باشه که در UserControl تون در بخشی که کد خود به خود Generate میشه کافی Expand کنید اون + کوچولو رو کدهایی میبینید که مثل کد بالا با Protected شروع شده اند و در واقع کد معرفی کنترل های صفحتون هست شما Protected رو تبدیل به Public کنید اونطوری دیگه پراپرتی نمیخواد و در فرم اصلی کافیه مثلا بنویسید:



WebuserControl1.TextBox2.Text


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

mehdi58
سه شنبه 05 اردیبهشت 1385, 19:39 عصر
با سلام....
اصولا کدتون ایراد خاصی نداشت جز اینکه در فرم اصلیتون یعنی WebForm1 وقتی کنترل رو اضافه کردید خود VS خودکار کد مربوط به معرفی کنترل رو به کدتون اضافه نکرده در Codebehinde تون در قسمت جنرال کدتون متن زیر رو وارد کنید:



Protected WithEvents WebUserControl11 as WebUserControl1


با توجه به جواب شما حالا اگه من Usercontrol رو در زمان اجرا به فرمم add کنم اون وقت تکلیف این عبارت چی میشه و چه جوری باید اون رو به کدم اضافه کنم؟

white fox
سه شنبه 05 اردیبهشت 1385, 22:07 عصر
اصولا فکر نمیکنم مشکلی پیش بیاد وقتی دارید به صورت پویا کنترل رو اضافه میکنید کد خاصی برای اون منظور لازم نیست....
برای اضافه کردن کنترل ها به صورت پویا به شیوه صحیح مراجعه کنید به تاپیک "پرسش های متداول برنامه نویسان" در انتهای گفگو توضیح داده اند آقای راد.

iekrang
سه شنبه 05 اردیبهشت 1385, 22:36 عصر
آقا ممنون از جوابتون.بسیار راهگشا بود.