PDA

View Full Version : سوال: اضافه کردن اکتیو ایکس در حال اجرا و چیدن آنها



Blue Rose
شنبه 19 مرداد 1387, 19:14 عصر
سلام
یه اکتیو ایکس ساده دارم با یک دگمه(یا لیبل) داخلش
کاربر میتونه متن داخل اون رو تغییر بده (بوسیله یه پراپرتی ساده -Get & Let)

حالا سوالم

میخام مثلا 5 تا (این عدد قابل تغییر بوسیله کاربر هست) از این اکتیو ایکس رو در حال اجرای برنامه جفت هم جا بدم
و بهشون مقدار دهی کنم یا ازشون مقدار بگیرم


تنها نتیجه ای که گرفتم خطوط پایین بود


Dim BR() As Ociks
Dim cnt As Integer
Set BR(cnt) = Me.Controls.Add("Project1.Ociks", "CtrlName" & cnt)

در ضمن نمایش و انتقال اونها کنار هم یه مشکل دیگه ست

پیشاپیش از کمکتون مچکرم

Blue Rose
چهارشنبه 20 شهریور 1387, 22:57 عصر
سلام

هیچکس کمک نکرد خودم گشتم تا اینجا رو تونستم درست کنم

اما حالا نمیتونم بچینمش

یعنی این قسمت کار نمیکنه

اندازه ها درست نیستند
'BR(isum).Move (isum Mod (ScaleWidth \ 900)) * 900, 960 + (isum \ (ScaleWidth \ 900)) * 350, 900, 350

'BR(isum).Visible = True

در ضمن رویداد کلیک برای کنترل کار نمیکنه

ایا راه حلی برای این 2 تا مشکل هست

نتونستم فایل رو آپلود کنم عین متن سورس رو میذارم

Form 1
Dim BR() As Ociks
Dim cnt As Integer
Const CtlName As String = "Ociks"

Private Sub AddCom()
Dim Obj As Control
isum = 1
For Each Obj In Controls
If InStr(Obj.Name, CtlName) > 0 Then _
isum = Val(Right(Obj.Name, Len(Obj.Name) - Len(CtlName))) + 1
Next
ReDim Preserve BR(isum)
Set BR(isum) = Me.Controls.Add("Project1.Ociks", CtlName & CStr(isum))
'BR(isum).Move (isum Mod (ScaleWidth \ 900)) * 900, 960 + (isum \ (ScaleWidth \ 900)) * 350, 900, 350
BR(isum).Text = "Ocix" & CStr(isum)
'BR(isum).Visible = True
For Each Obj In Controls
Obj.Visible = True
Next
End Sub

Private Sub DelCom(Ctl As Integer)
Set Ociks(Val(Ctl)) = Nothing
End Sub

Private Sub Command1_Click()
AddCom
End Sub

Private Sub Command2_Click()
DelCom (Text1.Text)
End Sub

Private Sub Form_dblClick()
Dim Obj As Control
For Each Obj In Controls
'MsgBox Obj.Type
MsgBox Obj.Name
Next
End Sub

Private Sub Ociks_Click(Index As Integer)
MsgBox Index
End Sub

Private Sub Ociks_DblClick(Index As Integer)
MsgBox Index
DelCom (Index)
End Sub





Ociks
Dim XX, YY As String
Dim Rosie As Boolean

Event Click()
Event DblClick()

Public Property Get Text() As String
Text = Label1.Caption
End Property

Public Property Let Text(ByVal vNewValue As String)
Label1.Caption = vNewValue
PropertyChanged "Text"
End Property

Private Sub Label1_DblClick()
X = InputBox("Input Message", "Plz", Text)
Text = X
End Sub

Private Sub UserControl_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
XX = X
YY = Y
Rosie = True
End Sub

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Rosie = True Then
UserControl.Extender.Left = UserControl.Extender.Left + (X - XX)
UserControl.Extender.Top = UserControl.Extender.Top + (Y - YY)
End If
End Sub

Private Sub UserControl_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Rosie = False
End Sub

VB.SOS
پنج شنبه 21 شهریور 1387, 06:49 صبح
روش صحيح اين نيست. خب اول بگو اين كار اضافه كردن اكتيوايكس رو قرار كجا انجام بدي تو فورمت يا تو اكتيوايكست؟

Blue Rose
پنج شنبه 21 شهریور 1387, 17:13 عصر
سلام
خیلی ممنون بخاطر توجهتون

عین متن سورس اکتیوایکس رو گذاشتم
حالا میخوام توی فرم در حال اجرای برنامه مثلا 3تا از این اکتیوایکس بذارم کنارهم
امکان کم و زیاد کردن هم بذارم

در ضمن این جابجایی اکتیوایکس در حال اجرا که الان با 3 تا رویداد توی سورس اکتیوایکس گذاشتم هم بر میدارم چون لازم نیست و به رویداد کلیک نیاز دارم

VB.SOS
جمعه 22 شهریور 1387, 18:17 عصر
ببين جواب منو ندادي ولي تو حالت كلي فرقي نداره. ساده ترين روش همينه كه برات تو يه نمونه ساده نوشتم. اگه چيزي كه مي خواي اين نيست بازهم بيشتر توضيح بده:چشمک:

Blue Rose
پنج شنبه 28 شهریور 1387, 14:58 عصر
سلام

خيلي ممنون بخاطر اين نمونه کار

کارمو راه انداخت

در ضمن من گفتم اکتيو ايکس دقيقا مثل يه کنترله (مثل همون چک باکس) که در زمان اجراي فرم ميخواهيم چند تا ازش روي فرم بچينيم

اما يه چيزي مونده
اونم رويداد کليک اکتيوايکسه

که اونم من اينطوري درستش کردم

توي قسمت جنرال اکتيوايکس
public event click()

توي رويداد کليک اکتيوايکس
raiseevent click()