PDA

View Full Version : تعریف Property در UserControl



SoheilKH
چهارشنبه 14 آبان 1382, 05:44 صبح
یک یوزر کنترل درست داریم توی این یوزر کنترل چند تا Property تعریف کردیم

این یوزر کنترل را توی یک صفحه قرار می دهیم. در قسمت تعریف این یوزر کنترل می تونم به این Property ها دسترسی پیدا کنم و به اونها مقدار بدهم اما وقتی که در قسمت Page_load می خواهم این ها را تغییر بدهم اشکال "Object reference not set to an instance of an object" می دهد.
کجای کار اشکال داره ؟؟؟ :(

Vahid_Nasiri
چهارشنبه 14 آبان 1382, 20:29 عصر
شما باید این یوزر کنترل را به یک فرم اضافه کنید ( drag & drap )
سپس یک متغیر از نوع همین یوزر کنترل در سطح *عمومی* فرم به **نام کنترلی که روی فرم گذاشته اید** ایجاد کنید.
حالا این کنترل در کد بیهایند قابل دسترسی می شود.

SoheilKH
پنج شنبه 15 آبان 1382, 04:11 صبح
من یوزر کنترل را به فرم اضافه کردم .در قسمت کد هم یک متغیر از همان نوع تعریف کردم . حالا برنامه کار می کند اما Property ما set نمی شود.
یه توضیح هم راجع به نحوه کار property بدم
توی لود این یوزر کنترل ، Visible بودن یکی از جدول ها، از طریق این property ست می شود.
حالا نمی دونم چرا وقتی در تعریف این یوزر کنترل توی صفحه html این property را ست می کنم . کار درست پیش می ره اما وقتی می خواهم از طریق کد نویسی این کار را انجام بدهم همان پیش فرض اولیه را Prpperty ست می شود و اصلا به هم من گوش نمی ده :(

Vahid_Nasiri
پنج شنبه 15 آبان 1382, 16:15 عصر
ببینید
اگر نام کنترلی که روی فرم گذاشته اید UC1 باشد باید این متغیر را به صورت زیر به سطح فرم اضافه کنید
protected UC UC1;//this is your answer

دقت کنید هر دو مورد UC1 است

SoheilKH
جمعه 16 آبان 1382, 05:05 صبح
اقای نصیری
این کار را هم کرده اما حرف گوش نمی کند .
این کد برای فرم اصلی است که توش از یوزر کنترل Middel استفاده کردم

Imports System
Imports System.Collections
Imports MathInWeb
Public Class Index
Inherits System.Web.UI.Page
Protected s As new Middel
#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents Table1 As System.Web.UI.WebControls.Table
'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object


Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()

End Sub

#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
s.PropMode = True
s.LoginMode = True
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
End Class

این کد ها برای این یوزر کنترل به حرف خود است


Public Class Middel
Inherits System.Web.UI.UserControl

#Region " Web Form Designer Generated Code "

'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents Login As System.Web.UI.WebControls.Table
Protected WithEvents Table1 As System.Web.UI.WebControls.Table
Protected WithEvents SiteNew As System.Web.UI.WebControls.Table
Protected WithEvents TestAzmoon As System.Web.UI.WebControls.Table
Protected WithEvents Mollasadra As System.Web.UI.WebControls.Table
Protected WithEvents Learning As System.Web.UI.WebControls.Table
Protected WithEvents Tamrin As System.Web.UI.WebControls.Table
Protected WithEvents nemonesoal As System.Web.UI.WebControls.Table
Protected WithEvents Image1 As System.Web.UI.WebControls.Image
Protected WithEvents Tbl_srch As System.Web.UI.WebControls.Table
Protected WithEvents Tbl_Login As System.Web.UI.WebControls.Table
Protected WithEvents Tbl_Prop As System.Web.UI.WebControls.Table


'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()

End Sub

#End Region
Dim MeLoginMode As Boolean = False
Dim MePropMode As Boolean = False
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
Tbl_Login.Visible = MeLoginMode
Tbl_Prop.Visible = MePropMode
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
Public Property LoginMode() As Boolean
Get
Return MeLoginMode
End Get
Set(ByVal Value As Boolean)
MeLoginMode = Value
End Set
End Property
Public Property PropMode() As Boolean
Get
Return MePropMode
End Get
Set(ByVal Value As Boolean)
MePropMode = Value
End Set
End Property


End Class


به نظر شما کجاش اشکال داره

Vahid_Nasiri
جمعه 16 آبان 1382, 13:02 عصر
همانطور که خدمت شما عرض کردم این کد را نباید نوشت :


Protected s As new Middel

احتمالا نام کنترلی که روی فرم دارید Middel1 است پس باید :


Protected Middel1 As new Middel

SoheilKH
شنبه 17 آبان 1382, 04:41 صبح
کاملا درست بود آقای نصیری باید اسم متغییر رو اسم کنترل تعریف می کردم .طفلک حرف گوش کن بود :mrgreen:

Vahid_Nasiri
شنبه 17 آبان 1382, 19:12 عصر
:mrgreen: