PDA

نسخه کامل مشاهده نسخه کامل : یه Error ، سوال در مورد کامپوننت و ListIndex



shadmehrshadow1
18-05-2010, 17:34
1- می خوام یه برنامه درست کنم که توش روز های هفته وجود داشته باشه . وما بتونیم توش یه روز رو انتخاب کنیم و در اون روز یه ساعتی رو
قرار بدیم که یه هشداری رو به ما نشون بده . مثلا روز یک شنبه ساعت 22:30 به ما پیغام بده.
2- من کد زیر رو توی یه دکمه مینویسم ولی اررو میده چیکارکنم؟
Dim y, m, d As Integer
Dim a As Date
y = 1433
m = 2
d = 29
a = CDate(y & "/" & m & "/" & d)
Me.Text = a
ارور :
Conversion from string "1433/2/29" to type 'Date' is not valid.
3- در ساخت کامپوننت اگه بخواهیم یه متنی رو برای کاربر برگردونیم چه کار باید بکنیم؟
مثلا کد زیر :
Label1.text=NameComponent.Title
با اجرای کد زیر متن "ABCDEFG" توی یک لیبل بره.
4- متد ListIndex که در ListBox , ComboBox بود . در ویبی 2008 چه طور به دست میاد؟

عــــلی
19-05-2010, 15:41
سلام دوست عزیز تاریخی که وارد کردین VS اونو از نوع میلادی تعریف میکنه.
و ماه دوم میلادی بیشتر از 28 روز نیست و شما اونو 29 دادید برای همین خطا میده.
موفق باشید.

shadmehrshadow1
19-05-2010, 16:19
بله ممنون. ولی چیکار کنم که درست بشه .
در ضمن ممنون میشم اگه سوالات دیگه رو هم پاسخ بدید

عــــلی
19-05-2010, 17:00
سلام/ببخشید سوالات دیگه تونو ندیدم.
جواب سوال سوم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

4.SelectedIndex

شما نمیتونین همچین کاری کنین که تاریخ رو به صورتی وارد کنید که اشتباه باشه مثل این میمونه که بخواین یک string رو توی integer بریزین.

shadmehrshadow1
20-05-2010, 10:27
خوب پس میشه یه تابع معرفی کنین که تاریخ شمسی رو دریافت کته و تاریخ قمری همون روز رو از نوی Date بده بیرون.

و اینکه می خوام در رویداد MouseHover یک کنترل کد زیر رو بذارم.Dim p2 As New System.Drawing.Point(X,Y)در واقع من یه کنترل Tooltip دارم که یه مقدار از نوع System.Drawing.Point که در اونجا نشون داده بشه . و من از کد بالا استفاده کردم.وقتی که مقدار X و Y رو قرار میدم کنترل توول تیپ در نقطه 0 و0 مانیتور نشون داده میشه . میخوام بدونم چه جوری می تونم . نقطه ی X , Y ماوس رو پیدا کنم و به جای X,y کد بالا قرار بدم.

البته در وی بی 2008 چه طور میشه اعداد تصادفی بین 0 تا 6 رو ایجاد کرد با ویزگی های زیر :
الف) هر بار که فرم رو اجرا می کنیم اعداد مثل هم در نیایند .مثلا وقتی فرم اجرا میشه و ما دستور رو در یک دکمه نوشته ایم و وقتی که 4 بار دکمه ی مربوطه رو فشار دادیم اعداد به ترتیب از راست به چپ ایجاد شد . 4 3 3 1
اونوقت وقتی فرم رو بستیم و اجرا رو متوقف کردیم . و دوباره فرم رو اجرا کردیم و 4 بار روی دکمه کلیک کردیم دیگه اعداد مثل قبل تولید نشه و مثل قبل اعداد 4 3 3 1 رو تولید نکنه .
ب ) وقتی که روی دکمه کلیک کردیم و مثلا عدد 4 رو تولید کرد . سپس روی دکمه دوباره کلیک میکنیم . دیگه همون عدد 4 نیاد و یه عدد دیگه بیاد یا اینکه اگه دوبار یه عدد پشت سر هم تولید شد برای بار دوم عدد رو رد کنه و یه عدد دیگه تولید کنه .

و همین طور از پاسخ دادن به سوالات قبلی نیز از شما متشکرم

shadmehrshadow1
20-05-2010, 11:13
من از طریق کلاس زیر در ویبی 6 ائقات شرعی رو حساب میکردم میشه این کد رو به ویبی 2008 برایم بذارید .یا اصلا یه پروزه محاسبه اوقات شرعی در ویبی 2008 بذارید .


Private lgs()
Private lats()
Private Type Behzad
XX As Double
YY As Double
End Type
Const PI As Double = 3.14159265358979
Private Sub Init()
End Sub
Public Sub ProcessALL(m As Double, d As Double, lg As Double, lat As Double, AzanSOb As String, Toloe As String, AzanZohr As String, Ghoroob As String, Maghreb As String)
Dim ep As Behzad, zr As Double, delta As Double, ha As Double
Dim t1 As Double, t2 As Double, t3 As Double, t4 As Double
m = m + 1
d = d + 1
ep = sun(m, d, 4, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(108, delta, lat)
t1 = rRound(zr - ha, 24)
ep = sun(m, d, t1, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(108, delta, lat)
t1 = rRound(zr - ha, 24)
AzanSOb = hms(t1)
'
' t2= Sun rise
'
ep = sun(m, d, 6, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t2 = rRound(zr - ha, 24)
ep = sun(m, d, t2, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t2 = rRound(zr - ha, 24)
Toloe = hms(t2)
'
' zr=Zohr
'
ep = sun(m, d, 12, lg)
ep = sun(m, d, ep.XX, lg)
zr = ep.XX
AzanZohr = hms(zr)
'
' t2= Sun set
'
ep = sun(m, d, 18, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t3 = rRound(zr + ha, 24)
ep = sun(m, d, t3, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(90.833, delta, lat)
t3 = rRound(zr + ha, 24)
Ghoroob = hms(t3)
'
' t2= Maghreb
'
ep = sun(m, d, 18.5, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(94.3, delta, lat)
t4 = rRound(zr + ha, 24)
ep = sun(m, d, t4, lg)
zr = ep.XX
delta = ep.YY
ha = loc2hor(94.3, delta, lat)
t4 = rRound(zr + ha, 24)
Maghreb = hms(t4)

End Sub
Public Sub coord(citiIndex As Long, X As Double, Y As Double)
X = FrmMain.Combo1.List(citiIndex)
Y = FrmMain.Combo2.List(citiIndex)
End Sub
Private Sub Class_Initialize()
Call Init
End Sub
Private Function sun(m As Double, ByVal d As Double, h As Double, lg As Double) As Behzad
Dim mm As Double, l As Double, lst As Double, e As Double, omega As Double, ep As Double, ed As Double, u As Double
Dim v As Double, theta As Double, delta As Double, alpha As Double, ha As Double, zr As Double
Dim i As Long
If m < 7 Then
d = 31 * (m - 1) + d + h / 24
Else
d = 6 + 30 * (m - 1) + d + h / 24
End If
mm = 74.2023 + 0.98560026 * d
l = -2.75043 + 0.98564735 * d
lst = 8.3162159 + 0.065709824 * Floor(d) + 1.00273791 * 24 * mod2(d, 1) + lg / 15
e = 0.0167065
omega = 4.85131 - 0.052954 * d
ep = 23.4384717 + 0.00256 * cosd(omega)
ed = 180 / PI * e
u = mm
For i = 1 To 4
u = u - (u - ed * sind(u) - mm) / (1 - e * cosd(u))
Next
v = 2 * atand(tand(u / 2) * Sqr((1 + e) / (1 - e)))
theta = l + v - mm - 0.00569 - 0.00479 * sind(omega)
delta = asind(sind(ep) * sind(theta))
'
alpha = 180 / PI * ATan2(cosd(theta), cosd(ep) * sind(theta))
'
If alpha >= 360 Then alpha = alpha - 360
ha = lst - alpha / 15
zr = rRound(h - ha, 24)

sun.XX = zr
sun.YY = delta
End Function
Private Function loc2hor(z As Double, d As Double, p As Double)
loc2hor = acosd((cosd(z) - sind(d) * sind(p)) / cosd(d) / cosd(p)) / 15
End Function
Private Function rRound(X As Double, a As Double)
Dim tmp As Double
tmp = mod2(X, a)
If tmp < 0 Then tmp = tmp + a
rRound = tmp
End Function
Private Function hms(X As Double) As String
Dim h As Double, mp As Double, m As Double, ss As Double
Dim s As String
X = Floor(3600 * X)
h = Floor(X / 3600)
mp = X - 3600 * h
m = Floor(mp / 60)
ss = Floor(mp - 60 * m)

If h < 10 Then s = "0" Else s = ""
s = s & h & ":"
If m < 10 Then s = s & "0"
s = s & m & ":"
If ss < 10 Then s = s & "0"
s = s & ss
hms = s
End Function
Private Function sind(X)
sind = Sin(PI / 180 * X)
End Function
Private Function cosd(X)
cosd = Cos(PI / 180 * X)
End Function
Private Function tand(X)
tand = Tan(PI / 180 * X)
End Function
Private Function atand(X)
atand = Atn(X) * 180 / PI
End Function
Private Function asind(X As Double)
asind = ASin(X) * 180 / PI
End Function
Private Function acosd(X As Double)
acosd = ACos(X) * 180 / PI
End Function
Private Function Floor(X As Double) As Long
Floor = Int(X)
End Function
Private Function ASin(X As Double) As Double
ASin = Atn(X / Sqr(-X * X + 1.01))
End Function
Private Function ACos(X As Double) As Double
ACos = Atn(-X / Sqr(-X * X + 1.01)) + 2 * Atn(1)
End Function
Private Function ATan2(ByVal X As Double, ByVal Y As Double) As Double
On Error Resume Next
If X = 0 Then
If Y = 0 Then
ATan2 = 1 / 0
ElseIf Y > 0 Then
ATan2 = PI / 2
Else
ATan2 = -PI / 2
End If
ElseIf X > 0 Then
If Y = 0 Then
ATan2 = 0
Else
ATan2 = Atn(Y / X)
End If
Else
If Y = 0 Then
ATan2 = PI
Else
ATan2 = (PI - Atn(Abs(Y) / Abs(X))) * Sgn(Y)
End If
End If
End Function
Private Function mod2(a As Double, b As Double) As Double
mod2 = a - (b * Int(a / b))
End Function

عــــلی
20-05-2010, 18:05
خوب پس میشه یه تابع معرفی کنین که تاریخ شمسی رو دریافت کته و تاریخ قمری همون روز رو از نوی Date بده بیرون.
سلام دوست من خود مایکروسافت همچین کلاسی داره نیازی به این همه کد نویسی نیست.
شما میتونین با کد زیر تاریخ تاریخ شمسی رو به میلادی تبدیل کنید.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


و اینکه می خوام در رویداد MouseHover یک کنترل کد زیر رو بذارم.Dim p2 As New System.Drawing.Point(X,Y)در واقع من یه کنترل Tooltip دارم که یه مقدار از نوع System.Drawing.Point که در اونجا نشون داده بشه . و من از کد بالا استفاده کردم.وقتی که مقدار X و Y رو قرار میدم کنترل توول تیپ در نقطه 0 و0 مانیتور نشون داده میشه . میخوام بدونم چه جوری می تونم . نقطه ی X , Y ماوس رو پیدا کنم و به جای X,y کد بالا قرار بدم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


البته در وی بی 2008 چه طور میشه اعداد تصادفی بین 0 تا 6 رو ایجاد کرد با ویزگی های زیر :
الف) هر بار که فرم رو اجرا می کنیم اعداد مثل هم در نیایند .مثلا وقتی فرم اجرا میشه و ما دستور رو در یک دکمه نوشته ایم و وقتی که 4 بار دکمه ی مربوطه رو فشار دادیم اعداد به ترتیب از راست به چپ ایجاد شد . 4 3 3 1
اونوقت وقتی فرم رو بستیم و اجرا رو متوقف کردیم . و دوباره فرم رو اجرا کردیم و 4 بار روی دکمه کلیک کردیم دیگه اعداد مثل قبل تولید نشه و مثل قبل اعداد 4 3 3 1 رو تولید نکنه .

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


ب ) وقتی که روی دکمه کلیک کردیم و مثلا عدد 4 رو تولید کرد . سپس روی دکمه دوباره کلیک میکنیم . دیگه همون عدد 4 نیاد و یه عدد دیگه بیاد یا اینکه اگه دوبار یه عدد پشت سر هم تولید شد برای بار دوم عدد رو رد کنه و یه عدد دیگه تولید کنه .

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق و سربلند باشید.

shadmehrshadow1
20-05-2010, 19:21
خیلی خیلی ممنونم. واقعا ممنونم.

کد اوقات شرعی چی شد . موفق شدید؟

shadmehrshadow1
21-05-2010, 11:49
یه چند تا سوال دیگه هم داشتم :
توی وی بی 6 وقتی میخواستیم دستوراتی که در یک دکمه است به شکل زیر عمل می کردیم .
call CommandButton1_Click
این کار رو توی وی بی 2008 چه طور انجام میدهند ؟


ForeColor لیبل سیاه است وقتی که فرم روی دسکتاپ هست و عکس پس زمینه ی دسکتاپ روشن است لیبل به خوبی دیده می شود ولی به محضاینکه عکس پس زمینه ی دسکتاپ رنگ تیره و یا سیاه قرار گیرد .دیگه نمیشه لیبل رو دید . میخوام ببینم راهی برای حل این مشکل وجود داره


این را هم میتوانید با همان دستورات گرافیکی حل کنید و سعی کنید یک حاشیه هم به متنان بدهید تا تضمین کند همیشه از پسضمینه متمایز خواهدماند.

چه جوری یه حاشیه به متنم بدم.

البته نمیدونم شما اون فایل dll رو دانلود کردید یا نه که کنترل هایی توش بود :


اون کنترل Super Tooltip خوب بود .ولی برای وقتیه که روی یه کنترل مکث کنی. اما من میخوام که یک بالن به همون شکل Super Tooltip از آیکونی که در
کنار ساعت قرار میگیره در بیاد . مثلا آیکونی که با Notify Icon ایجاد میشه .


واسه بالون هم از کنترل Balon tip استفاده کن, نه کنترل Super tooltip
اگه نسخه Trial این مجموعه رو دانلود کرده باشی نمونه پروژه هم همراهش داره.

من اینترنت معمولی دارم حجم اونم زیاد بود نتونستم دانلود کنم.
نحوه اینکه کنترل BalonTip از توی آیکون کنار ساعت بیاد بیرون چه جوریه ؟

عــــلی
21-05-2010, 15:29
سلام.

call CommandButton1_Click

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


چه جوری یه حاشیه به متنم بدم.


Dim gf As System.Drawing.Graphics
Dim bitmap As New Bitmap(label1.Width, label1.Height)
label1.Image = bitmap
gf = System.Drawing.Graphics.FromImage(bitmap)
Dim p As New Pen(Color.Red)
Dim f As Font = New System.Drawing.Font("tahoma", 20)
p.EndCap = System.Drawing.Drawing2D.LineCap.Triangle
gf.DrawString("Salam", f, p.Brush, 0, 0)
p = New Pen(Color.Blue)
p.EndCap = System.Drawing.Drawing2D.LineCap.Triangle
gf.DrawString("Salam", f, p.Brush, 1, 1)


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اصلاً از dll خوشم نمیاد.

نحوه اینکه کنترل BalonTip از توی آیکون کنار ساعت بیاد بیرون چه جوریه ؟
این کنترل خودش توی VS وجود داره.به نام NotifyIcon.
موفق باشید.

عــــلی
21-05-2010, 15:37
کد اوقات شرعی چی شد . موفق شدید؟
این نمونه رو ببین کمکت میکنه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

shadmehrshadow1
21-05-2010, 19:38
خیلی منونم. کمکاتون واقعا به دردم خورد . هنوز اوقات شرعی رو دانلود نکردم ولی ممنونم.
در NotifyIcon نمیشه بالونی که ازش بیرون میاد توش عکس گذاشت به خاطر همین گفتم

چرا من کد زیر رو اجرا میکنم خطا میده:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Text = "2"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button1_Click()
End Sub

عــــلی
21-05-2010, 20:00
سلام.
لطفاً خطاتون رو هم بگید.
ممنونم.

shadmehrshadow1
21-05-2010, 20:11
PublicClass Form1

PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Text = "2"
EndSub
PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Button1_Click()
EndSub
EndClass

خطا :
یک Msgbox باز میشه و :
---------------------------
Microsoft Visual Basic 2008 Express Edition
---------------------------
Visual Studio cannot start debugging because the debug target 'C:\Documents and Settings\Faraz Computer\Local Settings\Application Data\Temporary Projects\WindowsApplication1\bin\Debug\WindowsAppl ication1.exe' is missing. Please build the project and retry, or set the OutputPath and AssemblyName properties appropriately to point at the correct location for the target assembly.
---------------------------
OK
---------------------------

و در قسمت Error List :

Error 1 Argument not specified for parameter 'e' of 'Private Sub Button1_Click(sender As Object, e As System.EventArgs)'. C:\Documents and Settings\Faraz Computer\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 9 9 WindowsApplication1

و
Error 2 Argument not specified for parameter 'sender' of 'Private Sub Button1_Click(sender As Object, e As System.EventArgs)'. C:\Documents and Settings\Faraz Computer\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb 9 9 WindowsApplication1


البته ببخشید چندتا سوال دیگه هم داشتم:

معادل کد ویبی6 زیر در ویبی 2008 :
1-
Private Type Test
XX As Double
YY As Double
End Type
2- ما در کلاس های ویبی6 این دستور رو داشتیم . در ویبی 2008 به جای اون از چی استفاده میشه
Private Sub Class_Initialize()
End Sub

3- در ساخت کامپوننت میخوام کاری کنم که وقتی دستور زیر رو نوشتیم 4 مقدار دیده بشه :
ComponentName.Level
یعنی وقتی دستور بالا رو نوشتیم و بعدش نقطه زدیم دوباره یه منو باز بشه که 4 تا زیر مجموعه به نام های Level1 ,Level2,Level3,Level4 رو داشته باشه.
مثلا وقتی دستور زیر رو مینویسم
Date.Today
وقتی یه نقطه بزنیم بازم چند گزینه وجود داره. میخوام در ساخت کامپوننتم یه چنین چیزی رو درست کنم.
اگه میشه کدی رو بذارید مربوط به ویبی 2008 نه توی C .

4 - در وی بی 2008 چه طور میشه اعداد تصادفی بین 0 تا 6 رو ایجاد کرد با ویزگی های زیر :
وقتی که روی دکمه کلیک کردیم و مثلا عدد 4 رو تولید کرد . سپس روی دکمه دوباره کلیک میکنیم . دیگه همون عدد 4 نیاد و یه عدد دیگه بیاد یا اینکه اگه دوبار یه عدد پشت سر هم تولید شد برای بار دوم عدد رو رد کنه و یه عدد دیگه تولید کنه .

فکر کنم منظورم رو درست متوجه نشده اید .
کد زیر رو در فرمتون قرار بدید و همین طور یک ListBox با 6 یا 7 مقدار . این کد عددی رو ایجاد میکنه و اگه 5 باشه خانه پنجم از لیست باکس رو انتخاب میکنه و اگه تکراری باشه باز هم خانه انتخاب شده در لیست باکس همان مقدار قبلی باقی می مونه . برای رفع این مشکل چه کار باید کرد.
Dim rnd As New Random
Dim I As Integer = -1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim C As Integer = rnd.Next(0, 7)
If I <> C Then
Label1.Text = C.ToString()
I = C
ListBox1.SelectedIndex = Label1.Text
End If
5 - چه طور میشه کاری کرد که وقتی روی LinkLabel کلیک می کنیم . پنجره اینترنت باز بشه و به آدرسی که ما مشخص میکنیم بره ؟
6 - چه طوری می تونیم یه فایل فلش رو روی فرم قرار بدیم . و اینکه اگه سیستمی فلش نداشت مشکلی در اجرا پیش نیاد. و خطا نده.
7 - من در ویبی 2008 یه Function دارم که خط اول درون فانکشن کد زیر است :
If PicturePath Is Nothing Then Exit Function
که زیر Exit Function یک خط سبز کشیده شده و به نظر میاد Error مربوط به اون باشه که خطایی را که در Error List میده :
Function 'Change' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used
به خاطر این خطا هرکاری که میکنم اعمال نمیشه و اول باید این خطا رو برطرف کنم. مشکل از کجاست ؟ چه جوری برطرف می شه ؟
8- - چه جوری میتونم فاصله دوتا ساعت رو باهم به دست به آورم . مثلا:
از ساعت 17:01 شب تا ساعت 7:11 فردا چند ساعت طول میکشد . که جواب میشه : 14:10
و اینکه چه جوری میشه ساعت 05:53:29 رو به ساعت 05:53 تبدیل کرد .