PDA

View Full Version : سوال: ارتباط currencymanagery بين فرم و usercontrol



bah_jaf
چهارشنبه 30 فروردین 1391, 21:50 عصر
سلام

خوب سوالم که به شکل زير بود رو تغيير ميدم :
شکل جديد :
چجوري ميشه از داخل usercontrol به يک متغير داخل فرم دسترسي داشت و اونو تغيير داد

شکل قديم :
من يک usercontrol نوشتم که يک toolbar هست . چند تا دکمه داره به فرض "قبلي" و "بعدي" حالا ميخوام به روشي بتونم currencymanagery که در فرم اصلي هست را با اين تغيير بدم
چيزي شبيه اين :

form1.currencymanager1.posiotion +=1
با توجه به اين . چه جوري ميتونم اين کارو انجام بدم؟

تغريبا ميشه گفت يجور متغير byref ميخوام داشته باشم

bah_jaf
پنج شنبه 31 فروردین 1391, 10:46 صبح
خوب دوستان اين راه حلي بود که به نظرم رسيد
اگر کسي از دوستان ميتونه راهنمايي بهتري بکنه ممنون ميشم

يک property تعيين کردم مثل خاصيت datasource


Private CrmNameString As String
Public Property CrmName As String
Get
Return CrmNameString
End Get
Set(ByVal value As String)
CrmNameString = value
End Set
End Property


بعد در رويداد مورد نظرم مثلا فشردن کليدي کد مورد نظرمو اينجوري نوشتم :

For Each item In MyBase.ParentForm.Controls
If item.name = CrmNameString Then item.position += 1
Next


مقدار mybase.parentform برابر با فرمي که آبجت روي اون قرار گرفته

ROSTAM2
پنج شنبه 31 فروردین 1391, 11:02 صبح
currencymanager

currencymanager چیه!:لبخند:

bah_jaf
پنج شنبه 31 فروردین 1391, 11:17 صبح
يک object جهت bind کردن هست
کار با ديتا رو خيلي ساده ميکنه
اين نمونه مثالش در MSDN هست :
اگز اطلاعات بيشتر خواستين در خدمتم :


' Place the next line into the Declarations section of the form.
Private myCurrencyManager As CurrencyManager

Private Sub BindControl(myTable As DataTable)
' Bind a TextBox control to a DataTable column in a DataSet.
TextBox1.DataBindings.Add("Text", myTable, "CompanyName")
' Specify the CurrencyManager for the DataTable.
myCurrencyManager = CType(me.BindingContext(myTable), CurrencyManager)
' Set the initial Position of the control.
myCurrencyManager.Position = 0
End Sub

Private Sub MoveNext(myCurrencyManager As CurrencyManager)
If myCurrencyManager.Position = myCurrencyManager.Count - 1 Then
MessageBox.Show("You're at end of the records")
Else
myCurrencyManager.Position += 1
End If
End Sub

Private Sub MoveFirst(myCurrencyManager As CurrencyManager)
myCurrencyManager.Position = 0
End Sub

Private Sub MovePrevious(myCurrencyManager As CurrencyManager)
If myCurrencyManager.Position = 0 Then
MessageBox.Show("You're at the beginning of the records.")
Else
myCurrencyManager.Position -= 1
End if
End Sub

Private Sub MoveLast(myCurrencyManager As CurrencyManager)
myCurrencyManager.Position = myCurrencyManager.Count - 1
End Sub

ROSTAM2
پنج شنبه 31 فروردین 1391, 11:24 صبح
پس مشکل چیه شما که منبع msdn رو داری اطلاعات هم که داری در اصل مشکل رو دقیق توضیح ندادید چی می خواید ازش بیرون بیارید

bah_jaf
پنج شنبه 31 فروردین 1391, 11:26 صبح
پس مشکل چیه شما که منبع msdn رو داری اطلاعات هم که داری در اصل مشکل رو دقیق توضیح ندادید چی می خواید ازش بیرون بیارید

مشکلم رو حل کردمم در جواب اين تاپيک نوشتم تا اگر کسي مشکلي شبيه من داشت بتونه راهت پيدا کنه- در عين حال اگر کسي تونست راه حل بهتري ارائه بده

ROSTAM2
پنج شنبه 31 فروردین 1391, 11:28 صبح
راه حل رو بنویس ببینیم خوب

bah_jaf
پنج شنبه 31 فروردین 1391, 11:37 صبح
راه حل رو بنویس ببینیم خوب

اينم جوابش که امروز صبح نوشتم- البته اگر به بالا دقت ميکردين متوجه ميشديد



خوب دوستان اين راه حلي بود که به نظرم رسيد
اگر کسي از دوستان ميتونه راهنمايي بهتري بکنه ممنون ميشم

يک property تعيين کردم مثل خاصيت datasource


Private CrmNameString As String
Public Property CrmName As String
Get
Return CrmNameString
End Get
Set(ByVal value As String)
CrmNameString = value
End Set
End Property


بعد در رويداد مورد نظرم مثلا فشردن کليدي کد مورد نظرمو اينجوري نوشتم :

For Each item In MyBase.ParentForm.Controls
If item.name = CrmNameString Then item.position += 1
Next


مقدار mybase.parentform برابر با فرمي که آبجت روي اون قرار گرفته

ROSTAM2
پنج شنبه 31 فروردین 1391, 11:44 صبح
خوبه ! بهتر نبود واسه کلیدای همون user control هرکدوم یک event می ساختی!

bah_jaf
پنج شنبه 31 فروردین 1391, 11:49 صبح
خوبه ! بهتر نبود واسه کلیدای همون user control هرکدوم یک event می ساختی!

در اين پروژم تقريبا 100 تا فرم هست که داخل هر کدوم اين usercontrol هست که هر usercontrol داراي 14 تا کليد هست اگر بخوام براي هر کدوم کد بنويم اولا خيلي وقت گيره ثانيا در صورتي که بخوام چيزي رو اصلاح کنم ممکنه از دستم در بره- با اين روش يکپارچگي سيستم حفذ ميشه و سرعت هم بالا ميره و امکان بوجود امدن خطا خيلي هم کم ميشه

ROSTAM2
پنج شنبه 31 فروردین 1391, 12:03 عصر
نظریه:

For Each item In MyBase.ParentForm.Controls
If item.name = CrmNameString Then item.position += 1
Next

توی دستور بالا تمام کنترلهای داخل parentform رو پک می شه تا به کنترلی برسه که نامش CrmNameString هست اون با for..each

پیشنهاد:

توی ساختن Event شما برای UserControl چندتا Event می سازی

Public Event XButtonClicked(Sender,e)

برا Rise کردنش از توی Event کلیک کلید x استفاده می کنید

اینجوری تو تمتم پروژه با event قابل دسترسیه
در ضمن به اون پراپرتی هم دیگه اختیاجی نداری به حلقه for..each هم بی نیاز
فقط کافیه از هر event از usercontrol می خوای استفاده کنی و دستور item.position += 1 یا X رو توش بنویسی

bah_jaf
پنج شنبه 31 فروردین 1391, 12:20 عصر
نظریه:


توی دستور بالا تمام کنترلهای داخل parentform رو پک می شه تا به کنترلی برسه که نامش CrmNameString هست اون با for..each

پیشنهاد:

توی ساختن Event شما برای UserControl چندتا Event می سازی

Public Event XButtonClicked(Sender,e)

برا Rise کردنش از توی Event کلیک کلید x استفاده می کنید

اینجوری تو تمتم پروژه با event قابل دسترسیه
در ضمن به اون پراپرتی هم دیگه اختیاجی نداری به حلقه for..each هم بی نیاز
فقط کافیه از هر event از usercontrol می خوای استفاده کنی و دستور item.position += 1 یا X رو توش بنویسی

فقط اين يک دستور نيست که تعداد زيادي دستور هست که انجام ميشه اينا در تنامي فرمهام ثابت هست بعد از اينکه کاراي مورد نظر انجام شد rainsevent ميکنم که تازه اگر چيزي خواستم بهش اضافه کنم