|
hi guys i want the logic basically i am making a date sheet of university in vb. here i have date and four time slots against one date and correspondig their room allocation with couse please give me the logic how can i complete this task. with collection or three dimension array.
Regards
Msaqlain
|
|
|
|
|
First, you're going to have to show us that you actually attempted to do something on this homework assignment. We're not here to do your homework for you, just push you in the right direction.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
I have made an instance of the BookSale Object after the mnuCalculate
but when I try to access any properties of mBookSale in a a new event sub procedure I get the message mBookSale is not declared.
Private Sub mnuCalcSale_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCalcSale.Click<br />
<br />
Dim mBookSale As New BookSale<br />
mBookSale = New BookSale<br />
With mBookSale<br />
.Title = txtTitle.Text<br />
.Quantity = CInt(txtQuantity.Text)<br />
.Price = CDec(txtPrice.Text)<br />
End With<br />
lblExtendedPrice.Text = FormatNumber(mBookSale.ExtendedPrice)<br />
End Sub<br />
<br />
the above is all ok, below does not work! BookSale is a Class Module.
Private Sub mnuSummary_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSummary.Click<br />
<br />
<br />
strMessage = "sales Total " & FormatNumber(mBookSale.SalesTotal)<br />
<br />
MessageBox.Show(strMessage, "Summary Totals", MessageBoxButtons.OK, MessageBoxIcon.Hand)<br />
<br />
End Sub
When I try to access mBookSale.SalesTotal I get mBookSale is not declared.
the Class module is listed below.
Public Class BookSale<br />
Private mstrTitle As String<br />
Private mintQuantity As Integer<br />
Private mdecPrice As Decimal<br />
Private Shared mdecSalesTotal As Decimal<br />
Private Shared mintSalesCount As Integer<br />
#Region "Properties"<br />
<br />
<br />
<br />
<br />
' below code to set and return or'GET' Title property<br />
'are properties 'PUBLIC' by default????????<br />
Public Property Title() As String<br />
Get<br />
Title = mstrTitle<br />
End Get<br />
Set(ByVal Value As String)<br />
mstrTitle = Value<br />
End Set<br />
<br />
End Property<br />
Public Property Quantity() As Integer<br />
Get<br />
Quantity = mintQuantity<br />
<br />
End Get<br />
Set(ByVal Value As Integer)<br />
If Value >= 0 Then<br />
mintQuantity = Value<br />
End If<br />
End Set<br />
End Property<br />
Public Property Price() As Decimal<br />
Get<br />
Price = mdecPrice<br />
End Get<br />
Set(ByVal Value As Decimal)<br />
If Value >= 0 Then<br />
mdecPrice = Value<br />
End If<br />
End Set<br />
End Property<br />
Public Function ExtendedPrice() As Decimal<br />
Dim decExtendedPrice As Decimal<br />
decExtendedPrice = mdecPrice * mintQuantity<br />
Return decExtendedPrice<br />
mdecSalesTotal += decExtendedPrice<br />
mintSalesCount += 1<br />
End Function<br />
Public Shared ReadOnly Property SalesTotal() As Decimal<br />
Get<br />
If mdecSalesTotal >= 1 Then<br />
SalesTotal = mdecSalesTotal<br />
Else<br />
SalesTotal = 99.99D<br />
End If<br />
<br />
End Get<br />
End Property<br />
Public Shared ReadOnly Property SalesCount() As Integer<br />
Get<br />
SalesCount = mintSalesCount<br />
<br />
End Get<br />
End Property<br />
#End Regio
|
|
|
|
|
The reason you get this error is that mBookSale is indeed not declared in the mnuSummary_Click() event handler.
You have declared it in mnuCalcSale_Click() but it is only has local scope within that event - it is destroyed when mnuCalcSale_Click() exits.
If you want the mBookSale object to be available to all events, you'll need to declare it at a higher scope level (i.e. within the class that contains the event handlers).
...Steve
1. quod erat demonstrandum
2. "Give a man a fish and you've fed him for a day. Teach him how to fish and you've fed him for life." I read that somewhere once
|
|
|
|
|
Dear Steve,
Thanks for the reply.
I was coming to that conclusion.
I was getting confused with scope after an exercise where the objects were created in a frmLoad_ Event(local scope).
To populate a ListBox using Item.Add(NewObject(x,y,z) .
Then in a new procedure --> ListBox_Click Event <-- the object was addressed via its method ListBox.SelectedItem.GetPrice
This is still a bit murky for me....but I think I see that the ListBox contains the actual object so can be directly referenced.
Thanks Mick..
Am I still asleep
|
|
|
|
|
I won't paste the actual code, but I'll duplicate the circumstances
Class UI
Sub CallingSub()
dim strOne as String = Nothing
dim strTwo as String = Nothing
if txtOne.Text <> "" then
strOne = txtOne.Text
end if
if txtTwo.Text <> "" then
strTwo = txtTwo.Text
end if
dim objBusiness as Business
objBusiness.CallMe(strOne, strTwo)
End Sub
End Class
Class Business
Sub CallMe(ByVal strOne as String, ByVal strTwo as String)
....
End Sub
End Class
strOne in UI is Nothing when I pass it (this has been verified in debugging).
I put a watch on strOne in Business. As soon as Business.CallMe is called, strOne in Business.CallMe is equal to "-32768" as a string. If I pass strTwo as Nothing, it remains Nothing.
What is going on here?
|
|
|
|
|
jbeckh2 wrote: I won't paste the actual code, but I'll duplicate the circumstances
Paste the actual code in use. Not the whoel thing, just the relevant parts. We've been burned too many times by "translated" code that works perfectly and is only slightly different from the actual code that's won't work.
But, I put together the exact same "circumstances" and the code works as expected. Both values come up as Nothing .
What version of VB are you using?
Dave Kreskowiak
Microsoft MVP - Visual Basic
-- modified at 15:11 Thursday 13th April, 2006
|
|
|
|
|
I actually found the problem. I referenced the wrong variable.
|
|
|
|
|
See what I mean?
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
I have a simple game i am writing. I want a sound to play automatically when a form displays. I imbedded WMP on the form. If you click it, a window displays allowing the user to choose a sound, I want it to play as soon as the form displays withou any interaction from the user.
Bill
|
|
|
|
|
AxWindowsMediaPlayer1.Ctlcontrols.play()
You can find more about Media Players automation interface here[^].
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi
I am trying to convert a systemtime to a normal time. I am using the following code I found in a C# bit, converted it to vb.net
C#
private static DateTime SystemTimeToDateTime( ref SYSTEMTIME st )
{
FILETIME ft = new FILETIME();
NativeMethods.SystemTimeToFileTime( ref st, out ft );
DateTime dt = new DateTime( ( ( (long) ft.dwHighDateTime ) << 32 ) | (uint) ft.dwLowDateTime );
return dt;
}
VB.NET
Private Shared Function SystemTimeToDateTime(ByRef st As SYSTEMTIME) As DateTime
Dim ft As FILETIME = New FILETIME
NativeMethods.SystemTimeToFileTime(st, ft)
Dim dt As DateTime
dt = New DateTime(((CType(ft.dwHighDateTime, Long)) << 32) + CType(ft.dwLowDateTime, Integer))
Return dt
End Function
It all goes fine to the part CType(ft.dwLowDateTime, Integer) as in vb.net the filetime is returned as integer and not as int as it is done in C#. C# to VB converter converted the | into or. I found more articles use + so I changed it as well.
But as you can guess it doesn't work and I can't find any non C# stuff anywhere regarding this. So I gues s there is another way of doing or my code is just screwed. Can you help or suggest anything, except reprogramming everything in C# )
Cheers David
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
I haven't tested it, but it should be more like this:
Private Shared Function SystemTimeToDateTime(ByRef st As SYSTEMTIME) As DateTime
Dim ft As FILETIME = New FILETIME
NativeMethods.SystemTimeToFileTime(st, ft)
Dim dt As DateTime
dt = New DateTime(((CType(ft.dwHighDateTime, Long)) << 32) Or CType(ft.dwLowDateTime, UInt32))
Return dt
End Function
First, at the end of this equation, convert the value of ft.dwLowDateTime to a UNSIGNED Integer, not a signed integer. This can make all the difference in the world. On top of that, you can't add this value to the front of the equation. All kinds of addition carry overs will screw up the results. You must use a bit-wise OR, just like in the original C# code.
But, of course, the results will depend on the correct definition of the FILETIME and SYSTEMTIME structures. Hopefully, you didn't interchange signed integers for unsigned??
Dave Kreskowiak
Microsoft MVP - Visual Basic
-- modified at 12:39 Thursday 13th April, 2006
|
|
|
|
|
Thanks for the response.
I am taking the filetime from the System.Runtime.InteropServices. I am not defining my own structure. However when I use CType(ft.dwLowDateTime, UInt32) I get the error message that I cannot convert from integer to UInt32 for some reason VB assumes the ft.dwLowDateTime is an integer, as in C# this doesn't seem to be the problem. How can I change that?
Cheers
David
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
I finally found the code you're trying to convert by hand. I got this to work:
Private Declare Auto Function SystemTimeToFileTime Lib "kernel32" ( _
<[In]()> ByRef st As SYSTEMTIME, _
ByRef lpFileTime AS FILETIME) _
As Boolean
<StructLayout(LayoutKind.Sequential)> _
Private Structure SYSTEMTIME
Public wYear As UInt16
Public wMonth As UInt16
Public wDayOfWeek As UInt16
Public wDay As UInt16
Public wHour As UInt16
Public wMinute As UInt16
Public wSecond As UInt16
Public wMillisecond As UInt16
End Structure
.
.
.
Private Sub Button1_Click(blah, blah) Handles Button1.Click
Dim st As SYSTEMTIME
With st
.wDay = 14
.wMonth = 4
.wYear = 3606 ' 2006 + 1600
.wHour = 14
.wMinute = 15
.wSecond = 31
End With
Dim ft As New FILETIME
SystemTimeToFileTime(st, ft)
Dim dt As New DateTime(((CType(ft.dwHighDateTime, Long)) << 32) Or _
CType(ft.dwLowDateTime, UInt32))
Debug.WriteLine(dt)
End Sub
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
I am getting imediate troubles with .wDay = 14 saying that that cannot be converted to Uint16. Could it be that I need to change one of these option setting. Forgot the name, but as you used to have option strict etc. Be the way thanks for the help, much appreciated. Just one other thing what does << mean can't find that in the help file as it is an illegal entry there.
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
I'm using VB 2005, and you're not. That's why the problems...
"<<" is a bit-wise shift operator that finally appeared (many years too late!) in 2005. To get the same effect using math, you need to multiply the value by 2^(number of bits to shift left). Sooooo, the same operation can be done like this:
Dim dt As New DateTime(((CType(ft.dwHighDateTime, Long)) * (2 ^ 32) Or CType(ft.dwLowDateTime, UInt32))
Because of the math, it's quite a bit slower, but it does the same thing.
As for the other problem, IIRC, since the values involved are small, you can get away with changing the data types in the SYSTEMTIME structure to Int16 and it'll still work.
<StructLayout(LayoutKind.Sequential)> _
Private Structure SYSTEMTIME
Public wYear As Int16
Public wMonth As Int16
Public wDayOfWeek As Int16
Public wDay As Int16
Public wHour As Int16
Public wMinute As Int16
Public wSecond As Int16
Public wMillisecond As Int16
End Structure
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Then I still have the problem that I cannot convert the dwLowDateTime to Uint32. As in the original problem. The thing I don't get is that this convertion works fine for C# and vb.net
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
OK. You can change that UInt32 to Long an it'll work.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Hi,
Tried this, assuming that is what you meant ...
Dim dt As DateTime = New DateTime(((CType(ft.dwHighDateTime, Long)) << 32) Or CType(ft.dwLowDateTime, Long))
But then I get the exception message:
"Ticks must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks.
Parameter name: ticks"
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
Hmmmm...I never got that message in testing. What's the value of the High and Low in ft when it fails? Even better, also, what's the values in st before the call to SystemTimeToFileTime?
Dave Kreskowiak
Microsoft MVP - Visual Basic
-- modified at 18:50 Thursday 13th April, 2006
|
|
|
|
|
Here are the value for st :
wDay: 31
wDayOfWeek: 5
wHour: 23
wMilliseconds: 0
wMinute: 0
wMonth: 12
wSecond: 0
wYear: 3604
whith wich values are you testing?
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
OK. This should do it. The problem is that the bitwise math isn't working as it should because one of the value types in the FILETIME structure isn't what it appeared to be.
Dim dt As New DateTime((ft.dwHighDateTime * (2 ^ 32)) + ft.dwLowDateTime)
I'd beat the snot out of this code before putting it into production.
Dave Kreskowiak
Microsoft MVP - Visual Basic
-- modified at 19:42 Thursday 13th April, 2006
|
|
|
|
|
Hi Dave,
Fixed it in a more convential way ... :
Private Shared Function SystemTimeToDateTime(ByRef st As SYSTEMTIME) As DateTime
Dim dt As DateTime
Dim dtFormat As String
Dim en As New CultureInfo("en-GB")
dtFormat = "dd/MM/yyyy HH:mm"
With st
dt = DateTime.ParseExact( _
Format$(.wDay, "00") & "/" & _
Format$(.wMonth, "00") & "/" & _
Format$(.wYear - 1600) & " " & _
Format$(.wHour, "00") & ":" & _
Format$(.wMinute, "00"), dtFormat, en.DateTimeFormat) ' & ":" & _
' Format$(.wSecond, "00"), dtFormat, en.DateTimeFormat)
End With
Return dt
End Function
Gues it is a bit less efficient, not sure how much though.
Your remark about the code and the snot was that just about this problem or also about the rest of the code. If so could you give me some pointers, guess it is never too late to learn. )
Cheers
David
Think, try, think, think, try, think, think, think, try, ASK, think, try, advance on step and start over...
|
|
|
|
|
Hi How can I open and read msg file information such as from, to, subject, location, when for appointment and body programmatically?
i tried to use redemption but I'm missing some information such as location and when for appointment.
how many type of attachments in email?
When I try to read email attachment, I would like to know what type of attachments are?
|
|
|
|
|