ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

ActiveX قسمت 2

 
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET
View previous topic :: View next topic  
Author Message
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 3067
Location: Tehran

PostPosted: Mon Apr 18, 2005 7:09 am    Post subject: ActiveX قسمت 2 Reply with quote

اگر مطالب سري قبل را فراموش كرده ايد بهتر است يك سري به انها بزنيد و دوباره بخوانيد و سپس به ادامه بپردازيد در درس پيش يك فلاشر درست كرديم كه چشمك ميزد .
در اين درس يك text box ميسازيم . منتهي تكست باكسي كه در آن ميتوانيم تنها با چند كليك تعيين كنيم كه كاربر تنها ميتواند عدد وارد كند يا حرف يا هر دوي انها . يا حتي اگر كاربر حرف وارد كرد حروف انرا بزرگ يا كوچك كنيم .
بهتر است شروع كنيم :
مهمترين قسمت درس انستكه ويژوال بيسيك را شروع كنيد . اگر بخواهيد اموزشهاي اين درس را بخوانيد بايد ويژوال بيسيك را همزمان در سيستم باز كنيد و همزمان عملياتي كه ميگم رو اجرا كنيد . در غير اينصورت تضمين ميكنم كه هيچي يادنميگيريد . حتي شما دوست عزيز !
يك پروژه ActiveX Control باز كنيد .
يك text Box به محيط كاري خود اضافه كنيد .
فعلا نگران اندازه و موقعيت ان در صفحه نباشيد .
نام textbox را به txtTextBox تغيير دهيد .
از property ها مقدار text1 را از text پاك كنيد تا text box شما بدون متن اوليه باشد .
با اينكه هنوز كاري انجام نداده ايم :
از file گزينه Add project را انتخاب كنيد .
يك پروژه standard exe درست كنيد .
UserControl1 خود را از toolbox به form1 خود منتقل كنيد ( اگر usercontrol1 فعال نيست . بايد activex كنترلي كه باز كرده ايد را از محيط طراحي در بياوريد . براي اينكار كافيست تمامي پنجره هايي كه مربوط به طراحي كنترل ميشود ( پنجره كد و تصوير ) را ببنديد .
پس از اضافه كردن كنترل به فرمتان شكي شبيه به شكل زير را خواهيد ديد :

توجه كنيد كه چطور تكست باكس كنترل شما خودكار تغيير سايز نميدهد .
از project2 در بياييد . براي اينكار از project Group روي project2 كليك راست كنيد و انرا remove كنيد و چيزي را ذخيره نكنيد .
ميخواهيم كاري كنيم كه textbox ما قابليت تغيير سايز داشته باشد . از view گزينه code راانتخاب كنيد . از ليست پايين افتادني براي كدنويسي UserControl گزينه UserControl را انتخاب كنيد .
فراموش نكنيد كه هرگاه رويدادي event روي كنترل شما رخ ميدهد مانند Initialize , Resize , LostFocus و غيره مانند انستكه روي فرم فعلي شما رخ داده است .
resize را از ليست پايينريز پراسيجر خود انتخاب كنيد . كدهاي زير را به پروژه خود اضافه كنيد :
Private Sub UserControl_Resize()
   With txtTextBox
      .Height=UserControl.ScaleHeight
      .Top=UserControl.ScaleTop
      .Left=UserControl.ScaleLeft
      .Width=UserControl.ScaleWidth
    End Width
End Sub
دوباره اين textbox را در يك exe project وارد كنيد . ببينيد چه اتفاقي مي افتد ...
در كد بالا از with/end with استفاده كرديم . هرگاه بخواهيم خصوصيات يك object را مرتبا تغيير دهيم ميتوانيم به جاي انكه مداما نام شي را بنويسيم با استفاده از with از نوشتن ان صرف نظر كنيم . در مثال بالا همانطور كه ميبيند به جاي انكه بنويسيم :
txtTextBox.Height=UserControl.ScaleHeight
از روش with استفاده كرديم .
و حالا كه textbox ما قابليت تغيير اندازه پيدا كرد ميخواهيم كاري كنيم كه وقتي فردي كنترل ما را استفاده ميكند . تنها با تنظيم كردن يك property تكستباكس را طوري تنظيم كند كه تنها عدد يا حرف يا تركيبي از انها وارد تكستباكس شود . يا اگر حروف وارد شدند انها تبديل به حروف بزرگ يا كوچك شوند .
بنابراين به نظر ميرسد كه بايد دو property داشته باشيم :
AcceptType براي انكه تنظيم كنيم در تكستباكس ( كنترل ما ) تنهاعدد ميتواند وارد شود يا حرف يا تركيبي از انها ؟
ConvertCase بصورت اتوماتيك تنظيم كنيم كه اگر چيزي وارد تكستباكس ما شد به حروف كوچك يا حروف بزرگ تبديل شود .
اما چگونه بفهميم كه كاربر چه نوع داده اي را ميخواهد روي كنترل ما تنظيم كند ؟
كاربر مثلا با قرار دادن AcceptType =1 مشخص ميكند كه فقط اعداد بايد وارد كنترل شوند .
براي اينكار بايد بصورت زير عمل كنيم .
به بخش كد نويسي كنترل خود برويد در قسمت General كد زير را بنويسيد :
Public Enum CharacterType
   All
   Numbers
   Letters
End Enum

ببينيم چه اتفاقي افتاد ؟
با استفاده از Enum يك سري گزينه درست كرديم كه از بالا به پايين شمارش ميشوند . يعني all اولين شماره و letters اخرين شماره را دارد . استفاده از Enum بصورت پيشفرض public است يعني هركسي ميتواند به اين محتويات دسترسي داشته باشد . CharacterType نام اين سري از اسامي است . بنابراين براي كاربر مشخص كرديم كه در property چه چيزهايي را ميتواند انتخاب كند . حال برويم سراغ نوع كاراكتري كه قرار است در تكستباكس وارد شود :
Public Enum CaseType
   All
   UpperCase
   LowerCase
End Enum
بارها ازكد زير استفاده كرده ايد :
Text1.Text=”Hello World!”
كه يك property را براي Text1 مقدار دهي كرده ايد . و هر بار كه گفته ايد :
MsgBox Text1.Text
يك Property را خوانده ايد .
حتما تا الان يك ActiveX نويس قابل شده ايد ! لذا كمي مبحث را پيشرفته كنيم .
وقتي يك property را set ميكنيد يك نوع كد بايد بنويسيد و وقتي ميخواهيد همان property را بازيابي كنيد از كد ديگري استفاده ميكنيد . بنابراين در پشت صحنه دو اتفاق مي افتد :
پنجره كد را باز كنيد .
از Tools گزينه procedure را انتخاب كنيد .
در Name Box نوع را AcceptType بنويسيد .
دكمه Property را انتخاب كنيد .
دكمه OK را بزنيد .
در نتيجه عمليات فوق دو دسته كد زير نوشته ميشوند :
Public Property Get AcceptType() As Variant
End Property
Public Property Let AcceptType(ByVal vNewValue As Variant)
End Property
در كد فوق let و get داريم . كدهاي let براي انستكه وقتي كه كاربر سعي ميكند ارزشي براي AcceptType قرار دهد فعال شود . و get برانستكه وقتي كسي سعي ميكند ارزش قرارداده شده را بازيابي كند .
اگر توجه كنيد let بصورت پراسيجر است كه مقداري راقبول ميكند و انرا در vNewValue قرار ميدهد و get تابعيست كه اطلاعات را به كاربر بازميگرداند .
Dim strUserName as String
Public Property Get UserName() As Variant
UserName= strUserName
End Property
Public Property Let UserName(ByVal NewUserName As Variant)
strUserName=NewUserName
End Property
در مثال بالا وقتي در
Mycontrol.UserName=”John”
قرار ميدهيم پراسيجر let اجرا ميشود و strUserName را مقدار دهي ميكند .
وقتي از طريق
MsgBox MyControl.UserName

بازيابي ميكنيم . پراسيجر get اجرا ميشود و مقدار strUserName را باز ميگرداند .
اين دقيقا عملكردي است از تمامي property Procedure ها .
و اما در كدهايي كه نوشتيد تغييرات كوچكي بدهيد :
Public Property Get AcceptType() As CharacterType
End Property
Public Property Let AcceptType(ByVal CharType As CharacterType)
End Property
كار مهمي كه ما در اينجا كرده ايم انستكه نوع variant را به نوعي كه خودمان قبلا ساخته بوديم CharacterType تغييرداده ايم . در اينجا كاربر تنها ميتواند CharacterType ارسال كند و نوع ديگري .
در قسمت General كد نويسي وارد كنيد :
Dim m_CharType as CharacterType
مقداري ديگر كدهاي فوق را كه نوشته ايد تغيير دهيد :
Public Property Get AcceptType() As CharacterType
AcceptType=m_CharType
End Property
Public Property Let AcceptType(Bycl CharType As CharacterType)
m_CharType=CharType
End Property
شايد بگويييد كه اين چه كاريست ؟ بصورت public متغيرها را مستقيم مقدار دهي ميكنيم و ديگر نيازي به اين نيست كه از Get/Let استفاده كنيم . اما توجه داشته باشيد كه اگر بصورت مستقيم استفاده كنيد . ديگر قدرت مديريت نحوه وارد كردن داده ها را نخواهيد داشت . فرض كنيد كسي كلمه كاربري parsx را وارد كند . حال انكه ان كلمه متعلق به او نيست . با get/let ميتوانيد به اون اخطار دهيد . و كنترل برنامه را در دست داشته باشيد .
حال نوبت به انستكه ConvertCase را نيز به property ها اضافه كنيم :
Dim m_CaseType As integer
Public Property Get ConvertCase() As CaseType
   ConvertCase=m_CaseType
End Property
Public Property Let ConvertCase(ByVal CsType As CaseType)
m_CaseType=CsType
End Property
حال كنترل خود را چك كنيم :
Standard Exe را انتخاب كنيد .
از toolbox كنترل خود را به فرم اضافه كنيد .
به property كنترل خود بنگريد . آيا AcceptType و convertCase را ميبينيد ؟
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> ويژوال بيسيك .NET All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum