From b304e262dc91b69c41566d23cd8d5efe97c1f992 Mon Sep 17 00:00:00 2001 From: Apress Date: Wed, 12 Oct 2016 00:48:54 +0100 Subject: [PATCH] First commit --- 9781590598221.jpg | Bin 0 -> 10600 bytes Code/Chapter 1/Calc.cs | 26 + Code/Chapter 1/Calc.vb | 21 + Code/Chapter 1/ReadMe.txt | 8 + Code/Chapter 10/Boxing/Boxing.sln | 20 + Code/Chapter 10/Boxing/Boxing.suo | Bin 0 -> 14848 bytes Code/Chapter 10/Boxing/Boxing.vbproj | 134 + Code/Chapter 10/Boxing/Boxing.vbproj.user | 17 + .../Boxing/My Project/Application.Designer.vb | 13 + .../Boxing/My Project/Application.myapp | 10 + .../Boxing/My Project/AssemblyInfo.vb | 35 + .../Boxing/My Project/Resources.Designer.vb | 63 + .../Boxing/My Project/Resources.resx | 117 + .../Boxing/My Project/Settings.Designer.vb | 73 + .../Boxing/My Project/Settings.settings | 7 + Code/Chapter 10/Boxing/Program.vb | 52 + Code/Chapter 10/CollectionTypes/Car.vb | 104 + .../CollectionTypes/CollectionTypes.sln | 20 + .../CollectionTypes/CollectionTypes.suo | Bin 0 -> 16896 bytes .../CollectionTypes/CollectionTypes.vbproj | 112 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../CollectionTypes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CollectionTypes/PetNameComparer.vb | 13 + Code/Chapter 10/CollectionTypes/Program.vb | 102 + Code/Chapter 10/CollectionTypes/Radio.vb | 13 + .../CustomGenericCollection/CarCollection.vb | 45 + .../CustomGenericCollection.sln | 20 + .../CustomGenericCollection.suo | Bin 0 -> 29184 bytes .../CustomGenericCollection.vbproj | 137 + .../CustomGenericCollection.vbproj.user | 17 + .../ExampleConstraints.vb | 31 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CustomGenericCollection/Program.vb | 29 + .../CustomGenericCollection/SimpleCars.vb | 29 + .../GenericDelegate/GenericDelegate.sln | 20 + .../GenericDelegate/GenericDelegate.suo | Bin 0 -> 23552 bytes .../GenericDelegate/GenericDelegate.vbproj | 134 + .../GenericDelegate.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../GenericDelegate/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 10/GenericDelegate/Program.vb | 62 + .../GenericInterface/GenericInterface.sln | 20 + .../GenericInterface/GenericInterface.suo | Bin 0 -> 23552 bytes .../GenericInterface/GenericInterface.vbproj | 134 + .../GenericInterface.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 10/GenericInterface/Program.vb | 44 + .../GenericStructure/GenericStructure.sln | 20 + .../GenericStructure/GenericStructure.suo | Bin 0 -> 20480 bytes .../GenericStructure/GenericStructure.vbproj | 135 + .../GenericStructure.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 10/GenericStructure/Point.vb | 33 + Code/Chapter 10/GenericStructure/Program.vb | 43 + .../GenericSwapMethod/GenericSwapMethod.sln | 20 + .../GenericSwapMethod/GenericSwapMethod.suo | Bin 0 -> 16896 bytes .../GenericSwapMethod.vbproj | 134 + .../GenericSwapMethod.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 10/GenericSwapMethod/Program.vb | 74 + .../My Project/Application.Designer.vb | 13 + .../NullableData/My Project/Application.myapp | 10 + .../NullableData/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../NullableData/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../NullableData/My Project/Settings.settings | 7 + Code/Chapter 10/NullableData/NullableData.sln | 20 + Code/Chapter 10/NullableData/NullableData.suo | Bin 0 -> 25088 bytes .../NullableData/NullableData.vbproj | 134 + .../NullableData/NullableData.vbproj.user | 17 + Code/Chapter 10/NullableData/Program.vb | 89 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SimpleGenerics/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleGenerics/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 10/SimpleGenerics/Program.vb | 28 + .../SimpleGenerics/SimpleGenerics.sln | 20 + .../SimpleGenerics/SimpleGenerics.suo | Bin 0 -> 16384 bytes .../SimpleGenerics/SimpleGenerics.vbproj | 134 + .../SimpleGenerics/SimpleGenerics.vbproj.user | 17 + .../StronglyTypedCollections/Car.vb | 6 + .../StronglyTypedCollections/CarCollection.vb | 41 + .../IntegerCollection.vb | 41 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../PeopleCollection.vb | 41 + .../StronglyTypedCollections/Person.vb | 22 + .../StronglyTypedCollections/Program.vb | 43 + .../StronglyTypedCollections.sln | 20 + .../StronglyTypedCollections.suo | Bin 0 -> 25088 bytes .../StronglyTypedCollections.vbproj | 139 + .../StronglyTypedCollections.vbproj.user | 17 + Code/Chapter 11/CarDelegate/Car.vb | 79 + Code/Chapter 11/CarDelegate/CarDelegate.sln | 20 + Code/Chapter 11/CarDelegate/CarDelegate.suo | Bin 0 -> 20992 bytes .../Chapter 11/CarDelegate/CarDelegate.vbproj | 99 + .../My Project/Application.Designer.vb | 13 + .../CarDelegate/My Project/Application.myapp | 10 + .../CarDelegate/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CarDelegate/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CarDelegate/My Project/Settings.settings | 7 + Code/Chapter 11/CarDelegate/Program.vb | 40 + Code/Chapter 11/CarDelegate/Radio.vb | 12 + Code/Chapter 11/CarDelegate/UpgradeLog.XML | 11 + Code/Chapter 11/CarEvent/Car.vb | 51 + Code/Chapter 11/CarEvent/CarEvent.sln | 20 + Code/Chapter 11/CarEvent/CarEvent.suo | Bin 0 -> 20992 bytes Code/Chapter 11/CarEvent/CarEvent.vbproj | 99 + Code/Chapter 11/CarEvent/CarEvent.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../CarEvent/My Project/Application.myapp | 10 + .../CarEvent/My Project/AssemblyInfo.vb | 35 + .../CarEvent/My Project/Resources.Designer.vb | 63 + .../CarEvent/My Project/Resources.resx | 117 + .../CarEvent/My Project/Settings.Designer.vb | 73 + .../CarEvent/My Project/Settings.settings | 7 + Code/Chapter 11/CarEvent/Program.vb | 25 + Code/Chapter 11/CarEvent/Radio.vb | 12 + Code/Chapter 11/CustomEvent/Car.vb | 32 + Code/Chapter 11/CustomEvent/CarEventArgs.vb | 11 + Code/Chapter 11/CustomEvent/CustomEvent.sln | 20 + Code/Chapter 11/CustomEvent/CustomEvent.suo | Bin 0 -> 22528 bytes .../Chapter 11/CustomEvent/CustomEvent.vbproj | 99 + .../CustomEvent/CustomEvent.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../CustomEvent/My Project/Application.myapp | 10 + .../CustomEvent/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CustomEvent/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CustomEvent/My Project/Settings.settings | 7 + Code/Chapter 11/CustomEvent/Program.vb | 28 + .../CustomEventWithCustomDelegate/Car.vb | 35 + .../CarEventArgs.vb | 11 + .../CustomEventWithCustomDelegate.sln | 20 + .../CustomEventWithCustomDelegate.suo | Bin 0 -> 24576 bytes .../CustomEventWithCustomDelegate.vbproj | 99 + .../CustomEventWithCustomDelegate.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CustomEventWithCustomDelegate/Program.vb | 24 + Code/Chapter 11/DynamicCarEvents/Car.vb | 51 + .../DynamicCarEvents/DynamicCarEvents.sln | 20 + .../DynamicCarEvents/DynamicCarEvents.suo | Bin 0 -> 23040 bytes .../DynamicCarEvents/DynamicCarEvents.vbproj | 98 + .../DynamicCarEvents.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 11/DynamicCarEvents/Program.vb | 25 + Code/Chapter 11/DynamicCarEvents/Radio.vb | 12 + .../DelegateNoArgs.vb | 18 + .../LambdaExpressionsMultipleParams.sln | 20 + .../LambdaExpressionsMultipleParams.suo | Bin 0 -> 25600 bytes .../LambdaExpressionsMultipleParams.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Program.vb | 40 + Code/Chapter 11/PrimAndProperEvent/Car.vb | 51 + .../PrimAndProperEvent/CarEventArgs.vb | 11 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../PrimAndProperEvent/PrimAndProperEvent.sln | 20 + .../PrimAndProperEvent/PrimAndProperEvent.suo | Bin 0 -> 22016 bytes .../PrimAndProperEvent.vbproj | 100 + .../PrimAndProperEvent.vbproj.user | 5 + Code/Chapter 11/PrimAndProperEvent/Program.vb | 32 + Code/Chapter 11/PrimAndProperEvent/Radio.vb | 12 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SimpleDelegate/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleDelegate/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 11/SimpleDelegate/Program.vb | 49 + .../SimpleDelegate/SimpleDelegate.sln | 20 + .../SimpleDelegate/SimpleDelegate.suo | Bin 0 -> 17920 bytes .../SimpleDelegate/SimpleDelegate.vbproj | 97 + .../SimpleDelegate/SimpleDelegate.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleLambdaExpressions/Program.vb | 52 + .../SimpleLambdaExpressions.sln | 20 + .../SimpleLambdaExpressions.suo | Bin 0 -> 21504 bytes .../SimpleLambdaExpressions.vbproj | 109 + Code/Chapter 12/Casting/Casting.sln | 20 + Code/Chapter 12/Casting/Casting.suo | Bin 0 -> 15872 bytes Code/Chapter 12/Casting/Casting.vbproj | 134 + Code/Chapter 12/Casting/Casting.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../Casting/My Project/Application.myapp | 10 + .../Casting/My Project/AssemblyInfo.vb | 35 + .../Casting/My Project/Resources.Designer.vb | 63 + .../Casting/My Project/Resources.resx | 117 + .../Casting/My Project/Settings.Designer.vb | 73 + .../Casting/My Project/Settings.settings | 7 + Code/Chapter 12/Casting/Program.vb | 63 + .../CustomConversions/CustomConversions.sln | 20 + .../CustomConversions/CustomConversions.suo | Bin 0 -> 17920 bytes .../CustomConversions.vbproj | 137 + .../CustomConversions.vbproj.user | 16 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 12/CustomConversions/MyTypes.vb | 62 + Code/Chapter 12/CustomConversions/Program.vb | 40 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../OverloadedOps/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../OverloadedOps/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 12/OverloadedOps/MyPoint.vb | 96 + .../OverloadedOps/OverloadedOps.sln | 20 + .../OverloadedOps/OverloadedOps.suo | Bin 0 -> 15872 bytes .../OverloadedOps/OverloadedOps.vbproj | 110 + Code/Chapter 12/OverloadedOps/Program.vb | 54 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 12/RefTypeValTypeParams/Person.vb | 15 + .../RefTypeValTypeParams/Program.vb | 42 + .../RefTypeValTypeParams.sln | 20 + .../RefTypeValTypeParams.suo | Bin 0 -> 18432 bytes .../RefTypeValTypeParams.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../ValAndRef/My Project/Application.myapp | 10 + .../ValAndRef/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../ValAndRef/My Project/Resources.resx | 117 + .../ValAndRef/My Project/Settings.Designer.vb | 73 + .../ValAndRef/My Project/Settings.settings | 7 + Code/Chapter 12/ValAndRef/MyPoint.vb | 98 + Code/Chapter 12/ValAndRef/Program.vb | 37 + Code/Chapter 12/ValAndRef/ValAndRef.sln | 20 + Code/Chapter 12/ValAndRef/ValAndRef.suo | Bin 0 -> 16384 bytes Code/Chapter 12/ValAndRef/ValAndRef.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ValTypeContainingRefType/MyRectangle.vb | 12 + .../ValTypeContainingRefType/Program.vb | 29 + .../ValTypeContainingRefType/ShapeInfo.vb | 6 + .../ValTypeContainingRefType.sln | 20 + .../ValTypeContainingRefType.suo | Bin 0 -> 17920 bytes .../ValTypeContainingRefType.vbproj | 111 + .../AnonymousTypes/AnonymousTypes.sln | 20 + .../AnonymousTypes/AnonymousTypes.suo | Bin 0 -> 18944 bytes .../AnonymousTypes/AnonymousTypes.vbproj | 115 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../AnonymousTypes/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../AnonymousTypes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 13/AnonymousTypes/Program.vb | 76 + .../ExtensionMethods/ExtensionMethods.sln | 20 + .../ExtensionMethods/ExtensionMethods.suo | Bin 0 -> 17920 bytes .../ExtensionMethods/ExtensionMethods.vbproj | 117 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ExtensionMethods/MyExtensions.vb | 59 + .../ExtensionMethods/NamespaceTestClass.vb | 18 + Code/Chapter 13/ExtensionMethods/Project.vb | 44 + .../ImplicitDataTypes/ImplicitDataTypes.sln | 20 + .../ImplicitDataTypes/ImplicitDataTypes.suo | Bin 0 -> 16384 bytes .../ImplicitDataTypes.vbproj | 117 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 13/ImplicitDataTypes/Program.vb | 96 + .../InterfaceExtensions.sln | 20 + .../InterfaceExtensions.suo | Bin 0 -> 17408 bytes .../InterfaceExtensions.vbproj | 115 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 13/InterfaceExtensions/Program.vb | 37 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyExtensionsLibrary/MyExtensions.vb | 45 + .../MyExtensionsLibrary.sln | 20 + .../MyExtensionsLibrary.suo | Bin 0 -> 16384 bytes .../MyExtensionsLibrary.vbproj | 113 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyExtensionsLibraryClient.sln | 20 + .../MyExtensionsLibraryClient.suo | Bin 0 -> 18432 bytes .../MyExtensionsLibraryClient.vbproj | 119 + .../MyExtensionsLibraryClient.vbproj.user | 5 + .../MyExtensionsLibraryClient/Program.vb | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ObjectInitializers/ObjectInitializers.sln | 20 + .../ObjectInitializers/ObjectInitializers.suo | Bin 0 -> 19456 bytes .../ObjectInitializers.vbproj | 117 + Code/Chapter 13/ObjectInitializers/Point.vb | 45 + Code/Chapter 13/ObjectInitializers/Program.vb | 41 + .../ObjectInitializers/Rectangle.vb | 26 + .../FunWithLinqExpressions.sln | 20 + .../FunWithLinqExpressions.suo | Bin 0 -> 17920 bytes .../FunWithLinqExpressions.vbproj | 115 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../FunWithLinqExpressions/Program.vb | 179 + .../LinqOverArray/LinqOverArray.sln | 20 + .../LinqOverArray/LinqOverArray.suo | Bin 0 -> 15360 bytes .../LinqOverArray/LinqOverArray.vbproj | 109 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../LinqOverArray/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../LinqOverArray/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 14/LinqOverArray/Program.vb | 79 + Code/Chapter 14/LinqOverArrayList/Car.vb | 6 + .../LinqOverArrayList/LinqOverArrayList.sln | 20 + .../LinqOverArrayList/LinqOverArrayList.suo | Bin 0 -> 17408 bytes .../LinqOverArrayList.vbproj | 114 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 14/LinqOverArrayList/Program.vb | 44 + Code/Chapter 14/LinqOverCustomObjects/Car.vb | 6 + .../LinqOverCustomObjects.sln | 20 + .../LinqOverCustomObjects.suo | Bin 0 -> 17408 bytes .../LinqOverCustomObjects.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../LinqOverCustomObjects/Program.vb | 44 + .../LinqRetValues/LinqRetValues.sln | 20 + .../LinqRetValues/LinqRetValues.suo | Bin 0 -> 17920 bytes .../LinqRetValues/LinqRetValues.vbproj | 115 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../LinqRetValues/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../LinqRetValues/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 14/LinqRetValues/Program.vb | 60 + .../LinqUsingEnumerable.sln | 20 + .../LinqUsingEnumerable.suo | Bin 0 -> 18432 bytes .../LinqUsingEnumerable.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 14/LinqUsingEnumerable/Program.vb | 58 + .../LinqUsingEnumerable/VeryComplexQuery.vb | 30 + .../AppConfigReaderApp/AppConfigReaderApp.sln | 20 + .../AppConfigReaderApp/AppConfigReaderApp.suo | Bin 0 -> 15872 bytes .../AppConfigReaderApp.vbproj | 98 + .../AppConfigReaderApp.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 15/AppConfigReaderApp/Program.vb | 18 + Code/Chapter 15/AppConfigReaderApp/app.config | 7 + .../CSharpCarClient/CSharpCarClient.csproj | 93 + .../CSharpCarClient.csproj.user | 17 + .../CSharpCarClient/CSharpCarClient.sln | 20 + .../CSharpCarClient/CSharpCarClient.suo | Bin 0 -> 19968 bytes .../CSharpCarClient/PerformanceCar.cs | 16 + Code/Chapter 15/CSharpCarClient/Program.cs | 30 + .../Properties/AssemblyInfo.cs | 33 + Code/Chapter 15/CarLibrary/Car.vb | 77 + Code/Chapter 15/CarLibrary/CarLibrary.sln | 20 + Code/Chapter 15/CarLibrary/CarLibrary.suo | Bin 0 -> 22016 bytes Code/Chapter 15/CarLibrary/CarLibrary.vbproj | 137 + .../CarLibrary/CarLibrary.vbproj.user | 17 + Code/Chapter 15/CarLibrary/DerivedCars.vb | 40 + .../My Project/Application.Designer.vb | 13 + .../CarLibrary/My Project/Application.myapp | 10 + .../CarLibrary/My Project/AssemblyInfo.vb | 36 + .../My Project/Resources.Designer.vb | 63 + .../CarLibrary/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CarLibrary/My Project/Settings.settings | 7 + Code/Chapter 15/CarLibrary/MyTestKeyPair.snk | Bin 0 -> 596 bytes .../CarLibrary/Version 1.0.0.0/CarLibrary.dll | Bin 0 -> 24576 bytes .../CodeBaseClient/CodeBaseClient.sln | 20 + .../CodeBaseClient/CodeBaseClient.suo | Bin 0 -> 26624 bytes .../CodeBaseClient/CodeBaseClient.vbproj | 139 + .../CodeBaseClient/CodeBaseClient.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../CodeBaseClient/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CodeBaseClient/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 15/CodeBaseClient/Program.vb | 13 + Code/Chapter 15/CodeBaseClient/app.config | 10 + Code/Chapter 15/MultifileAssembly/Client.vb | 13 + .../MultifileAssembly/helicopter.vb | 11 + Code/Chapter 15/MultifileAssembly/ufo.vb | 11 + Code/Chapter 15/MyCodeLibrary/Class1.vb | 26 + Code/Chapter 15/MyCodeLibrary/Class2.vb | 20 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../MyCodeLibrary/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../MyCodeLibrary/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyCodeLibrary/MyCodeLibrary.sln | 20 + .../MyCodeLibrary/MyCodeLibrary.suo | Bin 0 -> 18432 bytes .../MyCodeLibrary/MyCodeLibrary.vbproj | 133 + .../MyCodeLibrary/MyCodeLibrary.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 15/SharedCarLibClient/Program.vb | 13 + .../SharedCarLibClient/SharedCarLibClient.sln | 20 + .../SharedCarLibClient/SharedCarLibClient.suo | Bin 0 -> 23552 bytes .../SharedCarLibClient.vbproj | 139 + .../SharedCarLibClient.vbproj.user | 17 + Code/Chapter 15/SharedCarLibClient/app.config | 10 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../Vb2008CarClient/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 15/Vb2008CarClient/Program.vb | 17 + .../Vb2008CarClient/Vb2008CarClient.sln | 20 + .../Vb2008CarClient/Vb2008CarClient.suo | Bin 0 -> 22528 bytes .../Vb2008CarClient/Vb2008CarClient.vbproj | 138 + .../Vb2008CarClient.vbproj.user | 17 + .../AttributedCarLibrary.sln | 20 + .../AttributedCarLibrary.suo | Bin 0 -> 20992 bytes .../AttributedCarLibrary.vbproj | 135 + .../AttributedCarLibrary.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../AttributedCarLibrary/MyTypes.vb | 55 + .../CSharpSnapIn/AssemblyInfo.cs | 58 + .../CSharpSnapIn/CSharpSnapIn.cs | 16 + .../CSharpSnapIn/CSharpSnapIn.csproj | 143 + .../CSharpSnapIn/CSharpSnapIn.csproj.user | 69 + .../CSharpSnapIn/CSharpSnapIn.sln | 19 + .../CSharpSnapIn/CSharpSnapIn.suo | Bin 0 -> 35328 bytes .../CommonSnappableTypes.sln | 20 + .../CommonSnappableTypes.suo | Bin 0 -> 24576 bytes .../CommonSnappableTypes.vbproj | 132 + .../CommonSnappableTypes.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CommonSnappableTypes/MyTypes.vb | 34 + .../MyExtendableApp/MainForm.Designer.vb | 92 + .../MyExtendableApp/MainForm.resx | 123 + .../MyExtendableApp/MainForm.vb | 74 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../MyExtendableApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyExtendableApp/MyExtendableApp.sln | 20 + .../MyExtendableApp/MyExtendableApp.suo | Bin 0 -> 28672 bytes .../MyExtendableApp/MyExtendableApp.vbproj | 151 + .../MyExtendableApp.vbproj.user | 16 + .../VbNetSnapIn/AssemblyInfo.vb | 32 + .../VbNetSnapIn/VbNetSnapIn.sln | 19 + .../VbNetSnapIn/VbNetSnapIn.suo | Bin 0 -> 26112 bytes .../VbNetSnapIn/VbNetSnapIn.vb | 14 + .../VbNetSnapIn/VbNetSnapIn.vbproj | 149 + .../VbNetSnapIn/VbNetSnapIn.vbproj.user | 71 + .../ExternalAssemblyReflector.sln | 20 + .../ExternalAssemblyReflector.suo | Bin 0 -> 17408 bytes .../ExternalAssemblyReflector.vbproj | 121 + .../ExternalAssemblyReflector.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ExternalAssemblyReflector/Program.vb | 43 + Code/Chapter 16/LateBinding/LateBinding.sln | 20 + Code/Chapter 16/LateBinding/LateBinding.suo | Bin 0 -> 18944 bytes .../Chapter 16/LateBinding/LateBinding.vbproj | 134 + .../LateBinding/LateBinding.vbproj.user | 16 + .../My Project/Application.Designer.vb | 13 + .../LateBinding/My Project/Application.myapp | 10 + .../LateBinding/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../LateBinding/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../LateBinding/My Project/Settings.settings | 7 + Code/Chapter 16/LateBinding/Program.vb | 72 + .../My Project/Application.Designer.vb | 13 + .../MyTypeViewer/My Project/Application.myapp | 10 + .../MyTypeViewer/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../MyTypeViewer/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../MyTypeViewer/My Project/Settings.settings | 7 + Code/Chapter 16/MyTypeViewer/MyTypeViewer.sln | 20 + Code/Chapter 16/MyTypeViewer/MyTypeViewer.suo | Bin 0 -> 15872 bytes .../MyTypeViewer/MyTypeViewer.vbproj | 134 + .../MyTypeViewer/MyTypeViewer.vbproj.user | 17 + Code/Chapter 16/MyTypeViewer/Program.vb | 98 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SharedAssemblyReflector/Program.vb | 34 + .../SharedAssemblyReflector.sln | 20 + .../SharedAssemblyReflector.suo | Bin 0 -> 17408 bytes .../SharedAssemblyReflector.vbproj | 121 + .../SharedAssemblyReflector.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../VehicleDescriptionReader/Program.vb | 23 + .../VehicleDescriptionReader.sln | 20 + .../VehicleDescriptionReader.suo | Bin 0 -> 25088 bytes .../VehicleDescriptionReader.vbproj | 138 + .../VehicleDescriptionReader.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../VehicleDescriptionReaderLB/Project.vb | 34 + .../VehicleDescriptionReaderLB.sln | 20 + .../VehicleDescriptionReaderLB.suo | Bin 0 -> 24576 bytes .../VehicleDescriptionReaderLB.vbproj | 134 + .../VehicleDescriptionReaderLB.vbproj.user | 17 + .../AppDomainManipulator.sln | 20 + .../AppDomainManipulator.suo | Bin 0 -> 17408 bytes .../AppDomainManipulator.vbproj | 139 + .../AppDomainManipulator.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../AppDomainManipulator/Program.vb | 57 + .../ContextManipulator/ContextManipulator.sln | 20 + .../ContextManipulator/ContextManipulator.suo | Bin 0 -> 16384 bytes .../ContextManipulator.vbproj | 134 + .../ContextManipulator.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 17/ContextManipulator/Program.vb | 53 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ProcessManipulator/ProcessManipulator.sln | 20 + .../ProcessManipulator/ProcessManipulator.suo | Bin 0 -> 15360 bytes .../ProcessManipulator.vbproj | 134 + .../ProcessManipulator.vbproj.user | 17 + Code/Chapter 17/ProcessManipulator/Program.vb | 114 + .../AddWithThreads/AddWithThreads.sln | 20 + .../AddWithThreads/AddWithThreads.suo | Bin 0 -> 19968 bytes .../AddWithThreads/AddWithThreads.vbproj | 114 + .../AddWithThreads/AddWithThreads.vbproj.user | 17 + .../AddWithThreads/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../AddWithThreads/My Project/Resources.resx | 117 + Code/Chapter 18/AddWithThreads/Program.vb | 36 + .../AsyncCallbackDelegate.sln | 20 + .../AsyncCallbackDelegate.suo | Bin 0 -> 17408 bytes .../AsyncCallbackDelegate.vbproj | 101 + .../AsyncCallbackDelegate.vbproj.user | 17 + .../My Project/AssemblyInfo.vb | 35 + .../AsyncCallbackDelegate/Program.vb | 54 + .../AsyncDelegate/AsyncDelegate.sln | 20 + .../AsyncDelegate/AsyncDelegate.suo | Bin 0 -> 16384 bytes .../AsyncDelegate/AsyncDelegate.vbproj | 111 + .../AsyncDelegate/AsyncDelegate.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../AsyncDelegate/My Project/AssemblyInfo.vb | 35 + Code/Chapter 18/AsyncDelegate/Program.vb | 45 + .../BackgroundThread/BackgroundThread.sln | 20 + .../BackgroundThread/BackgroundThread.suo | Bin 0 -> 20992 bytes .../BackgroundThread/BackgroundThread.vbproj | 114 + .../BackgroundThread.vbproj.user | 17 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + Code/Chapter 18/BackgroundThread/Program.vb | 38 + .../MultiThreadedPrinting.sln | 20 + .../MultiThreadedPrinting.suo | Bin 0 -> 20480 bytes .../MultiThreadedPrinting.vbproj | 114 + .../MultiThreadedPrinting.vbproj.user | 17 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../MultiThreadedPrinting/Program.vb | 48 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../SimpleMultiThreadApp/Program.vb | 58 + .../SimpleMultiThreadApp.sln | 20 + .../SimpleMultiThreadApp.suo | Bin 0 -> 19456 bytes .../SimpleMultiThreadApp.vbproj | 115 + .../SimpleMultiThreadApp.vbproj.user | 17 + .../SyncDelegate/My Project/AssemblyInfo.vb | 35 + Code/Chapter 18/SyncDelegate/Program.vb | 38 + Code/Chapter 18/SyncDelegate/SyncDelegate.sln | 20 + Code/Chapter 18/SyncDelegate/SyncDelegate.suo | Bin 0 -> 15872 bytes .../SyncDelegate/SyncDelegate.vbproj | 101 + .../SyncDelegate/SyncDelegate.vbproj.user | 17 + .../ThreadPoolApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ThreadPoolApp/My Project/Resources.resx | 117 + Code/Chapter 18/ThreadPoolApp/Program.vb | 43 + .../ThreadPoolApp/ThreadPoolApp.sln | 20 + .../ThreadPoolApp/ThreadPoolApp.suo | Bin 0 -> 25088 bytes .../ThreadPoolApp/ThreadPoolApp.vbproj | 114 + .../ThreadPoolApp/ThreadPoolApp.vbproj.user | 17 + .../ThreadStats/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ThreadStats/My Project/Resources.resx | 117 + Code/Chapter 18/ThreadStats/Program.vb | 32 + Code/Chapter 18/ThreadStats/ThreadStats.sln | 20 + Code/Chapter 18/ThreadStats/ThreadStats.suo | Bin 0 -> 17408 bytes .../Chapter 18/ThreadStats/ThreadStats.vbproj | 114 + .../ThreadStats/ThreadStats.vbproj.user | 17 + .../TimerApp/My Project/AssemblyInfo.vb | 35 + .../TimerApp/My Project/Resources.Designer.vb | 63 + .../TimerApp/My Project/Resources.resx | 117 + Code/Chapter 18/TimerApp/Program.vb | 24 + Code/Chapter 18/TimerApp/TimerApp.sln | 20 + Code/Chapter 18/TimerApp/TimerApp.suo | Bin 0 -> 24064 bytes Code/Chapter 18/TimerApp/TimerApp.vbproj | 114 + Code/Chapter 18/TimerApp/TimerApp.vbproj.user | 17 + .../MainForm.Designer.vb | 101 + .../MainForm.resx | 123 + .../MainForm.vb | 42 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WinFormsBackgroundWorkerThread.sln | 20 + .../WinFormsBackgroundWorkerThread.suo | Bin 0 -> 27648 bytes .../WinFormsBackgroundWorkerThread.vbproj | 123 + .../ComUsableDotNetServer.sln | 20 + .../ComUsableDotNetServer.suo | Bin 0 -> 18432 bytes .../ComUsableDotNetServer.vbproj | 101 + .../ComUsableDotNetServer.vbproj.user | 5 + .../ComUsableDotNetServer/DotNetCalc.vb | 14 + .../ComUsableDotNetServer/DotNetPerson.vb | 27 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ComUsableDotNetServer/TestKey.snk | Bin 0 -> 596 bytes Code/Chapter 19/SimpleComServer/ComCalc.cls | 23 + .../SimpleComServer/SimpleComServer.dll | Bin 0 -> 20480 bytes .../SimpleComServer/SimpleComServer.exp | Bin 0 -> 1060 bytes .../SimpleComServer/SimpleComServer.lib | Bin 0 -> 2742 bytes .../SimpleComServer/SimpleComServer.vbp | 33 + .../SimpleComServer/SimpleComServer.vbw | 1 + Code/Chapter 19/Vb6ComCarServer/CoCar.cls | 77 + Code/Chapter 19/Vb6ComCarServer/Engine.cls | 24 + .../Vb6ComCarServer/IDriverInfo.cls | 21 + .../Vb6ComCarServer/Vb6ComCarServer.dll | Bin 0 -> 28672 bytes .../Vb6ComCarServer/Vb6ComCarServer.exp | Bin 0 -> 1060 bytes .../Vb6ComCarServer/Vb6ComCarServer.lib | Bin 0 -> 2742 bytes .../Vb6ComCarServer/Vb6ComCarServer.vbp | 33 + .../Vb6ComCarServer/Vb6ComCarServer.vbw | 3 + Code/Chapter 19/Vb6_DotNetClient/Form1.frm | 34 + .../Vb6_DotNetClient/VB6_DotNetClient.exe | Bin 0 -> 16384 bytes .../Vb6_DotNetClient/VB6_DotNetClient.vbp | 30 + .../Vb6_DotNetClient/VB6_DotNetClient.vbw | 1 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../VbNetCarClient/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../VbNetCarClient/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 19/VbNetCarClient/Program.vb | 43 + .../VbNetCarClient/VbNetCarClient.sln | 20 + .../VbNetCarClient/VbNetCarClient.suo | Bin 0 -> 16384 bytes .../VbNetCarClient/VbNetCarClient.vbproj | 107 + .../VbNetCarClient/VbNetCarClient.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../VbNetComClientLateBinding/Program.vb | 33 + .../VBNetComClientLateBinding.sln | 20 + .../VBNetComClientLateBinding.suo | Bin 0 -> 16384 bytes .../VBNetComClientLateBinding.vbproj | 96 + .../VBNetComClientLateBinding.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../My Project/app.manifest | 22 + .../VbNetSimpleComClient/Program.vb | 33 + .../VBNetSimpleComClient.sln | 20 + .../VBNetSimpleComClient.suo | Bin 0 -> 16384 bytes .../VBNetSimpleComClient.vbproj | 113 + .../VBNetSimpleComClient.vbproj.user | 5 + Code/Chapter 2/VbcExample/HelloMsg.vb | 9 + Code/Chapter 2/VbcExample/TestApp.rsp | 9 + Code/Chapter 2/VbcExample/TestApp.vb | 18 + .../AsyncFileStream/AsyncFileStream.sln | 20 + .../AsyncFileStream/AsyncFileStream.suo | Bin 0 -> 21504 bytes .../AsyncFileStream/AsyncFileStream.vbproj | 97 + .../AsyncFileStream.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../AsyncFileStream/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 20/AsyncFileStream/Program.vb | 35 + .../BinaryWriterReader/BinaryWriterReader.sln | 20 + .../BinaryWriterReader/BinaryWriterReader.suo | Bin 0 -> 19968 bytes .../BinaryWriterReader.vbproj | 134 + .../BinaryWriterReader.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 20/BinaryWriterReader/Program.vb | 38 + Code/Chapter 20/DriveTypeApp/DriveTypeApp.sln | 20 + Code/Chapter 20/DriveTypeApp/DriveTypeApp.suo | Bin 0 -> 17408 bytes .../DriveTypeApp/DriveTypeApp.vbproj | 134 + .../DriveTypeApp/DriveTypeApp.vbproj.user | 16 + .../My Project/Application.Designer.vb | 13 + .../DriveTypeApp/My Project/Application.myapp | 10 + .../DriveTypeApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../DriveTypeApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../DriveTypeApp/My Project/Settings.settings | 7 + Code/Chapter 20/DriveTypeApp/Program.vb | 26 + .../FileStreamApp/FileStreamApp.sln | 20 + .../FileStreamApp/FileStreamApp.suo | Bin 0 -> 17920 bytes .../FileStreamApp/FileStreamApp.vbproj | 134 + .../FileStreamApp/FileStreamApp.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../FileStreamApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FileStreamApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 20/FileStreamApp/Program.vb | 41 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../MyDirectoryApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../MyDirectoryApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyDirectoryApp/MyDirectoryApp.sln | 20 + .../MyDirectoryApp/MyDirectoryApp.suo | Bin 0 -> 19456 bytes .../MyDirectoryApp/MyDirectoryApp.vbproj | 134 + .../MyDirectoryApp/MyDirectoryApp.vbproj.user | 17 + Code/Chapter 20/MyDirectoryApp/Program.vb | 81 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyDirectoryWatcher/MyDirectoryWatcher.sln | 20 + .../MyDirectoryWatcher/MyDirectoryWatcher.suo | Bin 0 -> 20480 bytes .../MyDirectoryWatcher.vbproj | 134 + .../MyDirectoryWatcher.vbproj.user | 17 + Code/Chapter 20/MyDirectoryWatcher/Program.vb | 46 + .../My Project/Application.Designer.vb | 13 + .../SimpleFileIO/My Project/Application.myapp | 10 + .../SimpleFileIO/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../SimpleFileIO/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../SimpleFileIO/My Project/Settings.settings | 7 + Code/Chapter 20/SimpleFileIO/Program.vb | 19 + Code/Chapter 20/SimpleFileIO/SimpleFileIO.sln | 20 + Code/Chapter 20/SimpleFileIO/SimpleFileIO.suo | Bin 0 -> 17408 bytes .../SimpleFileIO/SimpleFileIO.vbproj | 109 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../StreamWriterReaderApp/Program.vb | 31 + .../StreamWriterReaderApp.sln | 20 + .../StreamWriterReaderApp.suo | Bin 0 -> 20480 bytes .../StreamWriterReaderApp.vbproj | 134 + .../StreamWriterReaderApp.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../StringReaderWriterApp/Program.vb | 40 + .../StringReaderWriterApp.sln | 20 + .../StringReaderWriterApp.suo | Bin 0 -> 18944 bytes .../StringReaderWriterApp.vbproj | 134 + .../StringReaderWriterApp.vbproj.user | 17 + .../CustomSerialization/CustomData.vb | 55 + .../CustomSerialization.sln | 20 + .../CustomSerialization.suo | Bin 0 -> 22016 bytes .../CustomSerialization.vbproj | 136 + .../CustomSerialization.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 21/CustomSerialization/Program.vb | 50 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 21/SimpleSerialization/Program.vb | 67 + .../SimpleSerialization/SerializableCars.vb | 38 + .../SimpleSerialization.sln | 20 + .../SimpleSerialization.suo | Bin 0 -> 34816 bytes .../SimpleSerialization.vbproj | 136 + .../SimpleSerialization.vbproj.user | 17 + .../AdoNetTransaction/AdoNetTransaction.sln | 20 + .../AdoNetTransaction/AdoNetTransaction.suo | Bin 0 -> 17408 bytes .../AdoNetTransaction.vbproj | 113 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 22/AdoNetTransaction/Program.vb | 27 + .../AsyncCmdObjectApp/AsyncCmdObjectApp.sln | 20 + .../AsyncCmdObjectApp/AsyncCmdObjectApp.suo | Bin 0 -> 18432 bytes .../AsyncCmdObjectApp.vbproj | 109 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 22/AsyncCmdObjectApp/Program.vb | 40 + .../AutoLotCUIClient/AutoLotCUIClient.sln | 20 + .../AutoLotCUIClient/AutoLotCUIClient.suo | Bin 0 -> 18432 bytes .../AutoLotCUIClient/AutoLotCUIClient.vbproj | 115 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 22/AutoLotCUIClient/Program.vb | 163 + Code/Chapter 22/AutoLotCUIClient/app.config | 7 + Code/Chapter 22/AutoLotDAL/AutoLotDAL.sln | 20 + Code/Chapter 22/AutoLotDAL/AutoLotDAL.suo | Bin 0 -> 15872 bytes Code/Chapter 22/AutoLotDAL/AutoLotDAL.vbproj | 108 + Code/Chapter 22/AutoLotDAL/InventoryDAL.vb | 203 ++ .../My Project/Application.Designer.vb | 13 + .../AutoLotDAL/My Project/Application.myapp | 10 + .../AutoLotDAL/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../AutoLotDAL/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../AutoLotDAL/My Project/Settings.settings | 7 + .../AutoLotDataReader/AutoLotDataReader.sln | 20 + .../AutoLotDataReader/AutoLotDataReader.suo | Bin 0 -> 17408 bytes .../AutoLotDataReader.vbproj | 109 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 22/AutoLotDataReader/Program.vb | 58 + .../DataProviderFactory.sln | 20 + .../DataProviderFactory.suo | Bin 0 -> 17920 bytes .../DataProviderFactory.vbproj | 111 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Chapter 22/DataProviderFactory/Program.vb | 44 + .../Chapter 22/DataProviderFactory/app.config | 16 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyConnectionFactory.sln | 20 + .../MyConnectionFactory.suo | Bin 0 -> 16896 bytes .../MyConnectionFactory.vbproj | 112 + .../Chapter 22/MyConnectionFactory/Program.vb | 68 + .../Chapter 22/MyConnectionFactory/app.config | 6 + .../AutoLotDAL (Part 2)/AutoLotDAL.sln | 20 + .../AutoLotDAL (Part 2)/AutoLotDAL.suo | Bin 0 -> 17408 bytes .../AutoLotDAL (Part 2)/AutoLotDAL.vbproj | 109 + .../AutoLotDAL (Part 2)/InventoryDAL.vb | 206 ++ .../InventoryDALDisconnected.vb | 38 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../AutoLotDAL (Part 3)/AutoLotDAL.sln | 20 + .../AutoLotDAL (Part 3)/AutoLotDAL.suo | Bin 0 -> 18944 bytes .../AutoLotDAL (Part 3)/AutoLotDAL.vbproj | 128 + .../AutoLotDataSet.Designer.vb | 3044 +++++++++++++++++ .../AutoLotDAL (Part 3)/AutoLotDataSet.xsc | 9 + .../AutoLotDAL (Part 3)/AutoLotDataSet.xsd | 276 ++ .../AutoLotDAL (Part 3)/AutoLotDataSet.xss | 44 + .../AutoLotDAL (Part 3)/InventoryDAL.vb | 203 ++ .../InventoryDALDisconnected.vb | 35 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 84 + .../My Project/Settings.settings | 14 + .../Wizard Generated DB Objects.cd | 84 + .../Chapter 23/AutoLotDAL (Part 3)/app.config | 31 + .../FillDataSetWithSqlDataAdapter.sln | 20 + .../FillDataSetWithSqlDataAdapter.suo | Bin 0 -> 16896 bytes .../FillDataSetWithSqlDataAdapter.vbproj | 109 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../FillDataSetWithSqlDataAdapter/Program.vb | 68 + .../MainForm.Designer.vb | 174 + .../MainForm.resx | 120 + .../MultitabledDataSetApp - Redux/MainForm.vb | 88 + .../MultitabledDataSetApp.sln | 20 + .../MultitabledDataSetApp.suo | Bin 0 -> 22528 bytes .../MultitabledDataSetApp.vbproj | 127 + .../MultitabledDataSetApp.vbproj.user | 5 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MainForm.Designer.vb | 174 + .../MultitabledDataSetApp/MainForm.resx | 120 + .../MultitabledDataSetApp/MainForm.vb | 120 + .../MultitabledDataSetApp.sln | 20 + .../MultitabledDataSetApp.suo | Bin 0 -> 20480 bytes .../MultitabledDataSetApp.vbproj | 125 + .../MultitabledDataSetApp.vbproj.user | 5 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MultitabledDataSetApp/app.config | 7 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SimpleDataSet/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../SimpleDataSet/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 23/SimpleDataSet/Program.vb | 182 + .../SimpleDataSet/SimpleDataSet.sln | 20 + .../SimpleDataSet/SimpleDataSet.suo | Bin 0 -> 16384 bytes .../SimpleDataSet/SimpleDataSet.vbproj | 109 + .../SimpleDataSet/SimpleDataSet.vbproj.user | 5 + .../InventoryDataSet.Designer.vb | 1406 ++++++++ .../VisualDataGridViewApp/InventoryDataSet.vb | 2 + .../InventoryDataSet.xsc | 1 + .../InventoryDataSet.xsd | 113 + .../InventoryDataSet.xss | 1 + .../MainForm.Designer.vb | 253 ++ .../VisualDataGridViewApp/MainForm.resx | 135 + .../VisualDataGridViewApp/MainForm.vb | 49 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 84 + .../My Project/Settings.settings | 14 + .../VisualDataGridViewApp.sln | 20 + .../VisualDataGridViewApp.suo | Bin 0 -> 23552 bytes .../VisualDataGridViewApp.vbproj | 144 + .../VisualDataGridViewApp.vbproj.user | 5 + .../Wizard Generated DB Objects.cd | 76 + .../VisualDataGridViewApp/app.config | 32 + .../WindowsFormsDataTableViewer/Car.vb | 12 + .../MainForm.Designer.vb | 176 + .../WindowsFormsDataTableViewer/MainForm.resx | 120 + .../WindowsFormsDataTableViewer/MainForm.vb | 157 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WindowsFormsDataTableViewer.sln | 20 + .../WindowsFormsDataTableViewer.suo | Bin 0 -> 18432 bytes .../WindowsFormsDataTableViewer.vbproj | 124 + .../MainForm.Designer.vb | 76 + .../WindowsFormsInventoryUI/MainForm.resx | 120 + .../WindowsFormsInventoryUI/MainForm.vb | 29 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WindowsFormsInventoryUI.sln | 20 + .../WindowsFormsInventoryUI.suo | Bin 0 -> 19968 bytes .../WindowsFormsInventoryUI.vbproj | 129 + .../WindowsFormsInventoryUI/app.config | 7 + .../FunWithLinqToXml/FunWithLinqToXml.sln | 20 + .../FunWithLinqToXml/FunWithLinqToXml.suo | Bin 0 -> 19968 bytes .../FunWithLinqToXml/FunWithLinqToXml.vbproj | 109 + .../FunWithLinqToXml.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 24/FunWithLinqToXml/Program.vb | 175 + .../LinqOverDataSet/LinqOverDataSet.sln | 20 + .../LinqOverDataSet/LinqOverDataSet.suo | Bin 0 -> 15872 bytes .../LinqOverDataSet/LinqOverDataSet.vbproj | 113 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../LinqOverDataSet/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 24/LinqOverDataSet/Program.vb | 81 + .../LinqToSqlCrud/AutoLotObjects.dbml | 42 + .../LinqToSqlCrud/AutoLotObjects.dbml.layout | 44 + .../LinqToSqlCrud/AutoLotObjects.designer.vb | 683 ++++ .../LinqToSqlCrud/AutoLotObjects.vb | 4 + .../LinqToSqlCrud/LinqToSqlCrud.sln | 20 + .../LinqToSqlCrud/LinqToSqlCrud.suo | Bin 0 -> 22528 bytes .../LinqToSqlCrud/LinqToSqlCrud.vbproj | 132 + .../LinqToSqlCrud/LinqToSqlCrud.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../LinqToSqlCrud/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../LinqToSqlCrud/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 84 + .../My Project/Settings.settings | 14 + Code/Chapter 24/LinqToSqlCrud/Program.vb | 68 + Code/Chapter 24/LinqToSqlCrud/app.config | 32 + .../LINQ to SQL types.cd | 94 + .../LinqWithSqlMetalGenedCode.sln | 20 + .../LinqWithSqlMetalGenedCode.suo | Bin 0 -> 18432 bytes .../LinqWithSqlMetalGenedCode.vbproj | 114 + .../LinqWithSqlMetalGenedCode.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../LinqWithSqlMetalGenedCode/Program.vb | 56 + .../LinqWithSqlMetalGenedCode/autoLotDB.vb | 821 +++++ .../Inventory.xml | 28 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../NavigationWithAxisProperties.sln | 20 + .../NavigationWithAxisProperties.suo | Bin 0 -> 25088 bytes .../NavigationWithAxisProperties.vbproj | 114 + .../NavigationWithAxisProperties/Program.vb | 66 + .../Inventory.xml | 28 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../NavigationWithLinqToXmlObjectModel.sln | 20 + .../NavigationWithLinqToXmlObjectModel.suo | Bin 0 -> 26112 bytes .../NavigationWithLinqToXmlObjectModel.vbproj | 114 + .../Program.vb | 57 + .../SimpleLinqToSqlApp/AutoLotDataContext.vb | 14 + .../SimpleLinqToSqlApp/Inventory.vb | 21 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 24/SimpleLinqToSqlApp/Program.vb | 42 + .../SimpleLinqToSqlApp/SimpleLinqToSqlApp.sln | 20 + .../SimpleLinqToSqlApp/SimpleLinqToSqlApp.suo | Bin 0 -> 18944 bytes .../SimpleLinqToSqlApp.vbproj | 114 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 24/SimpleXmlLiteral/Program.vb | 21 + .../SimpleXmlLiteral/SimpleXmlLiteral.sln | 20 + .../SimpleXmlLiteral/SimpleXmlLiteral.suo | Bin 0 -> 19456 bytes .../SimpleXmlLiteral/SimpleXmlLiteral.vbproj | 109 + .../HelloWebService/HelloWebService.asmx | 10 + .../MagicEightBallServiceClient.sln | 20 + .../MagicEightBallServiceClient.suo | Bin 0 -> 19968 bytes .../MagicEightBallServiceClient.vbproj | 143 + .../MagicEightBallServiceClient.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MagicEightBallServiceClient/Program.vb | 15 + .../MagicEightBallService.disco | 4 + .../MagicEightBallService.wsdl | 21 + .../MagicEightBallService.xsd | 40 + .../MagicEightBallService1.wsdl | 22 + .../MagicEightBallService1.xsd | 17 + .../ServiceReference1/Reference.svcmap | 32 + .../ServiceReference1/Reference.vb | 60 + .../ServiceReference1/configuration.svcinfo | 10 + .../MagicEightBallServiceClient/app.config | 50 + .../MagicEightBallServiceHost.sln | 20 + .../MagicEightBallServiceHost.suo | Bin 0 -> 18432 bytes .../MagicEightBallServiceHost.vbproj | 117 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MagicEightBallServiceHost/Program.vb | 32 + .../MagicEightBallServiceHost/app.config | 34 + .../MagicEightBallService.vb | 28 + .../MagicEightBallServiceLib.sln | 20 + .../MagicEightBallServiceLib.suo | Bin 0 -> 15360 bytes .../MagicEightBallServiceLib.vbproj | 110 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MathService/MathClient/MathClient.sln | 20 + .../MathService/MathClient/MathClient.suo | Bin 0 -> 19456 bytes .../MathService/MathClient/MathClient.vbproj | 143 + .../My Project/Application.Designer.vb | 13 + .../MathClient/My Project/Application.myapp | 10 + .../MathClient/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../MathClient/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../MathClient/My Project/Settings.settings | 7 + .../MathService/MathClient/Program.vb | 26 + .../ServiceReference1/MathService.disco | 4 + .../ServiceReference1/MathService.wsdl | 21 + .../ServiceReference1/MathService.xsd | 18 + .../ServiceReference1/MathService1.wsdl | 175 + .../ServiceReference1/MathService1.xsd | 40 + .../ServiceReference1/Reference.svcmap | 32 + .../ServiceReference1/Reference.vb | 138 + .../ServiceReference1/configuration.svcinfo | 10 + .../MathService/MathClient/app.config | 57 + .../MathService/MathServiceLibrary/App.config | 48 + .../MathServiceLibrary/IBasicMath.vb | 5 + .../MathServiceLibrary/MathService.vb | 7 + .../MathServiceLibrary/MathServiceLibrary.sln | 20 + .../MathServiceLibrary/MathServiceLibrary.suo | Bin 0 -> 18432 bytes .../MathServiceLibrary.vbproj | 108 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MathWinService.Designer.vb | 48 + .../MathWindowsServiceHost/MathWinService.vb | 41 + .../MathWindowsServiceHost.sln | 20 + .../MathWindowsServiceHost.suo | Bin 0 -> 20480 bytes .../MathWindowsServiceHost.vbproj | 134 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ProjectInstaller.Designer.vb | 46 + .../ProjectInstaller.resx | 129 + .../ProjectInstaller.vb | 16 + .../MathWindowsServiceHost/app.config | 31 + .../App_Code/IAutoLotService.vb | 23 + .../App_Code/VbAutoLotWCFService.vb | 50 + .../VbAutoLotWCFService/Bin/AutoLotDAL.dll | Bin 0 -> 17920 bytes .../Bin/AutoLotDAL.dll.refresh | Bin 0 -> 204 bytes .../VbAutoLotWCFService/Bin/AutoLotDAL.pdb | Bin 0 -> 42496 bytes .../VbAutoLotWCFService/Bin/AutoLotDAL.xml | 24 + .../VbAutoLotWCFService/Service.svc | 1 + .../VbAutoLotWCFService/Web.config | 198 ++ .../CreditCheckApp/CreditCheckApp.sln | 20 + .../CreditCheckApp/CreditCheckApp.suo | Bin 0 -> 22016 bytes .../CreditCheckApp/CreditCheckApp.vbproj | 136 + .../CreditCheckApp/CreditCheckApp.vbproj.user | 5 + .../CreditCheckApp/MainForm.Designer.vb | 73 + Code/Chapter 26/CreditCheckApp/MainForm.resx | 120 + Code/Chapter 26/CreditCheckApp/MainForm.vb | 24 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../CreditCheckApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../CreditCheckApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CreditCheckWF.designer.vb | 74 + .../CreditCheckWFLib/CreditCheckWF.rules | 24 + .../CreditCheckWFLib/CreditCheckWF.vb | 65 + .../CreditCheckWFLib/CreditCheckWFLib.sln | 20 + .../CreditCheckWFLib/CreditCheckWFLib.suo | Bin 0 -> 23552 bytes .../CreditCheckWFLib/CreditCheckWFLib.vbproj | 181 + .../My Project/AssemblyInfo.vb | 38 + .../My Project/MySettings.settings | 7 + .../CreditCheckWFLib/My Project/MySettings.vb | 28 + .../MathWebService/App_Code/Service.vb | 30 + Code/Chapter 26/MathWebService/Service.asmx | 1 + Code/Chapter 26/MathWebService/web.config | 166 + Code/Chapter 26/UserDataWFApp/Module1.vb | 41 + .../UserDataWFApp/My Project/AssemblyInfo.vb | 38 + .../My Project/MySettings.settings | 7 + .../UserDataWFApp/My Project/MySettings.vb | 28 + .../ProcessUsernameWorkflow.designer.vb | 44 + .../UserDataWFApp/ProcessUsernameWorkflow.vb | 58 + .../UserDataWFApp/UserDataWFApp.sln | 20 + .../UserDataWFApp/UserDataWFApp.suo | Bin 0 -> 21504 bytes .../UserDataWFApp/UserDataWFApp.vbproj | 173 + .../UserDataWFApp/UserDataWFApp.vbproj.user | 5 + .../WFMathClient/MathWF.designer.vb | 254 ++ Code/Chapter 26/WFMathClient/MathWF.resx | 132 + Code/Chapter 26/WFMathClient/MathWF.rules | 84 + Code/Chapter 26/WFMathClient/MathWF.vb | 106 + Code/Chapter 26/WFMathClient/Module1.vb | 29 + .../WFMathClient/My Project/AssemblyInfo.vb | 38 + .../My Project/MySettings.settings | 7 + .../WFMathClient/My Project/MySettings.vb | 28 + .../My Project/Settings.Designer.vb | 83 + .../WFMathClient/My Project/Settings.settings | 9 + .../ServiceReference1/MathService.disco | 4 + .../ServiceReference1/MathService.wsdl | 21 + .../ServiceReference1/MathService.xsd | 18 + .../ServiceReference1/MathService1.wsdl | 175 + .../ServiceReference1/MathService1.xsd | 40 + .../ServiceReference1/Reference.svcmap | 32 + .../ServiceReference1/Reference.vb | 60 + .../ServiceReference1/configuration.svcinfo | 10 + Code/Chapter 26/WFMathClient/WFMathClient.sln | 20 + Code/Chapter 26/WFMathClient/WFMathClient.suo | Bin 0 -> 28160 bytes .../WFMathClient/WFMathClient.vbproj | 253 ++ .../WFMathClient/WFMathClient.vbproj.user | 5 + .../Web References/localhost/Reference.map | 7 + .../Web References/localhost/Reference.vb | 326 ++ .../Web References/localhost/Service.disco | 6 + .../Web References/localhost/Service.wsdl | 195 ++ Code/Chapter 26/WFMathClient/app.config | 69 + Code/Chapter 27/AppClassExample/MainWindow.vb | 34 + .../Chapter 27/ControlBehaviors/MainWindow.vb | 48 + Code/Chapter 27/FormLifeTime/MainWindow.vb | 51 + .../MenuStripApp/MainWindow.Designer.vb | 115 + Code/Chapter 27/MenuStripApp/MainWindow.resx | 126 + Code/Chapter 27/MenuStripApp/MainWindow.vb | 88 + Code/Chapter 27/MenuStripApp/MenuStripApp.sln | 20 + Code/Chapter 27/MenuStripApp/MenuStripApp.suo | Bin 0 -> 17408 bytes .../MenuStripApp/MenuStripApp.vbproj | 123 + .../My Project/Application.Designer.vb | 38 + .../MenuStripApp/My Project/Application.myapp | 10 + .../MenuStripApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../MenuStripApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../MenuStripApp/My Project/Settings.settings | 7 + Code/Chapter 27/MyFirstWindow/MainWindow.vb | 14 + .../ChildPrototypeForm.Designer.vb | 34 + .../SimpleMdiApp/ChildPrototypeForm.resx | 120 + .../SimpleMdiApp/ChildPrototypeForm.vb | 19 + Code/Chapter 27/SimpleMdiApp/Form1.resx | 123 + .../SimpleMdiApp/MainWindow.Designer.vb | 119 + Code/Chapter 27/SimpleMdiApp/MainWindow.vb | 35 + .../My Project/Application.Designer.vb | 38 + .../SimpleMdiApp/My Project/Application.myapp | 10 + .../SimpleMdiApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleMdiApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../SimpleMdiApp/My Project/Settings.settings | 7 + Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.sln | 20 + Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.suo | Bin 0 -> 28672 bytes .../SimpleMdiApp/SimpleMdiApp.vbproj | 158 + .../SimpleMdiApp/SimpleMdiApp.vbproj.user | 17 + Code/Chapter 27/StatusStripApp/HappyDude.jpg | Bin 0 -> 3262 bytes .../StatusStripApp/MainWindow.Designer.vb | 160 + .../Chapter 27/StatusStripApp/MainWindow.resx | 484 +++ Code/Chapter 27/StatusStripApp/MainWindow.vb | 105 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../StatusStripApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../StatusStripApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../StatusStripApp/StatusStripApp.sln | 20 + .../StatusStripApp/StatusStripApp.suo | Bin 0 -> 16896 bytes .../StatusStripApp/StatusStripApp.vbproj | 123 + .../ToolStripApp/MainWindow.Designer.vb | 163 + Code/Chapter 27/ToolStripApp/MainWindow.resx | 141 + Code/Chapter 27/ToolStripApp/MainWindow.vb | 51 + .../My Project/Application.Designer.vb | 38 + .../ToolStripApp/My Project/Application.myapp | 10 + .../ToolStripApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ToolStripApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../ToolStripApp/My Project/Settings.settings | 7 + Code/Chapter 27/ToolStripApp/ToolStripApp.sln | 20 + Code/Chapter 27/ToolStripApp/ToolStripApp.suo | Bin 0 -> 26112 bytes .../ToolStripApp/ToolStripApp.vbproj | 111 + .../ToolStripApp/ToolStripApp.vbproj.user | 5 + Code/Chapter 28/BasicImages/BasicImages.sln | 20 + Code/Chapter 28/BasicImages/BasicImages.suo | Bin 0 -> 20992 bytes .../Chapter 28/BasicImages/BasicImages.vbproj | 159 + .../BasicImages/BasicImages.vbproj.user | 17 + .../BasicImages/MainForm.Designer.vb | 35 + Code/Chapter 28/BasicImages/MainForm.resx | 120 + Code/Chapter 28/BasicImages/MainForm.vb | 28 + .../My Project/Application.Designer.vb | 38 + .../BasicImages/My Project/Application.myapp | 10 + .../BasicImages/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../BasicImages/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../BasicImages/My Project/Settings.settings | 7 + Code/Chapter 28/BasicImages/imageA.bmp | Bin 0 -> 49206 bytes Code/Chapter 28/BasicImages/imageB.bmp | Bin 0 -> 66146 bytes Code/Chapter 28/BasicImages/imageC.bmp | Bin 0 -> 49206 bytes .../BasicPaintForm/BasicPaintForm.sln | 20 + .../BasicPaintForm/BasicPaintForm.suo | Bin 0 -> 16896 bytes .../BasicPaintForm/BasicPaintForm.vbproj | 123 + .../BasicPaintForm/BasicPaintForm.vbproj.user | 5 + .../BasicPaintForm/MainForm.Designer.vb | 39 + Code/Chapter 28/BasicPaintForm/MainForm.resx | 120 + Code/Chapter 28/BasicPaintForm/MainForm.vb | 24 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../BasicPaintForm/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../BasicPaintForm/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 28/BrushStyles/BrushStyles.sln | 20 + Code/Chapter 28/BrushStyles/BrushStyles.suo | Bin 0 -> 20480 bytes .../Chapter 28/BrushStyles/BrushStyles.vbproj | 148 + .../BrushStyles/BrushStyles.vbproj.user | 17 + .../BrushStyles/MainForm.Designer.vb | 36 + Code/Chapter 28/BrushStyles/MainForm.resx | 120 + Code/Chapter 28/BrushStyles/MainForm.vb | 27 + .../My Project/Application.Designer.vb | 38 + .../BrushStyles/My Project/Application.myapp | 10 + .../BrushStyles/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../BrushStyles/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../BrushStyles/My Project/Settings.settings | 7 + Code/Chapter 28/ColorDlg/ColorDlg.sln | 20 + Code/Chapter 28/ColorDlg/ColorDlg.suo | Bin 0 -> 15872 bytes Code/Chapter 28/ColorDlg/ColorDlg.vbproj | 148 + Code/Chapter 28/ColorDlg/ColorDlg.vbproj.user | 17 + Code/Chapter 28/ColorDlg/Form1.Designer.vb | 36 + Code/Chapter 28/ColorDlg/MainForm.resx | 120 + Code/Chapter 28/ColorDlg/MainForm.vb | 29 + .../My Project/Application.Designer.vb | 38 + .../ColorDlg/My Project/Application.myapp | 10 + .../ColorDlg/My Project/AssemblyInfo.vb | 35 + .../ColorDlg/My Project/Resources.Designer.vb | 63 + .../ColorDlg/My Project/Resources.resx | 117 + .../ColorDlg/My Project/Settings.Designer.vb | 73 + .../ColorDlg/My Project/Settings.settings | 7 + Code/Chapter 28/CoorSystem/CoorSystem.sln | 20 + Code/Chapter 28/CoorSystem/CoorSystem.suo | Bin 0 -> 17920 bytes Code/Chapter 28/CoorSystem/CoorSystem.vbproj | 148 + .../CoorSystem/CoorSystem.vbproj.user | 16 + .../CoorSystem/MainForm.Designer.vb | 143 + Code/Chapter 28/CoorSystem/MainForm.resx | 123 + Code/Chapter 28/CoorSystem/MainForm.vb | 70 + .../My Project/Application.Designer.vb | 38 + .../CoorSystem/My Project/Application.myapp | 10 + .../CoorSystem/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CoorSystem/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CoorSystem/My Project/Settings.settings | 7 + Code/Chapter 28/CoorSystem/UpgradeLog.XML | 11 + Code/Chapter 28/CustomPenApp/CustomPenApp.sln | 20 + Code/Chapter 28/CustomPenApp/CustomPenApp.suo | Bin 0 -> 17408 bytes .../CustomPenApp/CustomPenApp.vbproj | 148 + .../CustomPenApp/CustomPenApp.vbproj.user | 17 + .../CustomPenApp/MainForm.Designer.vb | 36 + Code/Chapter 28/CustomPenApp/MainForm.resx | 120 + Code/Chapter 28/CustomPenApp/MainForm.vb | 45 + .../My Project/Application.Designer.vb | 38 + .../CustomPenApp/My Project/Application.myapp | 10 + .../CustomPenApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CustomPenApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CustomPenApp/My Project/Settings.settings | 7 + .../DraggingImages/DraggingImages.sln | 20 + .../DraggingImages/DraggingImages.suo | Bin 0 -> 22016 bytes .../DraggingImages/DraggingImages.vbproj | 153 + .../DraggingImages/DraggingImages.vbproj.user | 17 + Code/Chapter 28/DraggingImages/HappyDude.bmp | Bin 0 -> 630 bytes .../DraggingImages/MainForm.Designer.vb | 36 + Code/Chapter 28/DraggingImages/MainForm.resx | 120 + Code/Chapter 28/DraggingImages/MainForm.vb | 72 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../DraggingImages/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../DraggingImages/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../DrawingUtilTypes/DrawingUtilTypes.sln | 20 + .../DrawingUtilTypes/DrawingUtilTypes.suo | Bin 0 -> 16896 bytes .../DrawingUtilTypes/DrawingUtilTypes.vbproj | 110 + .../DrawingUtilTypes.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../DrawingUtilTypes/Program.vb | 65 + Code/Chapter 28/FontDlgForm/FontDlgForm.sln | 20 + Code/Chapter 28/FontDlgForm/FontDlgForm.suo | Bin 0 -> 17408 bytes .../Chapter 28/FontDlgForm/FontDlgForm.vbproj | 148 + .../FontDlgForm/FontDlgForm.vbproj.user | 17 + .../FontDlgForm/MainForm.Designer.vb | 35 + Code/Chapter 28/FontDlgForm/MainForm.resx | 120 + Code/Chapter 28/FontDlgForm/MainForm.vb | 27 + .../My Project/Application.Designer.vb | 38 + .../FontDlgForm/My Project/Application.myapp | 10 + .../FontDlgForm/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FontDlgForm/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../FontDlgForm/My Project/Settings.settings | 7 + .../FontFamilyApp/FontFamilyApp.sln | 20 + .../FontFamilyApp/FontFamilyApp.suo | Bin 0 -> 16384 bytes .../FontFamilyApp/FontFamilyApp.vbproj | 148 + .../FontFamilyApp/FontFamilyApp.vbproj.user | 17 + .../FontFamilyApp/MainForm.Designer.vb | 36 + Code/Chapter 28/FontFamilyApp/MainForm.resx | 120 + Code/Chapter 28/FontFamilyApp/MainForm.vb | 36 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../FontFamilyApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FontFamilyApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../GradientBrushes/GradientBrushes.sln | 20 + .../GradientBrushes/GradientBrushes.suo | Bin 0 -> 20480 bytes .../GradientBrushes/GradientBrushes.vbproj | 148 + .../GradientBrushes.vbproj.user | 17 + .../GradientBrushes/MainForm.Designer.vb | 36 + Code/Chapter 28/GradientBrushes/MainForm.resx | 120 + Code/Chapter 28/GradientBrushes/MainForm.vb | 35 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../GradientBrushes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../HitTestingImages/HitTestingImages.sln | 20 + .../HitTestingImages/HitTestingImages.suo | Bin 0 -> 22016 bytes .../HitTestingImages/HitTestingImages.vbproj | 159 + .../HitTestingImages.vbproj.user | 17 + .../HitTestingImages/MainForm.Designer.vb | 35 + .../Chapter 28/HitTestingImages/MainForm.resx | 120 + Code/Chapter 28/HitTestingImages/MainForm.vb | 119 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 28/HitTestingImages/imageA.bmp | Bin 0 -> 49206 bytes Code/Chapter 28/HitTestingImages/imageB.bmp | Bin 0 -> 66146 bytes Code/Chapter 28/HitTestingImages/imageC.bmp | Bin 0 -> 49206 bytes .../MyResourcesWinApp/MainForm.Designer.vb | 88 + .../MyResourcesWinApp/MainForm.resx | 120 + Code/Chapter 28/MyResourcesWinApp/MainForm.vb | 28 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 70 + .../My Project/Resources.resx | 124 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyResourcesWinApp/MyResources.Designer.vb | 83 + .../MyResourcesWinApp/MyResources.resx | 139 + .../MyResourcesWinApp/MyResourcesWinApp.sln | 20 + .../MyResourcesWinApp/MyResourcesWinApp.suo | Bin 0 -> 27648 bytes .../MyResourcesWinApp.vbproj | 160 + .../MyResourcesWinApp.vbproj.user | 17 + .../MyResourcesWinApp/Resources/HappyDude.bmp | Bin 0 -> 630 bytes .../Chapter 28/PenCapApp/MainForm.Designer.vb | 36 + Code/Chapter 28/PenCapApp/MainForm.resx | 120 + Code/Chapter 28/PenCapApp/MainForm.vb | 33 + .../My Project/Application.Designer.vb | 38 + .../PenCapApp/My Project/Application.myapp | 10 + .../PenCapApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../PenCapApp/My Project/Resources.resx | 117 + .../PenCapApp/My Project/Settings.Designer.vb | 73 + .../PenCapApp/My Project/Settings.settings | 7 + Code/Chapter 28/PenCapApp/PenCapApp.sln | 20 + Code/Chapter 28/PenCapApp/PenCapApp.suo | Bin 0 -> 18432 bytes Code/Chapter 28/PenCapApp/PenCapApp.vbproj | 148 + .../PenCapApp/PenCapApp.vbproj.user | 17 + Code/Chapter 28/ResXWriter/HappyDude.bmp | Bin 0 -> 630 bytes .../ResXWriter/MainForm.Designer.vb | 46 + Code/Chapter 28/ResXWriter/MainForm.resx | 120 + Code/Chapter 28/ResXWriter/MainForm.vb | 17 + .../My Project/Application.Designer.vb | 38 + .../ResXWriter/My Project/Application.myapp | 10 + .../ResXWriter/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ResXWriter/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../ResXWriter/My Project/Settings.settings | 7 + Code/Chapter 28/ResXWriter/ResXWriter.sln | 20 + Code/Chapter 28/ResXWriter/ResXWriter.suo | Bin 0 -> 20992 bytes Code/Chapter 28/ResXWriter/ResXWriter.vbproj | 148 + .../ResXWriter/ResXWriter.vbproj.user | 17 + .../SolidBrushApp/MainForm.Designer.vb | 36 + Code/Chapter 28/SolidBrushApp/MainForm.resx | 120 + Code/Chapter 28/SolidBrushApp/MainForm.vb | 31 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../SolidBrushApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SolidBrushApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SolidBrushApp/SolidBrushApp.sln | 20 + .../SolidBrushApp/SolidBrushApp.suo | Bin 0 -> 19456 bytes .../SolidBrushApp/SolidBrushApp.vbproj | 148 + .../SolidBrushApp/SolidBrushApp.vbproj.user | 17 + .../SwellingFontApp/MainForm.Designer.vb | 115 + Code/Chapter 28/SwellingFontApp/MainForm.resx | 126 + Code/Chapter 28/SwellingFontApp/MainForm.vb | 94 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SwellingFontApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SwellingFontApp/SwellingFontApp.sln | 20 + .../SwellingFontApp/SwellingFontApp.suo | Bin 0 -> 18432 bytes .../SwellingFontApp/SwellingFontApp.vbproj | 148 + .../SwellingFontApp.vbproj.user | 17 + Code/Chapter 28/TexturedBrushes/Clouds.bmp | Bin 0 -> 307514 bytes .../TexturedBrushes/MainForm.Designer.vb | 36 + Code/Chapter 28/TexturedBrushes/MainForm.resx | 120 + Code/Chapter 28/TexturedBrushes/MainForm.vb | 46 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../TexturedBrushes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../TexturedBrushes/Soap Bubbles.bmp | Bin 0 -> 65978 bytes .../TexturedBrushes/TexturedBrushes.sln | 20 + .../TexturedBrushes/TexturedBrushes.suo | Bin 0 -> 20992 bytes .../TexturedBrushes/TexturedBrushes.vbproj | 156 + .../TexturedBrushes.vbproj.user | 17 + .../AnchoringControls/AnchoringControls.sln | 20 + .../AnchoringControls/AnchoringControls.suo | Bin 0 -> 26112 bytes .../AnchoringControls.vbproj | 148 + .../AnchoringControls.vbproj.user | 17 + .../AnchoringControls/MainForm.Designer.vb | 175 + .../AnchoringControls/MainForm.resx | 123 + Code/Chapter 29/AnchoringControls/MainForm.vb | 83 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 29/Buttons/Buttons.sln | 20 + Code/Chapter 29/Buttons/Buttons.suo | Bin 0 -> 15872 bytes Code/Chapter 29/Buttons/Buttons.vbproj | 148 + Code/Chapter 29/Buttons/Buttons.vbproj.user | 17 + Code/Chapter 29/Buttons/MainForm.Designer.vb | 92 + Code/Chapter 29/Buttons/MainForm.resx | 1232 +++++++ Code/Chapter 29/Buttons/MainForm.vb | 34 + .../My Project/Application.Designer.vb | 38 + .../Buttons/My Project/Application.myapp | 10 + .../Buttons/My Project/AssemblyInfo.vb | 35 + .../Buttons/My Project/Resources.Designer.vb | 63 + .../Buttons/My Project/Resources.resx | 117 + .../Buttons/My Project/Settings.Designer.vb | 73 + .../Buttons/My Project/Settings.settings | 7 + Code/Chapter 29/CarConfig/CarConfig.sln | 20 + Code/Chapter 29/CarConfig/CarConfig.suo | Bin 0 -> 17408 bytes Code/Chapter 29/CarConfig/CarConfig.vbproj | 111 + .../CarConfig/CarConfig.vbproj.user | 5 + .../Chapter 29/CarConfig/MainForm.Designer.vb | 257 ++ Code/Chapter 29/CarConfig/MainForm.resx | 123 + Code/Chapter 29/CarConfig/MainForm.vb | 84 + .../My Project/Application.Designer.vb | 38 + .../CarConfig/My Project/Application.myapp | 10 + .../CarConfig/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CarConfig/My Project/Resources.resx | 117 + .../CarConfig/My Project/Settings.Designer.vb | 73 + .../CarConfig/My Project/Settings.settings | 7 + Code/Chapter 29/CarConfig/UpgradeLog.XML | 11 + .../CarControlLibrary/AboutToBlow.bmp | Bin 0 -> 3382 bytes .../CarControlLibrary/CarControl.Designer.vb | 67 + .../CarControlLibrary/CarControl.bmp | Bin 0 -> 1334 bytes .../CarControlLibrary/CarControl.resx | 253 ++ .../CarControlLibrary/CarControl.vb | 141 + .../CarControlLibrary/CarControlLibrary.sln | 20 + .../CarControlLibrary/CarControlLibrary.suo | Bin 0 -> 20992 bytes .../CarControlLibrary.vbproj | 170 + .../CarControlLibrary.vbproj.user | 17 + .../CarControlLibrary/EngineBlown.bmp | Bin 0 -> 3382 bytes Code/Chapter 29/CarControlLibrary/Lemon1.bmp | Bin 0 -> 3382 bytes Code/Chapter 29/CarControlLibrary/Lemon2.bmp | Bin 0 -> 3382 bytes Code/Chapter 29/CarControlLibrary/Lemon3.bmp | Bin 0 -> 3382 bytes .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 34 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CarControlTestForm/CarControlTestForm.sln | 20 + .../CarControlTestForm/CarControlTestForm.suo | Bin 0 -> 22016 bytes .../CarControlTestForm.vbproj | 152 + .../CarControlTestForm.vbproj.user | 17 + .../CarControlTestForm/MainForm.Designer.vb | 100 + .../CarControlTestForm/MainForm.resx | 120 + .../Chapter 29/CarControlTestForm/MainForm.vb | 31 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ControlsByHand/ControlsByHand.vb | 62 + Code/Chapter 29/ExoticControls/CarNode.bmp | Bin 0 -> 1334 bytes .../ExoticControls/ExoticControls.sln | 20 + .../ExoticControls/ExoticControls.suo | Bin 0 -> 21504 bytes .../ExoticControls/ExoticControls.vbproj | 158 + .../ExoticControls/ExoticControls.vbproj.user | 17 + .../ExoticControls/MainForm.Designer.vb | 515 +++ Code/Chapter 29/ExoticControls/MainForm.resx | 171 + Code/Chapter 29/ExoticControls/MainForm.vb | 143 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../ExoticControls/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ExoticControls/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 29/ExoticControls/RadioNode.bmp | Bin 0 -> 1334 bytes Code/Chapter 29/ExoticControls/SimpleCar.vb | 19 + Code/Chapter 29/ExoticControls/SpeedNode.bmp | Bin 0 -> 1334 bytes .../LabelsAndTextBoxes/LabelsAndTextBoxes.sln | 20 + .../LabelsAndTextBoxes/LabelsAndTextBoxes.suo | Bin 0 -> 17920 bytes .../LabelsAndTextBoxes.vbproj | 148 + .../LabelsAndTextBoxes.vbproj.user | 17 + .../LabelsAndTextBoxes/MainForm.Designer.vb | 142 + .../LabelsAndTextBoxes/MainForm.resx | 120 + .../Chapter 29/LabelsAndTextBoxes/MainForm.vb | 43 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ItalicUserMessageDialog.Designer.vb | 49 + .../ItalicUserMessageDialog.resx | 120 + .../ItalicUserMessageDialog.vb | 13 + .../SimpleModalDialog/MainForm.Designer.vb | 85 + .../SimpleModalDialog/MainForm.resx | 123 + Code/Chapter 29/SimpleModalDialog/MainForm.vb | 50 + .../My Project/Application.Designer.vb | 38 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleModalDialog/SimpleModalDialog.sln | 20 + .../SimpleModalDialog/SimpleModalDialog.suo | Bin 0 -> 24576 bytes .../SimpleModalDialog.vbproj | 168 + .../SimpleModalDialog.vbproj.user | 17 + .../UserMessageDialog.Designer.vb | 85 + .../SimpleModalDialog/UserMessageDialog.resx | 120 + .../SimpleModalDialog/UserMessageDialog.vb | 13 + .../BasicConsoleIO/BasicConsoleIO.sln | 20 + .../BasicConsoleIO/BasicConsoleIO.suo | Bin 0 -> 20480 bytes .../BasicConsoleIO/BasicConsoleIO.vbproj | 134 + .../BasicConsoleIO/BasicConsoleIO.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../BasicConsoleIO/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../BasicConsoleIO/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 3/BasicConsoleIO/Program.vb | 44 + .../BasicDataTypes/BasicDataTypes.sln | 20 + .../BasicDataTypes/BasicDataTypes.suo | Bin 0 -> 20992 bytes .../BasicDataTypes/BasicDataTypes.vbproj | 134 + .../BasicDataTypes/BasicDataTypes.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../BasicDataTypes/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../BasicDataTypes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 3/BasicDataTypes/Program.vb | 41 + Code/Chapter 3/FunWithMain/FunWithMain.sln | 20 + Code/Chapter 3/FunWithMain/FunWithMain.suo | Bin 0 -> 14848 bytes Code/Chapter 3/FunWithMain/FunWithMain.vbproj | 134 + .../FunWithMain/FunWithMain.vbproj.user | 23 + .../My Project/Application.Designer.vb | 13 + .../FunWithMain/My Project/Application.myapp | 10 + .../FunWithMain/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithMain/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../FunWithMain/My Project/Settings.settings | 7 + Code/Chapter 3/FunWithMain/Program.vb | 27 + .../FunWithModules/FunWithModules.sln | 20 + .../FunWithModules/FunWithModules.suo | Bin 0 -> 15872 bytes .../FunWithModules/FunWithModules.vbproj | 134 + .../FunWithModules/FunWithModules.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../FunWithModules/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithModules/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 3/FunWithModules/Program.vb | 69 + .../FunWithStrings/FunWithStrings.sln | 20 + .../FunWithStrings/FunWithStrings.suo | Bin 0 -> 17920 bytes .../FunWithStrings/FunWithStrings.vbproj | 134 + .../FunWithStrings/FunWithStrings.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../FunWithStrings/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithStrings/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 3/FunWithStrings/Program.vb | 72 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../TypeConversions/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 3/TypeConversions/Program.vb | 25 + .../TypeConversions/TypeConversions.sln | 20 + .../TypeConversions/TypeConversions.suo | Bin 0 -> 22016 bytes .../TypeConversions/TypeConversions.vbproj | 139 + .../TypeConversions.vbproj.user | 17 + .../CodeBehindXamlApp/MainWindow.xaml | 12 + .../CodeBehindXamlApp/MainWindow.xaml.vb | 21 + Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml | 8 + .../CodeBehindXamlApp/MyApp.xaml.vb | 13 + .../CodeBehindXamlApp/SimpleXamlApp.vbproj | 22 + Code/Chapter 30/SimpleWPFApp/SimpleWPFApp.vb | 62 + Code/Chapter 30/SimpleWPFApp/build.rsp | 8 + .../SimpleWPFAppRevisited/SimpleWPFApp.vb | 126 + .../SimpleWPFAppRevisited/build.rsp | 8 + Code/Chapter 30/SimpleXamlApp/MainWindow.xaml | 22 + Code/Chapter 30/SimpleXamlApp/MyApp.xaml | 12 + .../SimpleXamlApp/SimpleXamlApp.vbproj | 31 + .../SimpleXamlPad/SimpleXamlPad.sln | 20 + .../SimpleXamlPad/SimpleXamlPad.suo | Bin 0 -> 24064 bytes .../SimpleXamlPad/Application.xaml | 8 + .../SimpleXamlPad/Application.xaml.vb | 6 + .../SimpleXamlPad/MainWindow.xaml | 21 + .../SimpleXamlPad/MainWindow.xaml.vb | 56 + .../SimpleXamlPad/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../SimpleXamlPad/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleXamlPad/SimpleXamlPad.vbproj | 127 + .../SimpleXamlPad/SimpleXamlPad.vbproj.user | 5 + .../CarViewerApp/AddNewCarDialog.xaml | 45 + .../CarViewerApp/AddNewCarDialog.xaml.vb | 28 + Code/Chapter 31/CarViewerApp/Application.xaml | 8 + .../CarViewerApp/Application.xaml.vb | 6 + Code/Chapter 31/CarViewerApp/CarViewerApp.sln | 20 + Code/Chapter 31/CarViewerApp/CarViewerApp.suo | Bin 0 -> 43520 bytes .../CarViewerApp/CarViewerApp.vbproj | 143 + .../CarViewerApp/CarViewerApp.vbproj.user | 5 + Code/Chapter 31/CarViewerApp/Inventory.xml | 28 + Code/Chapter 31/CarViewerApp/MainWindow.xaml | 53 + .../CarViewerApp/MainWindow.xaml.vb | 28 + .../CarViewerApp/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../CarViewerApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../CarViewerApp/My Project/Settings.settings | 7 + .../CarViewerApp/ObservableCarCollection.vb | 69 + Code/Chapter 31/CheckRadioGroup.xaml | 28 + .../Chapter 31/ControlReview/Application.xaml | 8 + .../ControlReview/Application.xaml.vb | 6 + .../ControlReview/ControlReview.sln | 20 + .../ControlReview/ControlReview.suo | Bin 0 -> 30720 bytes .../ControlReview/ControlReview.vbproj | 127 + Code/Chapter 31/ControlReview/MainWindow.xaml | 25 + .../ControlReview/MainWindow.xaml.vb | 15 + .../ControlReview/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../ControlReview/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../CustomSpinButtonApp/Application.xaml | 8 + .../CustomSpinButtonApp/Application.xaml.vb | 6 + .../CustomSpinButtonApp.sln | 20 + .../CustomSpinButtonApp.suo | Bin 0 -> 38400 bytes .../CustomSpinButtonApp.vbproj | 127 + .../CustomSpinButtonApp/MainWindow.xaml | 21 + .../CustomSpinButtonApp/MainWindow.xaml.vb | 19 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 31/GridWithSplitter.xaml | 22 + Code/Chapter 31/ListControls/Application.xaml | 8 + .../ListControls/Application.xaml.vb | 6 + Code/Chapter 31/ListControls/ListControls.sln | 20 + Code/Chapter 31/ListControls/ListControls.suo | Bin 0 -> 37376 bytes .../ListControls/ListControls.vbproj | 127 + Code/Chapter 31/ListControls/MainWindow.xaml | 38 + .../ListControls/MainWindow.xaml.vb | 38 + .../ListControls/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../ListControls/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../ListControls/My Project/Settings.settings | 7 + .../MySpellChecker/Application.xaml | 8 + .../MySpellChecker/Application.xaml.vb | 6 + .../Chapter 31/MySpellChecker/MainWindow.xaml | 75 + .../MySpellChecker/MainWindow.xaml.vb | 66 + .../MySpellChecker/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../MySpellChecker/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MySpellChecker/MySpellChecker.sln | 20 + .../MySpellChecker/MySpellChecker.suo | Bin 0 -> 39424 bytes .../MySpellChecker/MySpellChecker.vbproj | 127 + Code/Chapter 31/ScrollViewer.xaml | 15 + Code/Chapter 31/SimpleCanvas.xaml | 18 + .../SimpleDataBinding/Application.xaml | 8 + .../SimpleDataBinding/Application.xaml.vb | 6 + .../SimpleDataBinding/MainWindow.xaml | 32 + .../SimpleDataBinding/MainWindow.xaml.vb | 3 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleDataBinding/MyColorConverter.vb | 25 + .../SimpleDataBinding/MyDoubleConverter.vb | 23 + .../SimpleDataBinding/SimpleDataBinding.sln | 20 + .../SimpleDataBinding/SimpleDataBinding.suo | Bin 0 -> 40448 bytes .../SimpleDataBinding.vbproj | 129 + Code/Chapter 31/SimpleDockPanel.xaml | 15 + Code/Chapter 31/SimpleGrid.xaml | 32 + Code/Chapter 31/SimpleStackPanel.xaml | 16 + Code/Chapter 31/SimpleWrapPanel.xaml | 17 + Code/Chapter 31/TextControls/Application.xaml | 8 + .../TextControls/Application.xaml.vb | 6 + Code/Chapter 31/TextControls/MainWindow.xaml | 18 + .../TextControls/MainWindow.xaml.vb | 35 + .../TextControls/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../TextControls/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../TextControls/My Project/Settings.settings | 7 + Code/Chapter 31/TextControls/TextControls.sln | 20 + Code/Chapter 31/TextControls/TextControls.suo | Bin 0 -> 38400 bytes .../TextControls/TextControls.vbproj | 127 + .../WPFControlEvents/Application.xaml | 8 + .../WPFControlEvents/Application.xaml.vb | 6 + .../WPFControlEvents/MainWindow.xaml | 20 + .../WPFControlEvents/MainWindow.xaml.vb | 28 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WPFControlEvents/WPFControlEvents.sln | 20 + .../WPFControlEvents/WPFControlEvents.suo | Bin 0 -> 32256 bytes .../WPFControlEvents/WPFControlEvents.vbproj | 127 + Code/Chapter 31/WindowFrame.xaml | 44 + .../AnimatedButtonWithDiscreteKeyFrames.xaml | 24 + .../AnimatedLabel/AnimatedLabel.sln | 20 + .../AnimatedLabel/AnimatedLabel.suo | Bin 0 -> 26624 bytes .../AnimatedLabel/AnimatedLabel.vbproj | 127 + .../Chapter 32/AnimatedLabel/Application.xaml | 8 + .../AnimatedLabel/Application.xaml.vb | 6 + Code/Chapter 32/AnimatedLabel/MainWindow.xaml | 21 + .../AnimatedLabel/MainWindow.xaml.vb | 30 + .../AnimatedLabel/My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../AnimatedLabel/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 32/AnimationInXaml.xaml | 17 + .../ControlTemplates/Application.xaml | 8 + .../ControlTemplates/Application.xaml.vb | 6 + .../ControlTemplates/ControlTemplates.sln | 20 + .../ControlTemplates/ControlTemplates.suo | Bin 0 -> 30208 bytes .../ControlTemplates/ControlTemplates.vbproj | 127 + .../ControlTemplates.vbproj.user | 5 + .../ControlTemplates/MainWindow.xaml | 48 + .../ControlTemplates/MainWindow.xaml.vb | 5 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 32/FunWithBrushes.xaml | 68 + Code/Chapter 32/FunWithDrawingGeometries.xaml | 37 + .../FunWithResources/Application.xaml | 8 + .../FunWithResources/Application.xaml.vb | 6 + .../FunWithResources/FunWithResources.sln | 20 + .../FunWithResources/FunWithResources.suo | Bin 0 -> 27648 bytes .../FunWithResources/FunWithResources.vbproj | 130 + .../FunWithResources/IntertechBlue.gif | Bin 0 -> 1145 bytes .../FunWithResources/MainWindow.xaml | 51 + .../FunWithResources/MainWindow.xaml.vb | 3 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Application.xaml | 8 + .../Application.xaml.vb | 6 + .../FunWithSystemWindowsShapes.sln | 20 + .../FunWithSystemWindowsShapes.suo | Bin 0 -> 23040 bytes .../FunWithSystemWindowsShapes.vbproj | 127 + .../MainWindow.xaml | 24 + .../MainWindow.xaml.vb | 8 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 32/FunWithTransformations.xaml | 46 + Code/Chapter 32/Gooseberry0007.JPG | Bin 0 -> 490385 bytes Code/Chapter 32/IntertechBlue.gif | Bin 0 -> 1145 bytes .../SpinButtonWithLinearKeyFrames.xaml | 29 + Code/Chapter 32/StyleWithTriggers.xaml | 30 + .../StylesAtRuntime/Application.xaml | 8 + .../StylesAtRuntime/Application.xaml.vb | 6 + .../StylesAtRuntime/MainWindow.xaml | 52 + .../StylesAtRuntime/MainWindow.xaml.vb | 19 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../StylesAtRuntime/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../StylesAtRuntime/StylesAtRuntime.sln | 20 + .../StylesAtRuntime/StylesAtRuntime.suo | Bin 0 -> 27648 bytes .../StylesAtRuntime/StylesAtRuntime.vbproj | 127 + .../WPFGraphicsOptions/Application.xaml | 8 + .../WPFGraphicsOptions/Application.xaml.vb | 6 + .../WPFGraphicsOptions/MainWindow.xaml | 29 + .../WPFGraphicsOptions/MainWindow.xaml.vb | 49 + .../My Project/AssemblyInfo.vb | 59 + .../My Project/MyExtensions/MyWpfExtension.vb | 121 + .../My Project/Resources.Designer.vb | 62 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../WPFGraphicsOptions/MyCustomRenderer.vb | 34 + .../WPFGraphicsOptions/WPFGraphicsOptions.sln | 20 + .../WPFGraphicsOptions/WPFGraphicsOptions.suo | Bin 0 -> 21504 bytes .../WPFGraphicsOptions.vbproj | 128 + .../WPFGraphicsOptions.vbproj.user | 5 + .../Chapter 33/CarsWebSite/ClassicAspPage.asp | 19 + Code/Chapter 33/CarsWebSite/default.htm | 49 + .../CodeBehindPageModel/Bin/AutoLotDAL.dll | Bin 0 -> 17920 bytes .../Bin/AutoLotDAL.dll.refresh | Bin 0 -> 106 bytes .../CodeBehindPageModel/Bin/AutoLotDAL.pdb | Bin 0 -> 42496 bytes .../CodeBehindPageModel/Bin/AutoLotDAL.xml | 24 + .../CodeBehindPageModel/Default.aspx | 26 + .../CodeBehindPageModel/Default.aspx.vb | 16 + .../Chapter 33/CodeBehindPageModel/web.config | 115 + .../FunWithPageMembers/Default.aspx | 31 + .../FunWithPageMembers/Default.aspx.vb | 55 + Code/Chapter 33/FunWithPageMembers/web.config | 115 + Code/Chapter 33/PageLifeCycle/Default.aspx | 23 + Code/Chapter 33/PageLifeCycle/Default.aspx.vb | 32 + Code/Chapter 33/PageLifeCycle/web.config | 115 + Code/Chapter 33/SinglePageModel/Default.aspx | 36 + Code/Chapter 33/SinglePageModel/Web.config | 92 + .../SinglePageModel/bin/AutoLotDAL.dll | Bin 0 -> 17920 bytes Code/Chapter 34/AspNetCarsSite/Ads.xml | 14 + Code/Chapter 34/AspNetCarsSite/BuildCar.aspx | 47 + .../AspNetCarsSite/BuildCar.aspx.vb | 12 + Code/Chapter 34/AspNetCarsSite/CAR.GIF | Bin 0 -> 3938 bytes Code/Chapter 34/AspNetCarsSite/Default.aspx | 11 + .../Chapter 34/AspNetCarsSite/Default.aspx.vb | 5 + Code/Chapter 34/AspNetCarsSite/Inventory.aspx | 51 + .../AspNetCarsSite/Inventory.aspx.vb | 5 + .../AspNetCarsSite/MasterPage.master | 48 + .../AspNetCarsSite/MasterPage.master.vb | 5 + Code/Chapter 34/AspNetCarsSite/SlugBug.jpg | Bin 0 -> 7317 bytes Code/Chapter 34/AspNetCarsSite/Web.sitemap | 8 + Code/Chapter 34/AspNetCarsSite/web.config | 120 + Code/Chapter 34/DynamicCtrls/Default.aspx | 33 + Code/Chapter 34/DynamicCtrls/Default.aspx.vb | 56 + Code/Chapter 34/DynamicCtrls/web.config | 115 + .../App_Themes/BasicGreen/BasicGreen.skin | 21 + .../App_Themes/CrazyOrange/CrazyOrange.skin | 40 + Code/Chapter 34/FunWithThemes/Default.aspx | 36 + Code/Chapter 34/FunWithThemes/Default.aspx.vb | 33 + Code/Chapter 34/FunWithThemes/web.config | 115 + Code/Chapter 34/ValidatorCtrls/Default.aspx | 54 + .../Chapter 34/ValidatorCtrls/Default.aspx.vb | 8 + Code/Chapter 34/ValidatorCtrls/web.config | 115 + .../AppState/App_Code/CarLotInfo.vb | 19 + Code/Chapter 35/AppState/Default.aspx | 33 + Code/Chapter 35/AppState/Default.aspx.vb | 50 + Code/Chapter 35/AppState/Global.asax | 35 + Code/Chapter 35/AppState/web.config | 115 + Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll | Bin 0 -> 17920 bytes .../CacheState/Bin/AutoLotDAL.dll.refresh | Bin 0 -> 106 bytes Code/Chapter 35/CacheState/Bin/AutoLotDAL.pdb | Bin 0 -> 42496 bytes Code/Chapter 35/CacheState/Bin/AutoLotDAL.xml | 24 + Code/Chapter 35/CacheState/Default.aspx | 47 + Code/Chapter 35/CacheState/Default.aspx.vb | 39 + Code/Chapter 35/CacheState/Global.asax | 72 + Code/Chapter 35/CacheState/web.config | 115 + Code/Chapter 35/CookieStateApp/Default.aspx | 34 + .../Chapter 35/CookieStateApp/Default.aspx.vb | 26 + Code/Chapter 35/CookieStateApp/web.config | 115 + .../FunWithProfiles/App_Code/UserAddress.vb | 9 + Code/Chapter 35/FunWithProfiles/Default.aspx | 34 + .../FunWithProfiles/Default.aspx.vb | 27 + Code/Chapter 35/FunWithProfiles/web.config | 121 + .../SessionState/App_Code/UserShoppingCart.vb | 20 + Code/Chapter 35/SessionState/Default.aspx | 52 + Code/Chapter 35/SessionState/Default.aspx.vb | 30 + Code/Chapter 35/SessionState/Global.asax | 31 + Code/Chapter 35/SessionState/web.config | 115 + .../SimpleStateExample/Default.aspx | 25 + .../SimpleStateExample/Default.aspx.vb | 38 + Code/Chapter 35/SimpleStateExample/web.config | 115 + Code/Chapter 35/ViewStateApp/Default.aspx | 29 + Code/Chapter 35/ViewStateApp/Default.aspx.vb | 26 + Code/Chapter 35/ViewStateApp/web.config | 115 + .../Chapter 4/FunWithArrays/FunWithArrays.sln | 20 + .../Chapter 4/FunWithArrays/FunWithArrays.suo | Bin 0 -> 17408 bytes .../FunWithArrays/FunWithArrays.vbproj | 134 + .../FunWithArrays/FunWithArrays.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../FunWithArrays/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithArrays/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 4/FunWithArrays/Program.vb | 165 + Code/Chapter 4/FunWithEnums/FunWithEnums.sln | 20 + Code/Chapter 4/FunWithEnums/FunWithEnums.suo | Bin 0 -> 20992 bytes .../FunWithEnums/FunWithEnums.vbproj | 134 + .../FunWithEnums/FunWithEnums.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../FunWithEnums/My Project/Application.myapp | 10 + .../FunWithEnums/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithEnums/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../FunWithEnums/My Project/Settings.settings | 7 + Code/Chapter 4/FunWithEnums/Program.vb | 73 + .../FunWithMethods/FunWithMethods.sln | 20 + .../FunWithMethods/FunWithMethods.suo | Bin 0 -> 16896 bytes .../FunWithMethods/FunWithMethods.vbproj | 135 + .../FunWithMethods/FunWithMethods.vbproj.user | 17 + .../FunWithMethods/HelperFunctions.vb | 63 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../FunWithMethods/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../FunWithMethods/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 4/FunWithMethods/Program.vb | 54 + .../FunWithStructures/FunWithStructures.sln | 20 + .../FunWithStructures/FunWithStructures.suo | Bin 0 -> 17920 bytes .../FunWithStructures.vbproj | 134 + .../FunWithStructures.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 4/FunWithStructures/Program.vb | 43 + .../MethodOverloading/MethodOverloading.sln | 20 + .../MethodOverloading/MethodOverloading.suo | Bin 0 -> 16384 bytes .../MethodOverloading.vbproj | 139 + .../MethodOverloading.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 4/MethodOverloading/Program.vb | 58 + Code/Chapter 5/ConstData/ConstData.sln | 20 + Code/Chapter 5/ConstData/ConstData.suo | Bin 0 -> 22528 bytes Code/Chapter 5/ConstData/ConstData.vbproj | 134 + .../Chapter 5/ConstData/ConstData.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../ConstData/My Project/Application.myapp | 10 + .../ConstData/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ConstData/My Project/Resources.resx | 117 + .../ConstData/My Project/Settings.Designer.vb | 73 + .../ConstData/My Project/Settings.settings | 7 + Code/Chapter 5/ConstData/Program.vb | 33 + .../Documentation.chm | Bin 0 -> 44810 bytes .../EmployeeApp Documentation/ndoc_build.log | 100 + .../ndoc_msdn_temp/CFW.gif | Bin 0 -> 588 bytes .../C_EmployeeApp_Employee_ctor_.html | 135 + .../C_EmployeeApp_Employee_ctor_c97a4a35.html | 137 + .../ndoc_msdn_temp/Caution.gif | Bin 0 -> 924 bytes .../ndoc_msdn_temp/Documentation.hhc | 1 + .../ndoc_msdn_temp/Documentation.hhk | 1 + .../ndoc_msdn_temp/Documentation.hhp | 40 + .../ndoc_msdn_temp/Documentation.log | 14 + .../ndoc_msdn_temp/Help1NamespaceMap.xml | 269 ++ .../ndoc_msdn_temp/Help1NamespaceMap.xsd | 26 + .../ndoc_msdn_temp/Hier_N_EmployeeApp.html | 86 + .../M_EmployeeApp_Employee_DisplayStats.html | 138 + .../M_EmployeeApp_Employee_GiveBonus.html | 140 + .../ndoc_msdn_temp/N_EmployeeApp.html | 100 + .../P_EmployeeApp_Employee_Age.html | 137 + .../P_EmployeeApp_Employee_Company.html | 137 + .../P_EmployeeApp_Employee_ID.html | 137 + .../P_EmployeeApp_Employee_Name.html | 137 + .../P_EmployeeApp_Employee_Pay.html | 137 + ...oyeeApp_Employee_SocialSecurityNumber.html | 137 + .../T_EmployeeApp_Employee.html | 137 + .../T_EmployeeApp_Employee_Constructor.html | 125 + .../T_EmployeeApp_Employee_Members.html | 347 ++ .../T_EmployeeApp_Employee_Methods.html | 213 ++ .../T_EmployeeApp_Employee_Properties.html | 191 ++ .../ndoc_msdn_temp/box.gif | Bin 0 -> 129 bytes .../ndoc_msdn_temp/collall.gif | Bin 0 -> 75 bytes .../ndoc_msdn_temp/collapse.gif | Bin 0 -> 197 bytes .../ndoc_msdn_temp/collapse_all.gif | Bin 0 -> 197 bytes .../ndoc_msdn_temp/copycode.gif | Bin 0 -> 578 bytes .../ndoc_msdn_temp/copycodeHighlight.gif | Bin 0 -> 578 bytes .../ndoc_msdn_temp/drpdown.gif | Bin 0 -> 221 bytes .../ndoc_msdn_temp/drpdown_orange.gif | Bin 0 -> 366 bytes .../ndoc_msdn_temp/drpdown_orange_up.gif | Bin 0 -> 364 bytes .../ndoc_msdn_temp/drpup.gif | Bin 0 -> 923 bytes .../ndoc_msdn_temp/exp.gif | Bin 0 -> 200 bytes .../ndoc_msdn_temp/expall.gif | Bin 0 -> 78 bytes .../ndoc_msdn_temp/expand_all.gif | Bin 0 -> 200 bytes .../ndoc_msdn_temp/footer.gif | Bin 0 -> 49 bytes .../ndoc_msdn_temp/greencheck.gif | Bin 0 -> 138 bytes .../ndoc_msdn_temp/greychck.gif | Bin 0 -> 138 bytes .../ndoc_msdn_temp/intclass.gif | Bin 0 -> 1001 bytes .../ndoc_msdn_temp/intdelegate.gif | Bin 0 -> 1043 bytes .../ndoc_msdn_temp/intenumeration.gif | Bin 0 -> 980 bytes .../ndoc_msdn_temp/intevent.gif | Bin 0 -> 956 bytes .../ndoc_msdn_temp/intfield.gif | Bin 0 -> 953 bytes .../ndoc_msdn_temp/intinterface.gif | Bin 0 -> 959 bytes .../ndoc_msdn_temp/intmethod.gif | Bin 0 -> 978 bytes .../ndoc_msdn_temp/intproperty.gif | Bin 0 -> 1036 bytes .../ndoc_msdn_temp/intstructure.gif | Bin 0 -> 1004 bytes .../ndoc_msdn_temp/ndoc.css | 572 ++++ .../ndoc_msdn_temp/ndoc.js | 1458 ++++++++ .../ndoc_msdn_temp/note.gif | Bin 0 -> 123 bytes .../ndoc_msdn_temp/previous_build_details.dat | Bin 0 -> 1353 bytes .../ndoc_msdn_temp/privclass.gif | Bin 0 -> 1010 bytes .../ndoc_msdn_temp/privclass.png | Bin 0 -> 786 bytes .../ndoc_msdn_temp/privdelegate.gif | Bin 0 -> 1045 bytes .../ndoc_msdn_temp/privdelegate.png | Bin 0 -> 768 bytes .../ndoc_msdn_temp/privenumeration.gif | Bin 0 -> 597 bytes .../ndoc_msdn_temp/privenumeration.png | Bin 0 -> 654 bytes .../ndoc_msdn_temp/privevent.gif | Bin 0 -> 580 bytes .../ndoc_msdn_temp/privevent.png | Bin 0 -> 689 bytes .../ndoc_msdn_temp/privfield.gif | Bin 0 -> 574 bytes .../ndoc_msdn_temp/privfield.png | Bin 0 -> 648 bytes .../ndoc_msdn_temp/privinterface.gif | Bin 0 -> 585 bytes .../ndoc_msdn_temp/privinterface.png | Bin 0 -> 661 bytes .../ndoc_msdn_temp/privmethod.gif | Bin 0 -> 603 bytes .../ndoc_msdn_temp/privmethod.png | Bin 0 -> 736 bytes .../ndoc_msdn_temp/privovermethod.gif | Bin 0 -> 596 bytes .../ndoc_msdn_temp/privovermethod.png | Bin 0 -> 703 bytes .../ndoc_msdn_temp/privproperty.gif | Bin 0 -> 1054 bytes .../ndoc_msdn_temp/privproperty.png | Bin 0 -> 855 bytes .../ndoc_msdn_temp/privstructure.gif | Bin 0 -> 1017 bytes .../ndoc_msdn_temp/privstructure.png | Bin 0 -> 801 bytes .../ndoc_msdn_temp/protclass.gif | Bin 0 -> 992 bytes .../ndoc_msdn_temp/protclass.png | Bin 0 -> 736 bytes .../ndoc_msdn_temp/protdelegate.gif | Bin 0 -> 1041 bytes .../ndoc_msdn_temp/protdelegate.png | Bin 0 -> 765 bytes .../ndoc_msdn_temp/protenumeration.gif | Bin 0 -> 583 bytes .../ndoc_msdn_temp/protenumeration.png | Bin 0 -> 642 bytes .../ndoc_msdn_temp/protevent.gif | Bin 0 -> 564 bytes .../ndoc_msdn_temp/protfield.gif | Bin 0 -> 559 bytes .../ndoc_msdn_temp/protfield.png | Bin 0 -> 643 bytes .../ndoc_msdn_temp/protinterface.gif | Bin 0 -> 562 bytes .../ndoc_msdn_temp/protinterface.png | Bin 0 -> 629 bytes .../ndoc_msdn_temp/protmethod.gif | Bin 0 -> 936 bytes .../ndoc_msdn_temp/protoperator.gif | Bin 0 -> 949 bytes .../ndoc_msdn_temp/protovermethod.gif | Bin 0 -> 596 bytes .../ndoc_msdn_temp/protovermethod.png | Bin 0 -> 737 bytes .../ndoc_msdn_temp/protproperty.gif | Bin 0 -> 1039 bytes .../ndoc_msdn_temp/protstructure.gif | Bin 0 -> 1008 bytes .../ndoc_msdn_temp/protstructure.png | Bin 0 -> 797 bytes .../ndoc_msdn_temp/pubclass.gif | Bin 0 -> 368 bytes .../ndoc_msdn_temp/pubclass.png | Bin 0 -> 627 bytes .../ndoc_msdn_temp/pubdelegate.gif | Bin 0 -> 1041 bytes .../ndoc_msdn_temp/pubdelegate.png | Bin 0 -> 711 bytes .../ndoc_msdn_temp/pubenumeration.gif | Bin 0 -> 339 bytes .../ndoc_msdn_temp/pubenumeration.png | Bin 0 -> 442 bytes .../ndoc_msdn_temp/pubevent.gif | Bin 0 -> 919 bytes .../ndoc_msdn_temp/pubfield.gif | Bin 0 -> 310 bytes .../ndoc_msdn_temp/pubfield.png | Bin 0 -> 419 bytes .../ndoc_msdn_temp/pubinterface.gif | Bin 0 -> 314 bytes .../ndoc_msdn_temp/pubinterface.png | Bin 0 -> 431 bytes .../ndoc_msdn_temp/pubmethod.gif | Bin 0 -> 931 bytes .../ndoc_msdn_temp/puboperator.gif | Bin 0 -> 906 bytes .../ndoc_msdn_temp/pubovermethod.gif | Bin 0 -> 351 bytes .../ndoc_msdn_temp/pubovermethod.png | Bin 0 -> 566 bytes .../ndoc_msdn_temp/pubproperty.gif | Bin 0 -> 609 bytes .../ndoc_msdn_temp/pubstructure.gif | Bin 0 -> 978 bytes .../ndoc_msdn_temp/sdkLinkManager.html | 168 + .../ndoc_msdn_temp/security.gif | Bin 0 -> 183 bytes .../ndoc_msdn_temp/static.gif | Bin 0 -> 1031 bytes .../ndoc_msdn_temp/tooltip.htc | 765 +++++ .../EmployeeApp Documentation/ndoc_qa.log | 30 + .../EmployeeApp/Employee.Internal.vb | 157 + Code/Chapter 5/EmployeeApp/Employee.vb | 31 + Code/Chapter 5/EmployeeApp/EmployeeApp.cd | 11 + Code/Chapter 5/EmployeeApp/EmployeeApp.sln | 20 + Code/Chapter 5/EmployeeApp/EmployeeApp.suo | Bin 0 -> 22016 bytes Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj | 137 + .../EmployeeApp/EmployeeApp.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../EmployeeApp/My Project/Application.myapp | 10 + .../EmployeeApp/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../EmployeeApp/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../EmployeeApp/My Project/Settings.settings | 7 + Code/Chapter 5/EmployeeApp/Program.vb | 16 + .../My Project/Application.Designer.vb | 13 + .../SharedData/My Project/Application.myapp | 10 + .../SharedData/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SharedData/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../SharedData/My Project/Settings.settings | 7 + Code/Chapter 5/SharedData/Program.vb | 18 + Code/Chapter 5/SharedData/SavingsAccount.vb | 31 + Code/Chapter 5/SharedData/SharedData.sln | 20 + Code/Chapter 5/SharedData/SharedData.suo | Bin 0 -> 18432 bytes Code/Chapter 5/SharedData/SharedData.vbproj | 135 + .../SharedData/SharedData.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SharedMethods/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SharedMethods/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 5/SharedMethods/Program.vb | 23 + .../Chapter 5/SharedMethods/SharedMethods.sln | 20 + .../Chapter 5/SharedMethods/SharedMethods.suo | Bin 0 -> 17920 bytes .../SharedMethods/SharedMethods.vbproj | 139 + .../SharedMethods/SharedMethods.vbproj.user | 17 + Code/Chapter 5/SharedMethods/Teenager.vb | 14 + Code/Chapter 5/SimpleClassExample/Car.vb | 34 + .../SimpleClassExample/Motorcycle.vb | 45 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 5/SimpleClassExample/Program.vb | 41 + .../SimpleClassExample/SimpleClassExample.sln | 20 + .../SimpleClassExample/SimpleClassExample.suo | Bin 0 -> 18944 bytes .../SimpleClassExample.vbproj | 136 + .../SimpleClassExample.vbproj.user | 17 + .../BasicInheritance/BasicInheritance.sln | 20 + .../BasicInheritance/BasicInheritance.suo | Bin 0 -> 20480 bytes .../BasicInheritance/BasicInheritance.vbproj | 137 + .../BasicInheritance.vbproj.user | 17 + Code/Chapter 6/BasicInheritance/Car.vb | 24 + Code/Chapter 6/BasicInheritance/Cars.cd | 25 + Code/Chapter 6/BasicInheritance/MiniVan.vb | 12 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 6/BasicInheritance/Program.vb | 24 + Code/Chapter 6/Employees/Employee.Internal.vb | 154 + Code/Chapter 6/Employees/Employee.vb | 64 + Code/Chapter 6/Employees/Employees.cd | 55 + Code/Chapter 6/Employees/Employees.sln | 20 + Code/Chapter 6/Employees/Employees.suo | Bin 0 -> 23552 bytes Code/Chapter 6/Employees/Employees.vbproj | 140 + .../Chapter 6/Employees/Employees.vbproj.user | 17 + Code/Chapter 6/Employees/Manager.vb | 40 + .../My Project/Application.Designer.vb | 13 + .../Employees/My Project/Application.myapp | 10 + .../Employees/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../Employees/My Project/Resources.resx | 117 + .../Employees/My Project/Settings.Designer.vb | 73 + .../Employees/My Project/Settings.settings | 7 + Code/Chapter 6/Employees/PTSalesPerson.vb | 11 + Code/Chapter 6/Employees/Program.vb | 68 + Code/Chapter 6/Employees/SalesPerson.vb | 52 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ObjectOverrides/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ObjectOverrides/ObjectOverrides.sln | 20 + .../ObjectOverrides/ObjectOverrides.suo | Bin 0 -> 20480 bytes .../ObjectOverrides/ObjectOverrides.vbproj | 135 + .../ObjectOverrides.vbproj.user | 17 + Code/Chapter 6/ObjectOverrides/Person.vb | 53 + Code/Chapter 6/ObjectOverrides/Program.vb | 49 + .../Shapes/My Project/Application.Designer.vb | 13 + .../Shapes/My Project/Application.myapp | 10 + .../Shapes/My Project/AssemblyInfo.vb | 35 + .../Shapes/My Project/Resources.Designer.vb | 63 + .../Shapes/My Project/Resources.resx | 117 + .../Shapes/My Project/Settings.Designer.vb | 73 + .../Shapes/My Project/Settings.settings | 7 + Code/Chapter 6/Shapes/MyShapes.vb | 41 + Code/Chapter 6/Shapes/Program.vb | 26 + Code/Chapter 6/Shapes/Shape.vb | 22 + Code/Chapter 6/Shapes/Shapes.cd | 32 + Code/Chapter 6/Shapes/Shapes.sln | 20 + Code/Chapter 6/Shapes/Shapes.suo | Bin 0 -> 21504 bytes Code/Chapter 6/Shapes/Shapes.vbproj | 137 + Code/Chapter 6/Shapes/Shapes.vbproj.user | 17 + Code/Chapter 7/CustomException/Car.vb | 58 + .../CustomException/CarIsDeadException.vb | 54 + .../CustomException/CustomException.sln | 20 + .../CustomException/CustomException.suo | Bin 0 -> 20992 bytes .../CustomException/CustomException.vbproj | 137 + .../CustomException.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CustomException/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 7/CustomException/Program.vb | 47 + Code/Chapter 7/CustomException/Radio.vb | 9 + Code/Chapter 7/SimpleException/Car.vb | 55 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleException/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 7/SimpleException/Program.vb | 38 + Code/Chapter 7/SimpleException/Radio.vb | 10 + .../SimpleException/SimpleException.sln | 20 + .../SimpleException/SimpleException.suo | Bin 0 -> 18432 bytes .../SimpleException/SimpleException.vbproj | 136 + .../SimpleException.vbproj.user | 17 + Code/Chapter 7/Vb6StyleErrorHandling/Car.vb | 58 + .../CarIsDeadException.vb | 18 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../Vb6StyleErrorHandling/Program.vb | 22 + Code/Chapter 7/Vb6StyleErrorHandling/Radio.vb | 9 + .../Vb6StyleErrorHandling.sln | 20 + .../Vb6StyleErrorHandling.suo | Bin 0 -> 18432 bytes .../Vb6StyleErrorHandling.vbproj | 100 + .../Vb6StyleErrorHandling.vbproj.user | 5 + .../FinalizableDisposableClass.sln | 20 + .../FinalizableDisposableClass.suo | Bin 0 -> 19456 bytes .../FinalizableDisposableClass.vbproj | 135 + .../FinalizableDisposableClass.vbproj.user | 17 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../MyResourceWrapper.vb | 33 + .../FinalizableDisposableClass/Program.vb | 12 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SimpleDispose/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleDispose/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleDispose/MyResourceWrapper.vb | 14 + Code/Chapter 8/SimpleDispose/Program.vb | 20 + .../Chapter 8/SimpleDispose/SimpleDispose.sln | 20 + .../Chapter 8/SimpleDispose/SimpleDispose.suo | Bin 0 -> 16896 bytes .../SimpleDispose/SimpleDispose.vbproj | 98 + .../SimpleDispose/SimpleDispose.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../SimpleFinalize/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../SimpleFinalize/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../SimpleFinalize/MyResourceWrapper.vb | 13 + Code/Chapter 8/SimpleFinalize/Program.vb | 12 + .../SimpleFinalize/SimpleFinalize.sln | 20 + .../SimpleFinalize/SimpleFinalize.suo | Bin 0 -> 16384 bytes .../SimpleFinalize/SimpleFinalize.vbproj | 98 + .../SimpleFinalize/SimpleFinalize.vbproj.user | 5 + Code/Chapter 8/SimpleGC/Car.vb | 16 + .../My Project/Application.Designer.vb | 13 + .../SimpleGC/My Project/Application.myapp | 10 + .../SimpleGC/My Project/AssemblyInfo.vb | 35 + .../SimpleGC/My Project/Resources.Designer.vb | 63 + .../SimpleGC/My Project/Resources.resx | 117 + .../SimpleGC/My Project/Settings.Designer.vb | 73 + .../SimpleGC/My Project/Settings.settings | 7 + Code/Chapter 8/SimpleGC/Program.vb | 59 + Code/Chapter 8/SimpleGC/SimpleGC.sln | 20 + Code/Chapter 8/SimpleGC/SimpleGC.suo | Bin 0 -> 16384 bytes Code/Chapter 8/SimpleGC/SimpleGC.vbproj | 135 + Code/Chapter 8/SimpleGC/SimpleGC.vbproj.user | 17 + .../CloneablePoint/CloneablePoint.sln | 20 + .../CloneablePoint/CloneablePoint.suo | Bin 0 -> 24576 bytes .../CloneablePoint/CloneablePoint.vbproj | 98 + .../CloneablePoint/CloneablePoint.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../CloneablePoint/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CloneablePoint/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 9/CloneablePoint/Point.vb | 47 + Code/Chapter 9/CloneablePoint/Program.vb | 24 + Code/Chapter 9/CollectionTypes/Car.vb | 129 + .../CollectionTypes/CarIsDeadException.vb | 55 + .../CollectionTypes/CollectionTypes.sln | 20 + .../CollectionTypes/CollectionTypes.suo | Bin 0 -> 25088 bytes .../CollectionTypes/CollectionTypes.vbproj | 95 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 62 + .../CollectionTypes/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 9/CollectionTypes/Program.vb | 100 + Code/Chapter 9/CollectionTypes/Radio.vb | 9 + Code/Chapter 9/ComparableCar/Car.vb | 129 + .../ComparableCar/CarIsDeadException.vb | 55 + .../Chapter 9/ComparableCar/ComparableCar.sln | 20 + .../Chapter 9/ComparableCar/ComparableCar.suo | Bin 0 -> 27136 bytes .../ComparableCar/ComparableCar.vbproj | 101 + .../ComparableCar/ComparableCar.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../ComparableCar/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../ComparableCar/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../ComparableCar/PetNameComparer.vb | 16 + Code/Chapter 9/ComparableCar/Program.vb | 38 + Code/Chapter 9/ComparableCar/Radio.vb | 9 + Code/Chapter 9/CustomEnumerator/Car.vb | 74 + .../CustomEnumerator/CustomEnumerator.sln | 20 + .../CustomEnumerator/CustomEnumerator.suo | Bin 0 -> 26112 bytes .../CustomEnumerator/CustomEnumerator.vbproj | 100 + .../CustomEnumerator.vbproj.user | 5 + Code/Chapter 9/CustomEnumerator/Garage.vb | 19 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 9/CustomEnumerator/Program.vb | 22 + Code/Chapter 9/CustomEnumerator/Radio.vb | 9 + .../CustomInterface/CustomInterface.sln | 20 + .../CustomInterface/CustomInterface.suo | Bin 0 -> 23040 bytes .../CustomInterface/CustomInterface.vbproj | 103 + .../CustomInterface.vbproj.user | 5 + Code/Chapter 9/CustomInterface/IPointy.vb | 9 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../CustomInterface/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 9/CustomInterface/MyShapes.cd | 70 + Code/Chapter 9/CustomInterface/MyShapes.vb | 63 + .../CustomInterface/OtherPointyItems.vb | 32 + Code/Chapter 9/CustomInterface/Program.vb | 65 + Code/Chapter 9/CustomInterface/Shape.vb | 22 + Code/Chapter 9/CustomInterface/Triangle.vb | 20 + Code/Chapter 9/EventInterface/Car.vb | 64 + Code/Chapter 9/EventInterface/CarEventSink.vb | 18 + .../EventInterface/EventInterface.sln | 20 + .../EventInterface/EventInterface.suo | Bin 0 -> 20992 bytes .../EventInterface/EventInterface.vbproj | 133 + .../EventInterface/EventInterface.vbproj.user | 17 + Code/Chapter 9/EventInterface/Interfaces.vb | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../EventInterface/My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../EventInterface/My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + Code/Chapter 9/EventInterface/Program.vb | 32 + Code/Chapter 9/EventInterface/Radio.vb | 12 + .../InterfaceHierarchy/InterfaceHierarchy.sln | 20 + .../InterfaceHierarchy/InterfaceHierarchy.suo | Bin 0 -> 21504 bytes .../InterfaceHierarchy.vbproj | 99 + .../InterfaceHierarchy.vbproj.user | 5 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../InterfaceHierarchy/MyInterfaces.vb | 13 + Code/Chapter 9/InterfaceHierarchy/Program.vb | 19 + .../InterfaceHierarchy/SuperShape.vb | 14 + .../InterfaceNameClash/BlackAndWhiteBitmap.vb | 17 + .../InterfaceNameClash/InterfaceNameClash.sln | 20 + .../InterfaceNameClash/InterfaceNameClash.suo | Bin 0 -> 23040 bytes .../InterfaceNameClash.vbproj | 101 + .../InterfaceNameClash.vbproj.user | 5 + Code/Chapter 9/InterfaceNameClash/Line.vb | 10 + .../My Project/Application.Designer.vb | 13 + .../My Project/Application.myapp | 10 + .../My Project/AssemblyInfo.vb | 35 + .../My Project/Resources.Designer.vb | 63 + .../My Project/Resources.resx | 117 + .../My Project/Settings.Designer.vb | 73 + .../My Project/Settings.settings | 7 + .../InterfaceNameClash/MyInterfaces.vb | 14 + Code/Chapter 9/InterfaceNameClash/Octagon.vb | 15 + Code/Chapter 9/InterfaceNameClash/Program.vb | 34 + LICENSE.txt | 27 + README.md | 15 + contributing.md | 14 + 2857 files changed, 140902 insertions(+) create mode 100644 9781590598221.jpg create mode 100644 Code/Chapter 1/Calc.cs create mode 100644 Code/Chapter 1/Calc.vb create mode 100644 Code/Chapter 1/ReadMe.txt create mode 100644 Code/Chapter 10/Boxing/Boxing.sln create mode 100644 Code/Chapter 10/Boxing/Boxing.suo create mode 100644 Code/Chapter 10/Boxing/Boxing.vbproj create mode 100644 Code/Chapter 10/Boxing/Boxing.vbproj.user create mode 100644 Code/Chapter 10/Boxing/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/Boxing/My Project/Application.myapp create mode 100644 Code/Chapter 10/Boxing/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/Boxing/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/Boxing/My Project/Resources.resx create mode 100644 Code/Chapter 10/Boxing/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/Boxing/My Project/Settings.settings create mode 100644 Code/Chapter 10/Boxing/Program.vb create mode 100644 Code/Chapter 10/CollectionTypes/Car.vb create mode 100644 Code/Chapter 10/CollectionTypes/CollectionTypes.sln create mode 100644 Code/Chapter 10/CollectionTypes/CollectionTypes.suo create mode 100644 Code/Chapter 10/CollectionTypes/CollectionTypes.vbproj create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Application.myapp create mode 100644 Code/Chapter 10/CollectionTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Resources.resx create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/CollectionTypes/My Project/Settings.settings create mode 100644 Code/Chapter 10/CollectionTypes/PetNameComparer.vb create mode 100644 Code/Chapter 10/CollectionTypes/Program.vb create mode 100644 Code/Chapter 10/CollectionTypes/Radio.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/CarCollection.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.sln create mode 100644 Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.suo create mode 100644 Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj create mode 100644 Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj.user create mode 100644 Code/Chapter 10/CustomGenericCollection/ExampleConstraints.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Application.myapp create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Resources.resx create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/My Project/Settings.settings create mode 100644 Code/Chapter 10/CustomGenericCollection/Program.vb create mode 100644 Code/Chapter 10/CustomGenericCollection/SimpleCars.vb create mode 100644 Code/Chapter 10/GenericDelegate/GenericDelegate.sln create mode 100644 Code/Chapter 10/GenericDelegate/GenericDelegate.suo create mode 100644 Code/Chapter 10/GenericDelegate/GenericDelegate.vbproj create mode 100644 Code/Chapter 10/GenericDelegate/GenericDelegate.vbproj.user create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Application.myapp create mode 100644 Code/Chapter 10/GenericDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Resources.resx create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/GenericDelegate/My Project/Settings.settings create mode 100644 Code/Chapter 10/GenericDelegate/Program.vb create mode 100644 Code/Chapter 10/GenericInterface/GenericInterface.sln create mode 100644 Code/Chapter 10/GenericInterface/GenericInterface.suo create mode 100644 Code/Chapter 10/GenericInterface/GenericInterface.vbproj create mode 100644 Code/Chapter 10/GenericInterface/GenericInterface.vbproj.user create mode 100644 Code/Chapter 10/GenericInterface/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/GenericInterface/My Project/Application.myapp create mode 100644 Code/Chapter 10/GenericInterface/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/GenericInterface/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/GenericInterface/My Project/Resources.resx create mode 100644 Code/Chapter 10/GenericInterface/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/GenericInterface/My Project/Settings.settings create mode 100644 Code/Chapter 10/GenericInterface/Program.vb create mode 100644 Code/Chapter 10/GenericStructure/GenericStructure.sln create mode 100644 Code/Chapter 10/GenericStructure/GenericStructure.suo create mode 100644 Code/Chapter 10/GenericStructure/GenericStructure.vbproj create mode 100644 Code/Chapter 10/GenericStructure/GenericStructure.vbproj.user create mode 100644 Code/Chapter 10/GenericStructure/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/GenericStructure/My Project/Application.myapp create mode 100644 Code/Chapter 10/GenericStructure/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/GenericStructure/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/GenericStructure/My Project/Resources.resx create mode 100644 Code/Chapter 10/GenericStructure/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/GenericStructure/My Project/Settings.settings create mode 100644 Code/Chapter 10/GenericStructure/Point.vb create mode 100644 Code/Chapter 10/GenericStructure/Program.vb create mode 100644 Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.sln create mode 100644 Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.suo create mode 100644 Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj create mode 100644 Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj.user create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Application.myapp create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Resources.resx create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/GenericSwapMethod/My Project/Settings.settings create mode 100644 Code/Chapter 10/GenericSwapMethod/Program.vb create mode 100644 Code/Chapter 10/NullableData/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/NullableData/My Project/Application.myapp create mode 100644 Code/Chapter 10/NullableData/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/NullableData/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/NullableData/My Project/Resources.resx create mode 100644 Code/Chapter 10/NullableData/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/NullableData/My Project/Settings.settings create mode 100644 Code/Chapter 10/NullableData/NullableData.sln create mode 100644 Code/Chapter 10/NullableData/NullableData.suo create mode 100644 Code/Chapter 10/NullableData/NullableData.vbproj create mode 100644 Code/Chapter 10/NullableData/NullableData.vbproj.user create mode 100644 Code/Chapter 10/NullableData/Program.vb create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Application.myapp create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Resources.resx create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/SimpleGenerics/My Project/Settings.settings create mode 100644 Code/Chapter 10/SimpleGenerics/Program.vb create mode 100644 Code/Chapter 10/SimpleGenerics/SimpleGenerics.sln create mode 100644 Code/Chapter 10/SimpleGenerics/SimpleGenerics.suo create mode 100644 Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj create mode 100644 Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj.user create mode 100644 Code/Chapter 10/StronglyTypedCollections/Car.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/CarCollection.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/IntegerCollection.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Application.Designer.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Application.myapp create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Resources.resx create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/My Project/Settings.settings create mode 100644 Code/Chapter 10/StronglyTypedCollections/PeopleCollection.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/Person.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/Program.vb create mode 100644 Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.sln create mode 100644 Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.suo create mode 100644 Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj create mode 100644 Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj.user create mode 100644 Code/Chapter 11/CarDelegate/Car.vb create mode 100644 Code/Chapter 11/CarDelegate/CarDelegate.sln create mode 100644 Code/Chapter 11/CarDelegate/CarDelegate.suo create mode 100644 Code/Chapter 11/CarDelegate/CarDelegate.vbproj create mode 100644 Code/Chapter 11/CarDelegate/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/CarDelegate/My Project/Application.myapp create mode 100644 Code/Chapter 11/CarDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/CarDelegate/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/CarDelegate/My Project/Resources.resx create mode 100644 Code/Chapter 11/CarDelegate/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/CarDelegate/My Project/Settings.settings create mode 100644 Code/Chapter 11/CarDelegate/Program.vb create mode 100644 Code/Chapter 11/CarDelegate/Radio.vb create mode 100644 Code/Chapter 11/CarDelegate/UpgradeLog.XML create mode 100644 Code/Chapter 11/CarEvent/Car.vb create mode 100644 Code/Chapter 11/CarEvent/CarEvent.sln create mode 100644 Code/Chapter 11/CarEvent/CarEvent.suo create mode 100644 Code/Chapter 11/CarEvent/CarEvent.vbproj create mode 100644 Code/Chapter 11/CarEvent/CarEvent.vbproj.user create mode 100644 Code/Chapter 11/CarEvent/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/CarEvent/My Project/Application.myapp create mode 100644 Code/Chapter 11/CarEvent/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/CarEvent/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/CarEvent/My Project/Resources.resx create mode 100644 Code/Chapter 11/CarEvent/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/CarEvent/My Project/Settings.settings create mode 100644 Code/Chapter 11/CarEvent/Program.vb create mode 100644 Code/Chapter 11/CarEvent/Radio.vb create mode 100644 Code/Chapter 11/CustomEvent/Car.vb create mode 100644 Code/Chapter 11/CustomEvent/CarEventArgs.vb create mode 100644 Code/Chapter 11/CustomEvent/CustomEvent.sln create mode 100644 Code/Chapter 11/CustomEvent/CustomEvent.suo create mode 100644 Code/Chapter 11/CustomEvent/CustomEvent.vbproj create mode 100644 Code/Chapter 11/CustomEvent/CustomEvent.vbproj.user create mode 100644 Code/Chapter 11/CustomEvent/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/CustomEvent/My Project/Application.myapp create mode 100644 Code/Chapter 11/CustomEvent/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/CustomEvent/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/CustomEvent/My Project/Resources.resx create mode 100644 Code/Chapter 11/CustomEvent/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/CustomEvent/My Project/Settings.settings create mode 100644 Code/Chapter 11/CustomEvent/Program.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/Car.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/CarEventArgs.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.sln create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.suo create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj.user create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.myapp create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.resx create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.settings create mode 100644 Code/Chapter 11/CustomEventWithCustomDelegate/Program.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/Car.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.sln create mode 100644 Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.suo create mode 100644 Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj create mode 100644 Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj.user create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Application.myapp create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Resources.resx create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/My Project/Settings.settings create mode 100644 Code/Chapter 11/DynamicCarEvents/Program.vb create mode 100644 Code/Chapter 11/DynamicCarEvents/Radio.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/DelegateNoArgs.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.sln create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.suo create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.vbproj create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.myapp create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.resx create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.settings create mode 100644 Code/Chapter 11/LambdaExpressionsMultipleParams/Program.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/Car.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/CarEventArgs.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Application.myapp create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Resources.resx create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/My Project/Settings.settings create mode 100644 Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.sln create mode 100644 Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.suo create mode 100644 Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.vbproj create mode 100644 Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.vbproj.user create mode 100644 Code/Chapter 11/PrimAndProperEvent/Program.vb create mode 100644 Code/Chapter 11/PrimAndProperEvent/Radio.vb create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Application.myapp create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Resources.resx create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/SimpleDelegate/My Project/Settings.settings create mode 100644 Code/Chapter 11/SimpleDelegate/Program.vb create mode 100644 Code/Chapter 11/SimpleDelegate/SimpleDelegate.sln create mode 100644 Code/Chapter 11/SimpleDelegate/SimpleDelegate.suo create mode 100644 Code/Chapter 11/SimpleDelegate/SimpleDelegate.vbproj create mode 100644 Code/Chapter 11/SimpleDelegate/SimpleDelegate.vbproj.user create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.Designer.vb create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.myapp create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.resx create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.settings create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/Program.vb create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.sln create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.suo create mode 100644 Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.vbproj create mode 100644 Code/Chapter 12/Casting/Casting.sln create mode 100644 Code/Chapter 12/Casting/Casting.suo create mode 100644 Code/Chapter 12/Casting/Casting.vbproj create mode 100644 Code/Chapter 12/Casting/Casting.vbproj.user create mode 100644 Code/Chapter 12/Casting/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/Casting/My Project/Application.myapp create mode 100644 Code/Chapter 12/Casting/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/Casting/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/Casting/My Project/Resources.resx create mode 100644 Code/Chapter 12/Casting/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/Casting/My Project/Settings.settings create mode 100644 Code/Chapter 12/Casting/Program.vb create mode 100644 Code/Chapter 12/CustomConversions/CustomConversions.sln create mode 100644 Code/Chapter 12/CustomConversions/CustomConversions.suo create mode 100644 Code/Chapter 12/CustomConversions/CustomConversions.vbproj create mode 100644 Code/Chapter 12/CustomConversions/CustomConversions.vbproj.user create mode 100644 Code/Chapter 12/CustomConversions/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/CustomConversions/My Project/Application.myapp create mode 100644 Code/Chapter 12/CustomConversions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/CustomConversions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/CustomConversions/My Project/Resources.resx create mode 100644 Code/Chapter 12/CustomConversions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/CustomConversions/My Project/Settings.settings create mode 100644 Code/Chapter 12/CustomConversions/MyTypes.vb create mode 100644 Code/Chapter 12/CustomConversions/Program.vb create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Application.myapp create mode 100644 Code/Chapter 12/OverloadedOps/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Resources.resx create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/OverloadedOps/My Project/Settings.settings create mode 100644 Code/Chapter 12/OverloadedOps/MyPoint.vb create mode 100644 Code/Chapter 12/OverloadedOps/OverloadedOps.sln create mode 100644 Code/Chapter 12/OverloadedOps/OverloadedOps.suo create mode 100644 Code/Chapter 12/OverloadedOps/OverloadedOps.vbproj create mode 100644 Code/Chapter 12/OverloadedOps/Program.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Application.myapp create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.resx create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.settings create mode 100644 Code/Chapter 12/RefTypeValTypeParams/Person.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/Program.vb create mode 100644 Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.sln create mode 100644 Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.suo create mode 100644 Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.vbproj create mode 100644 Code/Chapter 12/ValAndRef/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/ValAndRef/My Project/Application.myapp create mode 100644 Code/Chapter 12/ValAndRef/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/ValAndRef/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/ValAndRef/My Project/Resources.resx create mode 100644 Code/Chapter 12/ValAndRef/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/ValAndRef/My Project/Settings.settings create mode 100644 Code/Chapter 12/ValAndRef/MyPoint.vb create mode 100644 Code/Chapter 12/ValAndRef/Program.vb create mode 100644 Code/Chapter 12/ValAndRef/ValAndRef.sln create mode 100644 Code/Chapter 12/ValAndRef/ValAndRef.suo create mode 100644 Code/Chapter 12/ValAndRef/ValAndRef.vbproj create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Application.Designer.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Application.myapp create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.resx create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.settings create mode 100644 Code/Chapter 12/ValTypeContainingRefType/MyRectangle.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/Program.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/ShapeInfo.vb create mode 100644 Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.sln create mode 100644 Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.suo create mode 100644 Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.vbproj create mode 100644 Code/Chapter 13/AnonymousTypes/AnonymousTypes.sln create mode 100644 Code/Chapter 13/AnonymousTypes/AnonymousTypes.suo create mode 100644 Code/Chapter 13/AnonymousTypes/AnonymousTypes.vbproj create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Application.myapp create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Resources.resx create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/AnonymousTypes/My Project/Settings.settings create mode 100644 Code/Chapter 13/AnonymousTypes/Program.vb create mode 100644 Code/Chapter 13/ExtensionMethods/ExtensionMethods.sln create mode 100644 Code/Chapter 13/ExtensionMethods/ExtensionMethods.suo create mode 100644 Code/Chapter 13/ExtensionMethods/ExtensionMethods.vbproj create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Application.myapp create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Resources.resx create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/ExtensionMethods/My Project/Settings.settings create mode 100644 Code/Chapter 13/ExtensionMethods/MyExtensions.vb create mode 100644 Code/Chapter 13/ExtensionMethods/NamespaceTestClass.vb create mode 100644 Code/Chapter 13/ExtensionMethods/Project.vb create mode 100644 Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.sln create mode 100644 Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.suo create mode 100644 Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.vbproj create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Application.myapp create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Resources.resx create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/ImplicitDataTypes/My Project/Settings.settings create mode 100644 Code/Chapter 13/ImplicitDataTypes/Program.vb create mode 100644 Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.sln create mode 100644 Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.suo create mode 100644 Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.vbproj create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Application.myapp create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Resources.resx create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/InterfaceExtensions/My Project/Settings.settings create mode 100644 Code/Chapter 13/InterfaceExtensions/Program.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Application.myapp create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 13/MyExtensionsLibrary/MyExtensions.vb create mode 100644 Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.sln create mode 100644 Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.suo create mode 100644 Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.vbproj create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.myapp create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.resx create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.settings create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.sln create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.suo create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj.user create mode 100644 Code/Chapter 13/MyExtensionsLibraryClient/Program.vb create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Application.Designer.vb create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Application.myapp create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Resources.resx create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 13/ObjectInitializers/My Project/Settings.settings create mode 100644 Code/Chapter 13/ObjectInitializers/ObjectInitializers.sln create mode 100644 Code/Chapter 13/ObjectInitializers/ObjectInitializers.suo create mode 100644 Code/Chapter 13/ObjectInitializers/ObjectInitializers.vbproj create mode 100644 Code/Chapter 13/ObjectInitializers/Point.vb create mode 100644 Code/Chapter 13/ObjectInitializers/Program.vb create mode 100644 Code/Chapter 13/ObjectInitializers/Rectangle.vb create mode 100644 Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.sln create mode 100644 Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.suo create mode 100644 Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.vbproj create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Application.myapp create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.resx create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.settings create mode 100644 Code/Chapter 14/FunWithLinqExpressions/Program.vb create mode 100644 Code/Chapter 14/LinqOverArray/LinqOverArray.sln create mode 100644 Code/Chapter 14/LinqOverArray/LinqOverArray.suo create mode 100644 Code/Chapter 14/LinqOverArray/LinqOverArray.vbproj create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Application.myapp create mode 100644 Code/Chapter 14/LinqOverArray/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Resources.resx create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArray/My Project/Settings.settings create mode 100644 Code/Chapter 14/LinqOverArray/Program.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/Car.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.sln create mode 100644 Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.suo create mode 100644 Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.vbproj create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Application.myapp create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Resources.resx create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/LinqOverArrayList/My Project/Settings.settings create mode 100644 Code/Chapter 14/LinqOverArrayList/Program.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/Car.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.sln create mode 100644 Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.suo create mode 100644 Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.vbproj create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Application.myapp create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.resx create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.settings create mode 100644 Code/Chapter 14/LinqOverCustomObjects/Program.vb create mode 100644 Code/Chapter 14/LinqRetValues/LinqRetValues.sln create mode 100644 Code/Chapter 14/LinqRetValues/LinqRetValues.suo create mode 100644 Code/Chapter 14/LinqRetValues/LinqRetValues.vbproj create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Application.myapp create mode 100644 Code/Chapter 14/LinqRetValues/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Resources.resx create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/LinqRetValues/My Project/Settings.settings create mode 100644 Code/Chapter 14/LinqRetValues/Program.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.sln create mode 100644 Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.suo create mode 100644 Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.vbproj create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Application.Designer.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Application.myapp create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.resx create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.settings create mode 100644 Code/Chapter 14/LinqUsingEnumerable/Program.vb create mode 100644 Code/Chapter 14/LinqUsingEnumerable/VeryComplexQuery.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.sln create mode 100644 Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.suo create mode 100644 Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.vbproj create mode 100644 Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.vbproj.user create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Application.myapp create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Resources.resx create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/My Project/Settings.settings create mode 100644 Code/Chapter 15/AppConfigReaderApp/Program.vb create mode 100644 Code/Chapter 15/AppConfigReaderApp/app.config create mode 100644 Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj create mode 100644 Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj.user create mode 100644 Code/Chapter 15/CSharpCarClient/CSharpCarClient.sln create mode 100644 Code/Chapter 15/CSharpCarClient/CSharpCarClient.suo create mode 100644 Code/Chapter 15/CSharpCarClient/PerformanceCar.cs create mode 100644 Code/Chapter 15/CSharpCarClient/Program.cs create mode 100644 Code/Chapter 15/CSharpCarClient/Properties/AssemblyInfo.cs create mode 100644 Code/Chapter 15/CarLibrary/Car.vb create mode 100644 Code/Chapter 15/CarLibrary/CarLibrary.sln create mode 100644 Code/Chapter 15/CarLibrary/CarLibrary.suo create mode 100644 Code/Chapter 15/CarLibrary/CarLibrary.vbproj create mode 100644 Code/Chapter 15/CarLibrary/CarLibrary.vbproj.user create mode 100644 Code/Chapter 15/CarLibrary/DerivedCars.vb create mode 100644 Code/Chapter 15/CarLibrary/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/CarLibrary/My Project/Application.myapp create mode 100644 Code/Chapter 15/CarLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/CarLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/CarLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 15/CarLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/CarLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 15/CarLibrary/MyTestKeyPair.snk create mode 100644 Code/Chapter 15/CarLibrary/Version 1.0.0.0/CarLibrary.dll create mode 100644 Code/Chapter 15/CodeBaseClient/CodeBaseClient.sln create mode 100644 Code/Chapter 15/CodeBaseClient/CodeBaseClient.suo create mode 100644 Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj create mode 100644 Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj.user create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Application.myapp create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Resources.resx create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/CodeBaseClient/My Project/Settings.settings create mode 100644 Code/Chapter 15/CodeBaseClient/Program.vb create mode 100644 Code/Chapter 15/CodeBaseClient/app.config create mode 100644 Code/Chapter 15/MultifileAssembly/Client.vb create mode 100644 Code/Chapter 15/MultifileAssembly/helicopter.vb create mode 100644 Code/Chapter 15/MultifileAssembly/ufo.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/Class1.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/Class2.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Application.myapp create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/MyCodeLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.sln create mode 100644 Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.suo create mode 100644 Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj create mode 100644 Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj.user create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Application.myapp create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Resources.resx create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/SharedCarLibClient/My Project/Settings.settings create mode 100644 Code/Chapter 15/SharedCarLibClient/Program.vb create mode 100644 Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.sln create mode 100644 Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.suo create mode 100644 Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj create mode 100644 Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj.user create mode 100644 Code/Chapter 15/SharedCarLibClient/app.config create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Application.myapp create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Resources.resx create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 15/Vb2008CarClient/My Project/Settings.settings create mode 100644 Code/Chapter 15/Vb2008CarClient/Program.vb create mode 100644 Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.sln create mode 100644 Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.suo create mode 100644 Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj create mode 100644 Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj.user create mode 100644 Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.sln create mode 100644 Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.suo create mode 100644 Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.vbproj create mode 100644 Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.vbproj.user create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Application.myapp create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/AttributedCarLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 16/AttributedCarLibrary/MyTypes.vb create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/AssemblyInfo.cs create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.cs create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj.user create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.sln create mode 100644 Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.suo create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.sln create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.suo create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj.user create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.myapp create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.resx create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.settings create mode 100644 Code/Chapter 16/Extendable App Example/CommonSnappableTypes/MyTypes.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.resx create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.myapp create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.resx create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.settings create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.sln create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.suo create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj create mode 100644 Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj.user create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/AssemblyInfo.vb create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.sln create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.suo create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vb create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj create mode 100644 Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj.user create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.sln create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.suo create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.vbproj create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.vbproj.user create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.myapp create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.settings create mode 100644 Code/Chapter 16/ExternalAssemblyReflector/Program.vb create mode 100644 Code/Chapter 16/LateBinding/LateBinding.sln create mode 100644 Code/Chapter 16/LateBinding/LateBinding.suo create mode 100644 Code/Chapter 16/LateBinding/LateBinding.vbproj create mode 100644 Code/Chapter 16/LateBinding/LateBinding.vbproj.user create mode 100644 Code/Chapter 16/LateBinding/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/LateBinding/My Project/Application.myapp create mode 100644 Code/Chapter 16/LateBinding/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/LateBinding/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/LateBinding/My Project/Resources.resx create mode 100644 Code/Chapter 16/LateBinding/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/LateBinding/My Project/Settings.settings create mode 100644 Code/Chapter 16/LateBinding/Program.vb create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Application.myapp create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Resources.resx create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/MyTypeViewer/My Project/Settings.settings create mode 100644 Code/Chapter 16/MyTypeViewer/MyTypeViewer.sln create mode 100644 Code/Chapter 16/MyTypeViewer/MyTypeViewer.suo create mode 100644 Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj create mode 100644 Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj.user create mode 100644 Code/Chapter 16/MyTypeViewer/Program.vb create mode 100644 Code/Chapter 16/SharedAssemblyReflector/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/SharedAssemblyReflector/My Project/Application.myapp create mode 100644 Code/Chapter 16/SharedAssemblyReflector/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.settings create mode 100644 Code/Chapter 16/SharedAssemblyReflector/Program.vb create mode 100644 Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.sln create mode 100644 Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.suo create mode 100644 Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.vbproj create mode 100644 Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.vbproj.user create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Application.myapp create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.resx create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.settings create mode 100644 Code/Chapter 16/VehicleDescriptionReader/Program.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.sln create mode 100644 Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.suo create mode 100644 Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj create mode 100644 Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj.user create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.myapp create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.resx create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.settings create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/Project.vb create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.sln create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.suo create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.vbproj create mode 100644 Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.vbproj.user create mode 100644 Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.sln create mode 100644 Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.suo create mode 100644 Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.vbproj create mode 100644 Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.vbproj.user create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Application.Designer.vb create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Application.myapp create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Resources.resx create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 17/AppDomainManipulator/My Project/Settings.settings create mode 100644 Code/Chapter 17/AppDomainManipulator/Program.vb create mode 100644 Code/Chapter 17/ContextManipulator/ContextManipulator.sln create mode 100644 Code/Chapter 17/ContextManipulator/ContextManipulator.suo create mode 100644 Code/Chapter 17/ContextManipulator/ContextManipulator.vbproj create mode 100644 Code/Chapter 17/ContextManipulator/ContextManipulator.vbproj.user create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Application.Designer.vb create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Application.myapp create mode 100644 Code/Chapter 17/ContextManipulator/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Resources.resx create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 17/ContextManipulator/My Project/Settings.settings create mode 100644 Code/Chapter 17/ContextManipulator/Program.vb create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Application.Designer.vb create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Application.myapp create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Resources.resx create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 17/ProcessManipulator/My Project/Settings.settings create mode 100644 Code/Chapter 17/ProcessManipulator/ProcessManipulator.sln create mode 100644 Code/Chapter 17/ProcessManipulator/ProcessManipulator.suo create mode 100644 Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj create mode 100644 Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj.user create mode 100644 Code/Chapter 17/ProcessManipulator/Program.vb create mode 100644 Code/Chapter 18/AddWithThreads/AddWithThreads.sln create mode 100644 Code/Chapter 18/AddWithThreads/AddWithThreads.suo create mode 100644 Code/Chapter 18/AddWithThreads/AddWithThreads.vbproj create mode 100644 Code/Chapter 18/AddWithThreads/AddWithThreads.vbproj.user create mode 100644 Code/Chapter 18/AddWithThreads/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/AddWithThreads/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/AddWithThreads/My Project/Resources.resx create mode 100644 Code/Chapter 18/AddWithThreads/Program.vb create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.sln create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.suo create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj.user create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/AsyncCallbackDelegate/Program.vb create mode 100644 Code/Chapter 18/AsyncDelegate/AsyncDelegate.sln create mode 100644 Code/Chapter 18/AsyncDelegate/AsyncDelegate.suo create mode 100644 Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj create mode 100644 Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj.user create mode 100644 Code/Chapter 18/AsyncDelegate/My Project/Application.Designer.vb create mode 100644 Code/Chapter 18/AsyncDelegate/My Project/Application.myapp create mode 100644 Code/Chapter 18/AsyncDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/AsyncDelegate/Program.vb create mode 100644 Code/Chapter 18/BackgroundThread/BackgroundThread.sln create mode 100644 Code/Chapter 18/BackgroundThread/BackgroundThread.suo create mode 100644 Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj create mode 100644 Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj.user create mode 100644 Code/Chapter 18/BackgroundThread/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/BackgroundThread/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/BackgroundThread/My Project/Resources.resx create mode 100644 Code/Chapter 18/BackgroundThread/Program.vb create mode 100644 Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.sln create mode 100644 Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.suo create mode 100644 Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj create mode 100644 Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj.user create mode 100644 Code/Chapter 18/MultiThreadedPrinting/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.resx create mode 100644 Code/Chapter 18/MultiThreadedPrinting/Program.vb create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.resx create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/Program.vb create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.sln create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.suo create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj create mode 100644 Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj.user create mode 100644 Code/Chapter 18/SyncDelegate/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/SyncDelegate/Program.vb create mode 100644 Code/Chapter 18/SyncDelegate/SyncDelegate.sln create mode 100644 Code/Chapter 18/SyncDelegate/SyncDelegate.suo create mode 100644 Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj create mode 100644 Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj.user create mode 100644 Code/Chapter 18/ThreadPoolApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/ThreadPoolApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/ThreadPoolApp/My Project/Resources.resx create mode 100644 Code/Chapter 18/ThreadPoolApp/Program.vb create mode 100644 Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.sln create mode 100644 Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.suo create mode 100644 Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj create mode 100644 Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj.user create mode 100644 Code/Chapter 18/ThreadStats/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/ThreadStats/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/ThreadStats/My Project/Resources.resx create mode 100644 Code/Chapter 18/ThreadStats/Program.vb create mode 100644 Code/Chapter 18/ThreadStats/ThreadStats.sln create mode 100644 Code/Chapter 18/ThreadStats/ThreadStats.suo create mode 100644 Code/Chapter 18/ThreadStats/ThreadStats.vbproj create mode 100644 Code/Chapter 18/ThreadStats/ThreadStats.vbproj.user create mode 100644 Code/Chapter 18/TimerApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/TimerApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/TimerApp/My Project/Resources.resx create mode 100644 Code/Chapter 18/TimerApp/Program.vb create mode 100644 Code/Chapter 18/TimerApp/TimerApp.sln create mode 100644 Code/Chapter 18/TimerApp/TimerApp.suo create mode 100644 Code/Chapter 18/TimerApp/TimerApp.vbproj create mode 100644 Code/Chapter 18/TimerApp/TimerApp.vbproj.user create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.Designer.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.resx create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.Designer.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.myapp create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.resx create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.settings create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.sln create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.suo create mode 100644 Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.vbproj create mode 100644 Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.sln create mode 100644 Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.suo create mode 100644 Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj create mode 100644 Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj.user create mode 100644 Code/Chapter 19/ComUsableDotNetServer/DotNetCalc.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/DotNetPerson.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Application.Designer.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Application.myapp create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.resx create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.settings create mode 100644 Code/Chapter 19/ComUsableDotNetServer/TestKey.snk create mode 100644 Code/Chapter 19/SimpleComServer/ComCalc.cls create mode 100644 Code/Chapter 19/SimpleComServer/SimpleComServer.dll create mode 100644 Code/Chapter 19/SimpleComServer/SimpleComServer.exp create mode 100644 Code/Chapter 19/SimpleComServer/SimpleComServer.lib create mode 100644 Code/Chapter 19/SimpleComServer/SimpleComServer.vbp create mode 100644 Code/Chapter 19/SimpleComServer/SimpleComServer.vbw create mode 100644 Code/Chapter 19/Vb6ComCarServer/CoCar.cls create mode 100644 Code/Chapter 19/Vb6ComCarServer/Engine.cls create mode 100644 Code/Chapter 19/Vb6ComCarServer/IDriverInfo.cls create mode 100644 Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.dll create mode 100644 Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.exp create mode 100644 Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.lib create mode 100644 Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbp create mode 100644 Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbw create mode 100644 Code/Chapter 19/Vb6_DotNetClient/Form1.frm create mode 100644 Code/Chapter 19/Vb6_DotNetClient/VB6_DotNetClient.exe create mode 100644 Code/Chapter 19/Vb6_DotNetClient/VB6_DotNetClient.vbp create mode 100644 Code/Chapter 19/Vb6_DotNetClient/VB6_DotNetClient.vbw create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Application.myapp create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Resources.resx create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 19/VbNetCarClient/My Project/Settings.settings create mode 100644 Code/Chapter 19/VbNetCarClient/Program.vb create mode 100644 Code/Chapter 19/VbNetCarClient/VbNetCarClient.sln create mode 100644 Code/Chapter 19/VbNetCarClient/VbNetCarClient.suo create mode 100644 Code/Chapter 19/VbNetCarClient/VbNetCarClient.vbproj create mode 100644 Code/Chapter 19/VbNetCarClient/VbNetCarClient.vbproj.user create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.Designer.vb create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.myapp create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.resx create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.settings create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/Program.vb create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.sln create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.suo create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.vbproj create mode 100644 Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.vbproj.user create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Application.myapp create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.resx create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.settings create mode 100644 Code/Chapter 19/VbNetSimpleComClient/My Project/app.manifest create mode 100644 Code/Chapter 19/VbNetSimpleComClient/Program.vb create mode 100644 Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.sln create mode 100644 Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.suo create mode 100644 Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj create mode 100644 Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj.user create mode 100644 Code/Chapter 2/VbcExample/HelloMsg.vb create mode 100644 Code/Chapter 2/VbcExample/TestApp.rsp create mode 100644 Code/Chapter 2/VbcExample/TestApp.vb create mode 100644 Code/Chapter 20/AsyncFileStream/AsyncFileStream.sln create mode 100644 Code/Chapter 20/AsyncFileStream/AsyncFileStream.suo create mode 100644 Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj create mode 100644 Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj.user create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Application.myapp create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Resources.resx create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/AsyncFileStream/My Project/Settings.settings create mode 100644 Code/Chapter 20/AsyncFileStream/Program.vb create mode 100644 Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.sln create mode 100644 Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.suo create mode 100644 Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj create mode 100644 Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj.user create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Application.myapp create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Resources.resx create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/BinaryWriterReader/My Project/Settings.settings create mode 100644 Code/Chapter 20/BinaryWriterReader/Program.vb create mode 100644 Code/Chapter 20/DriveTypeApp/DriveTypeApp.sln create mode 100644 Code/Chapter 20/DriveTypeApp/DriveTypeApp.suo create mode 100644 Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj create mode 100644 Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj.user create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Application.myapp create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Resources.resx create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/DriveTypeApp/My Project/Settings.settings create mode 100644 Code/Chapter 20/DriveTypeApp/Program.vb create mode 100644 Code/Chapter 20/FileStreamApp/FileStreamApp.sln create mode 100644 Code/Chapter 20/FileStreamApp/FileStreamApp.suo create mode 100644 Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj create mode 100644 Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj.user create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Application.myapp create mode 100644 Code/Chapter 20/FileStreamApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Resources.resx create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/FileStreamApp/My Project/Settings.settings create mode 100644 Code/Chapter 20/FileStreamApp/Program.vb create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Application.myapp create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Resources.resx create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryApp/My Project/Settings.settings create mode 100644 Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.sln create mode 100644 Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.suo create mode 100644 Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj create mode 100644 Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj.user create mode 100644 Code/Chapter 20/MyDirectoryApp/Program.vb create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Application.myapp create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.resx create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.settings create mode 100644 Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.sln create mode 100644 Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.suo create mode 100644 Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.vbproj create mode 100644 Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.vbproj.user create mode 100644 Code/Chapter 20/MyDirectoryWatcher/Program.vb create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Application.myapp create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Resources.resx create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/SimpleFileIO/My Project/Settings.settings create mode 100644 Code/Chapter 20/SimpleFileIO/Program.vb create mode 100644 Code/Chapter 20/SimpleFileIO/SimpleFileIO.sln create mode 100644 Code/Chapter 20/SimpleFileIO/SimpleFileIO.suo create mode 100644 Code/Chapter 20/SimpleFileIO/SimpleFileIO.vbproj create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Application.myapp create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.resx create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.settings create mode 100644 Code/Chapter 20/StreamWriterReaderApp/Program.vb create mode 100644 Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.sln create mode 100644 Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.suo create mode 100644 Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.vbproj create mode 100644 Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.vbproj.user create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Application.myapp create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Resources.resx create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 20/StringReaderWriterApp/My Project/Settings.settings create mode 100644 Code/Chapter 20/StringReaderWriterApp/Program.vb create mode 100644 Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.sln create mode 100644 Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.suo create mode 100644 Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj create mode 100644 Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj.user create mode 100644 Code/Chapter 21/CustomSerialization/CustomData.vb create mode 100644 Code/Chapter 21/CustomSerialization/CustomSerialization.sln create mode 100644 Code/Chapter 21/CustomSerialization/CustomSerialization.suo create mode 100644 Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj create mode 100644 Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj.user create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Application.Designer.vb create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Application.myapp create mode 100644 Code/Chapter 21/CustomSerialization/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Resources.resx create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 21/CustomSerialization/My Project/Settings.settings create mode 100644 Code/Chapter 21/CustomSerialization/Program.vb create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Application.Designer.vb create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Application.myapp create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Resources.resx create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 21/SimpleSerialization/My Project/Settings.settings create mode 100644 Code/Chapter 21/SimpleSerialization/Program.vb create mode 100644 Code/Chapter 21/SimpleSerialization/SerializableCars.vb create mode 100644 Code/Chapter 21/SimpleSerialization/SimpleSerialization.sln create mode 100644 Code/Chapter 21/SimpleSerialization/SimpleSerialization.suo create mode 100644 Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj create mode 100644 Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj.user create mode 100644 Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.sln create mode 100644 Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.suo create mode 100644 Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.vbproj create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Application.myapp create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Resources.resx create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/AdoNetTransaction/My Project/Settings.settings create mode 100644 Code/Chapter 22/AdoNetTransaction/Program.vb create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.sln create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.suo create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.vbproj create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.myapp create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.resx create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.settings create mode 100644 Code/Chapter 22/AsyncCmdObjectApp/Program.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.sln create mode 100644 Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.suo create mode 100644 Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.vbproj create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Application.myapp create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Resources.resx create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/My Project/Settings.settings create mode 100644 Code/Chapter 22/AutoLotCUIClient/Program.vb create mode 100644 Code/Chapter 22/AutoLotCUIClient/app.config create mode 100644 Code/Chapter 22/AutoLotDAL/AutoLotDAL.sln create mode 100644 Code/Chapter 22/AutoLotDAL/AutoLotDAL.suo create mode 100644 Code/Chapter 22/AutoLotDAL/AutoLotDAL.vbproj create mode 100644 Code/Chapter 22/AutoLotDAL/InventoryDAL.vb create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Application.myapp create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Resources.resx create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDAL/My Project/Settings.settings create mode 100644 Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.sln create mode 100644 Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.suo create mode 100644 Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.vbproj create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Application.myapp create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Resources.resx create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/AutoLotDataReader/My Project/Settings.settings create mode 100644 Code/Chapter 22/AutoLotDataReader/Program.vb create mode 100644 Code/Chapter 22/DataProviderFactory/DataProviderFactory.sln create mode 100644 Code/Chapter 22/DataProviderFactory/DataProviderFactory.suo create mode 100644 Code/Chapter 22/DataProviderFactory/DataProviderFactory.vbproj create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Application.myapp create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Resources.resx create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/DataProviderFactory/My Project/Settings.settings create mode 100644 Code/Chapter 22/DataProviderFactory/Program.vb create mode 100644 Code/Chapter 22/DataProviderFactory/app.config create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Application.Designer.vb create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Application.myapp create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Resources.resx create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 22/MyConnectionFactory/My Project/Settings.settings create mode 100644 Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.sln create mode 100644 Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.suo create mode 100644 Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.vbproj create mode 100644 Code/Chapter 22/MyConnectionFactory/Program.vb create mode 100644 Code/Chapter 22/MyConnectionFactory/app.config create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.sln create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.suo create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.vbproj create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDAL.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDALDisconnected.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.myapp create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.resx create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.settings create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.sln create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.suo create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.vbproj create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsc create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsd create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xss create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDAL.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDALDisconnected.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.myapp create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.resx create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.settings create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/Wizard Generated DB Objects.cd create mode 100644 Code/Chapter 23/AutoLotDAL (Part 3)/app.config create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.sln create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.suo create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.vbproj create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.myapp create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.resx create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.settings create mode 100644 Code/Chapter 23/FillDataSetWithSqlDataAdapter/Program.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.resx create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.sln create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.suo create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj.user create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.myapp create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.resx create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.settings create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MainForm.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MainForm.resx create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MainForm.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.sln create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.suo create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.vbproj create mode 100644 Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.vbproj.user create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Application.myapp create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.resx create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.settings create mode 100644 Code/Chapter 23/MultitabledDataSetApp/app.config create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Application.myapp create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Resources.resx create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/SimpleDataSet/My Project/Settings.settings create mode 100644 Code/Chapter 23/SimpleDataSet/Program.vb create mode 100644 Code/Chapter 23/SimpleDataSet/SimpleDataSet.sln create mode 100644 Code/Chapter 23/SimpleDataSet/SimpleDataSet.suo create mode 100644 Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj create mode 100644 Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj.user create mode 100644 Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.Designer.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsc create mode 100644 Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsd create mode 100644 Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xss create mode 100644 Code/Chapter 23/VisualDataGridViewApp/MainForm.Designer.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/MainForm.resx create mode 100644 Code/Chapter 23/VisualDataGridViewApp/MainForm.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Application.myapp create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.resx create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.settings create mode 100644 Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.sln create mode 100644 Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.suo create mode 100644 Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj create mode 100644 Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj.user create mode 100644 Code/Chapter 23/VisualDataGridViewApp/Wizard Generated DB Objects.cd create mode 100644 Code/Chapter 23/VisualDataGridViewApp/app.config create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/Car.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.resx create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.myapp create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.resx create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.settings create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.sln create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.suo create mode 100644 Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.vbproj create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/MainForm.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/MainForm.resx create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/MainForm.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.myapp create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.resx create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.settings create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.sln create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.suo create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.vbproj create mode 100644 Code/Chapter 23/WindowsFormsInventoryUI/app.config create mode 100644 Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.sln create mode 100644 Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.suo create mode 100644 Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj create mode 100644 Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj.user create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Application.myapp create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Resources.resx create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/FunWithLinqToXml/My Project/Settings.settings create mode 100644 Code/Chapter 24/FunWithLinqToXml/Program.vb create mode 100644 Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.sln create mode 100644 Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.suo create mode 100644 Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.vbproj create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Application.myapp create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Resources.resx create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/LinqOverDataSet/My Project/Settings.settings create mode 100644 Code/Chapter 24/LinqOverDataSet/Program.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml create mode 100644 Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml.layout create mode 100644 Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.designer.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.sln create mode 100644 Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.suo create mode 100644 Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj create mode 100644 Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj.user create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Application.myapp create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Resources.resx create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/My Project/Settings.settings create mode 100644 Code/Chapter 24/LinqToSqlCrud/Program.vb create mode 100644 Code/Chapter 24/LinqToSqlCrud/app.config create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/LINQ to SQL types.cd create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.sln create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.suo create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.vbproj create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.vbproj.user create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.myapp create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.resx create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.settings create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/Program.vb create mode 100644 Code/Chapter 24/LinqWithSqlMetalGenedCode/autoLotDB.vb create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/Inventory.xml create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.myapp create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.resx create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.settings create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.sln create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.suo create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.vbproj create mode 100644 Code/Chapter 24/NavigationWithAxisProperties/Program.vb create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Inventory.xml create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.myapp create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.resx create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.settings create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.sln create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.suo create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.vbproj create mode 100644 Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Program.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/AutoLotDataContext.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/Inventory.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.myapp create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.resx create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.settings create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/Program.vb create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.sln create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.suo create mode 100644 Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.vbproj create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Application.Designer.vb create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Application.myapp create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.resx create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.settings create mode 100644 Code/Chapter 24/SimpleXmlLiteral/Program.vb create mode 100644 Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.sln create mode 100644 Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.suo create mode 100644 Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.vbproj create mode 100644 Code/Chapter 25/HelloWebService/HelloWebService.asmx create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.sln create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.suo create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj.user create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.myapp create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.resx create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.settings create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Program.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.disco create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.wsdl create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.xsd create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.wsdl create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.xsd create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.svcmap create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/configuration.svcinfo create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/app.config create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.sln create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.suo create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.vbproj create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.myapp create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.resx create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.settings create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/Program.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/app.config create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallService.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.sln create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.suo create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.vbproj create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.myapp create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.resx create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.settings create mode 100644 Code/Chapter 25/MathService/MathClient/MathClient.sln create mode 100644 Code/Chapter 25/MathService/MathClient/MathClient.suo create mode 100644 Code/Chapter 25/MathService/MathClient/MathClient.vbproj create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Application.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Application.myapp create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Resources.resx create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathClient/My Project/Settings.settings create mode 100644 Code/Chapter 25/MathService/MathClient/Program.vb create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.disco create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.wsdl create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.xsd create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.wsdl create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.xsd create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.svcmap create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.vb create mode 100644 Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/configuration.svcinfo create mode 100644 Code/Chapter 25/MathService/MathClient/app.config create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/App.config create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/IBasicMath.vb create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/MathService.vb create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.sln create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.suo create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.vbproj create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.sln create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.suo create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.vbproj create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.myapp create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.resx create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.settings create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.Designer.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.resx create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.vb create mode 100644 Code/Chapter 25/MathService/MathWindowsServiceHost/app.config create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/IAutoLotService.vb create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/VbAutoLotWCFService.vb create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll.refresh create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.pdb create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.xml create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Service.svc create mode 100644 Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Web.config create mode 100644 Code/Chapter 26/CreditCheckApp/CreditCheckApp.sln create mode 100644 Code/Chapter 26/CreditCheckApp/CreditCheckApp.suo create mode 100644 Code/Chapter 26/CreditCheckApp/CreditCheckApp.vbproj create mode 100644 Code/Chapter 26/CreditCheckApp/CreditCheckApp.vbproj.user create mode 100644 Code/Chapter 26/CreditCheckApp/MainForm.Designer.vb create mode 100644 Code/Chapter 26/CreditCheckApp/MainForm.resx create mode 100644 Code/Chapter 26/CreditCheckApp/MainForm.vb create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Application.myapp create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Resources.resx create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 26/CreditCheckApp/My Project/Settings.settings create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.designer.vb create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.rules create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.vb create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.sln create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.suo create mode 100644 Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.vbproj create mode 100644 Code/Chapter 26/CreditCheckWFLib/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.settings create mode 100644 Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.vb create mode 100644 Code/Chapter 26/MathWebService/App_Code/Service.vb create mode 100644 Code/Chapter 26/MathWebService/Service.asmx create mode 100644 Code/Chapter 26/MathWebService/web.config create mode 100644 Code/Chapter 26/UserDataWFApp/Module1.vb create mode 100644 Code/Chapter 26/UserDataWFApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 26/UserDataWFApp/My Project/MySettings.settings create mode 100644 Code/Chapter 26/UserDataWFApp/My Project/MySettings.vb create mode 100644 Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.designer.vb create mode 100644 Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.vb create mode 100644 Code/Chapter 26/UserDataWFApp/UserDataWFApp.sln create mode 100644 Code/Chapter 26/UserDataWFApp/UserDataWFApp.suo create mode 100644 Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj create mode 100644 Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj.user create mode 100644 Code/Chapter 26/WFMathClient/MathWF.designer.vb create mode 100644 Code/Chapter 26/WFMathClient/MathWF.resx create mode 100644 Code/Chapter 26/WFMathClient/MathWF.rules create mode 100644 Code/Chapter 26/WFMathClient/MathWF.vb create mode 100644 Code/Chapter 26/WFMathClient/Module1.vb create mode 100644 Code/Chapter 26/WFMathClient/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 26/WFMathClient/My Project/MySettings.settings create mode 100644 Code/Chapter 26/WFMathClient/My Project/MySettings.vb create mode 100644 Code/Chapter 26/WFMathClient/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 26/WFMathClient/My Project/Settings.settings create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.disco create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.wsdl create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.xsd create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.wsdl create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.xsd create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.svcmap create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.vb create mode 100644 Code/Chapter 26/WFMathClient/Service References/ServiceReference1/configuration.svcinfo create mode 100644 Code/Chapter 26/WFMathClient/WFMathClient.sln create mode 100644 Code/Chapter 26/WFMathClient/WFMathClient.suo create mode 100644 Code/Chapter 26/WFMathClient/WFMathClient.vbproj create mode 100644 Code/Chapter 26/WFMathClient/WFMathClient.vbproj.user create mode 100644 Code/Chapter 26/WFMathClient/Web References/localhost/Reference.map create mode 100644 Code/Chapter 26/WFMathClient/Web References/localhost/Reference.vb create mode 100644 Code/Chapter 26/WFMathClient/Web References/localhost/Service.disco create mode 100644 Code/Chapter 26/WFMathClient/Web References/localhost/Service.wsdl create mode 100644 Code/Chapter 26/WFMathClient/app.config create mode 100644 Code/Chapter 27/AppClassExample/MainWindow.vb create mode 100644 Code/Chapter 27/ControlBehaviors/MainWindow.vb create mode 100644 Code/Chapter 27/FormLifeTime/MainWindow.vb create mode 100644 Code/Chapter 27/MenuStripApp/MainWindow.Designer.vb create mode 100644 Code/Chapter 27/MenuStripApp/MainWindow.resx create mode 100644 Code/Chapter 27/MenuStripApp/MainWindow.vb create mode 100644 Code/Chapter 27/MenuStripApp/MenuStripApp.sln create mode 100644 Code/Chapter 27/MenuStripApp/MenuStripApp.suo create mode 100644 Code/Chapter 27/MenuStripApp/MenuStripApp.vbproj create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Application.myapp create mode 100644 Code/Chapter 27/MenuStripApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Resources.resx create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 27/MenuStripApp/My Project/Settings.settings create mode 100644 Code/Chapter 27/MyFirstWindow/MainWindow.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.Designer.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.resx create mode 100644 Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/Form1.resx create mode 100644 Code/Chapter 27/SimpleMdiApp/MainWindow.Designer.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/MainWindow.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Application.myapp create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Resources.resx create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 27/SimpleMdiApp/My Project/Settings.settings create mode 100644 Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.sln create mode 100644 Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.suo create mode 100644 Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.vbproj create mode 100644 Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.vbproj.user create mode 100644 Code/Chapter 27/StatusStripApp/HappyDude.jpg create mode 100644 Code/Chapter 27/StatusStripApp/MainWindow.Designer.vb create mode 100644 Code/Chapter 27/StatusStripApp/MainWindow.resx create mode 100644 Code/Chapter 27/StatusStripApp/MainWindow.vb create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Application.myapp create mode 100644 Code/Chapter 27/StatusStripApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Resources.resx create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 27/StatusStripApp/My Project/Settings.settings create mode 100644 Code/Chapter 27/StatusStripApp/StatusStripApp.sln create mode 100644 Code/Chapter 27/StatusStripApp/StatusStripApp.suo create mode 100644 Code/Chapter 27/StatusStripApp/StatusStripApp.vbproj create mode 100644 Code/Chapter 27/ToolStripApp/MainWindow.Designer.vb create mode 100644 Code/Chapter 27/ToolStripApp/MainWindow.resx create mode 100644 Code/Chapter 27/ToolStripApp/MainWindow.vb create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Application.myapp create mode 100644 Code/Chapter 27/ToolStripApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Resources.resx create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 27/ToolStripApp/My Project/Settings.settings create mode 100644 Code/Chapter 27/ToolStripApp/ToolStripApp.sln create mode 100644 Code/Chapter 27/ToolStripApp/ToolStripApp.suo create mode 100644 Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj create mode 100644 Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj.user create mode 100644 Code/Chapter 28/BasicImages/BasicImages.sln create mode 100644 Code/Chapter 28/BasicImages/BasicImages.suo create mode 100644 Code/Chapter 28/BasicImages/BasicImages.vbproj create mode 100644 Code/Chapter 28/BasicImages/BasicImages.vbproj.user create mode 100644 Code/Chapter 28/BasicImages/MainForm.Designer.vb create mode 100644 Code/Chapter 28/BasicImages/MainForm.resx create mode 100644 Code/Chapter 28/BasicImages/MainForm.vb create mode 100644 Code/Chapter 28/BasicImages/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/BasicImages/My Project/Application.myapp create mode 100644 Code/Chapter 28/BasicImages/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/BasicImages/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/BasicImages/My Project/Resources.resx create mode 100644 Code/Chapter 28/BasicImages/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/BasicImages/My Project/Settings.settings create mode 100644 Code/Chapter 28/BasicImages/imageA.bmp create mode 100644 Code/Chapter 28/BasicImages/imageB.bmp create mode 100644 Code/Chapter 28/BasicImages/imageC.bmp create mode 100644 Code/Chapter 28/BasicPaintForm/BasicPaintForm.sln create mode 100644 Code/Chapter 28/BasicPaintForm/BasicPaintForm.suo create mode 100644 Code/Chapter 28/BasicPaintForm/BasicPaintForm.vbproj create mode 100644 Code/Chapter 28/BasicPaintForm/BasicPaintForm.vbproj.user create mode 100644 Code/Chapter 28/BasicPaintForm/MainForm.Designer.vb create mode 100644 Code/Chapter 28/BasicPaintForm/MainForm.resx create mode 100644 Code/Chapter 28/BasicPaintForm/MainForm.vb create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Application.myapp create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Resources.resx create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/BasicPaintForm/My Project/Settings.settings create mode 100644 Code/Chapter 28/BrushStyles/BrushStyles.sln create mode 100644 Code/Chapter 28/BrushStyles/BrushStyles.suo create mode 100644 Code/Chapter 28/BrushStyles/BrushStyles.vbproj create mode 100644 Code/Chapter 28/BrushStyles/BrushStyles.vbproj.user create mode 100644 Code/Chapter 28/BrushStyles/MainForm.Designer.vb create mode 100644 Code/Chapter 28/BrushStyles/MainForm.resx create mode 100644 Code/Chapter 28/BrushStyles/MainForm.vb create mode 100644 Code/Chapter 28/BrushStyles/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/BrushStyles/My Project/Application.myapp create mode 100644 Code/Chapter 28/BrushStyles/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/BrushStyles/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/BrushStyles/My Project/Resources.resx create mode 100644 Code/Chapter 28/BrushStyles/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/BrushStyles/My Project/Settings.settings create mode 100644 Code/Chapter 28/ColorDlg/ColorDlg.sln create mode 100644 Code/Chapter 28/ColorDlg/ColorDlg.suo create mode 100644 Code/Chapter 28/ColorDlg/ColorDlg.vbproj create mode 100644 Code/Chapter 28/ColorDlg/ColorDlg.vbproj.user create mode 100644 Code/Chapter 28/ColorDlg/Form1.Designer.vb create mode 100644 Code/Chapter 28/ColorDlg/MainForm.resx create mode 100644 Code/Chapter 28/ColorDlg/MainForm.vb create mode 100644 Code/Chapter 28/ColorDlg/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/ColorDlg/My Project/Application.myapp create mode 100644 Code/Chapter 28/ColorDlg/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/ColorDlg/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/ColorDlg/My Project/Resources.resx create mode 100644 Code/Chapter 28/ColorDlg/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/ColorDlg/My Project/Settings.settings create mode 100644 Code/Chapter 28/CoorSystem/CoorSystem.sln create mode 100644 Code/Chapter 28/CoorSystem/CoorSystem.suo create mode 100644 Code/Chapter 28/CoorSystem/CoorSystem.vbproj create mode 100644 Code/Chapter 28/CoorSystem/CoorSystem.vbproj.user create mode 100644 Code/Chapter 28/CoorSystem/MainForm.Designer.vb create mode 100644 Code/Chapter 28/CoorSystem/MainForm.resx create mode 100644 Code/Chapter 28/CoorSystem/MainForm.vb create mode 100644 Code/Chapter 28/CoorSystem/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/CoorSystem/My Project/Application.myapp create mode 100644 Code/Chapter 28/CoorSystem/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/CoorSystem/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/CoorSystem/My Project/Resources.resx create mode 100644 Code/Chapter 28/CoorSystem/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/CoorSystem/My Project/Settings.settings create mode 100644 Code/Chapter 28/CoorSystem/UpgradeLog.XML create mode 100644 Code/Chapter 28/CustomPenApp/CustomPenApp.sln create mode 100644 Code/Chapter 28/CustomPenApp/CustomPenApp.suo create mode 100644 Code/Chapter 28/CustomPenApp/CustomPenApp.vbproj create mode 100644 Code/Chapter 28/CustomPenApp/CustomPenApp.vbproj.user create mode 100644 Code/Chapter 28/CustomPenApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/CustomPenApp/MainForm.resx create mode 100644 Code/Chapter 28/CustomPenApp/MainForm.vb create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/CustomPenApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/CustomPenApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/DraggingImages/DraggingImages.sln create mode 100644 Code/Chapter 28/DraggingImages/DraggingImages.suo create mode 100644 Code/Chapter 28/DraggingImages/DraggingImages.vbproj create mode 100644 Code/Chapter 28/DraggingImages/DraggingImages.vbproj.user create mode 100644 Code/Chapter 28/DraggingImages/HappyDude.bmp create mode 100644 Code/Chapter 28/DraggingImages/MainForm.Designer.vb create mode 100644 Code/Chapter 28/DraggingImages/MainForm.resx create mode 100644 Code/Chapter 28/DraggingImages/MainForm.vb create mode 100644 Code/Chapter 28/DraggingImages/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/DraggingImages/My Project/Application.myapp create mode 100644 Code/Chapter 28/DraggingImages/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/DraggingImages/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/DraggingImages/My Project/Resources.resx create mode 100644 Code/Chapter 28/DraggingImages/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/DraggingImages/My Project/Settings.settings create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.sln create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.suo create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.vbproj create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.vbproj.user create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.myapp create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.resx create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.settings create mode 100644 Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/Program.vb create mode 100644 Code/Chapter 28/FontDlgForm/FontDlgForm.sln create mode 100644 Code/Chapter 28/FontDlgForm/FontDlgForm.suo create mode 100644 Code/Chapter 28/FontDlgForm/FontDlgForm.vbproj create mode 100644 Code/Chapter 28/FontDlgForm/FontDlgForm.vbproj.user create mode 100644 Code/Chapter 28/FontDlgForm/MainForm.Designer.vb create mode 100644 Code/Chapter 28/FontDlgForm/MainForm.resx create mode 100644 Code/Chapter 28/FontDlgForm/MainForm.vb create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Application.myapp create mode 100644 Code/Chapter 28/FontDlgForm/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Resources.resx create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/FontDlgForm/My Project/Settings.settings create mode 100644 Code/Chapter 28/FontFamilyApp/FontFamilyApp.sln create mode 100644 Code/Chapter 28/FontFamilyApp/FontFamilyApp.suo create mode 100644 Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj create mode 100644 Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj.user create mode 100644 Code/Chapter 28/FontFamilyApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/FontFamilyApp/MainForm.resx create mode 100644 Code/Chapter 28/FontFamilyApp/MainForm.vb create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/FontFamilyApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/GradientBrushes/GradientBrushes.sln create mode 100644 Code/Chapter 28/GradientBrushes/GradientBrushes.suo create mode 100644 Code/Chapter 28/GradientBrushes/GradientBrushes.vbproj create mode 100644 Code/Chapter 28/GradientBrushes/GradientBrushes.vbproj.user create mode 100644 Code/Chapter 28/GradientBrushes/MainForm.Designer.vb create mode 100644 Code/Chapter 28/GradientBrushes/MainForm.resx create mode 100644 Code/Chapter 28/GradientBrushes/MainForm.vb create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Application.myapp create mode 100644 Code/Chapter 28/GradientBrushes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Resources.resx create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/GradientBrushes/My Project/Settings.settings create mode 100644 Code/Chapter 28/HitTestingImages/HitTestingImages.sln create mode 100644 Code/Chapter 28/HitTestingImages/HitTestingImages.suo create mode 100644 Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj create mode 100644 Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj.user create mode 100644 Code/Chapter 28/HitTestingImages/MainForm.Designer.vb create mode 100644 Code/Chapter 28/HitTestingImages/MainForm.resx create mode 100644 Code/Chapter 28/HitTestingImages/MainForm.vb create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Application.myapp create mode 100644 Code/Chapter 28/HitTestingImages/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Resources.resx create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/HitTestingImages/My Project/Settings.settings create mode 100644 Code/Chapter 28/HitTestingImages/imageA.bmp create mode 100644 Code/Chapter 28/HitTestingImages/imageB.bmp create mode 100644 Code/Chapter 28/HitTestingImages/imageC.bmp create mode 100644 Code/Chapter 28/MyResourcesWinApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/MainForm.resx create mode 100644 Code/Chapter 28/MyResourcesWinApp/MainForm.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResources.Designer.vb create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResources.resx create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.sln create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.suo create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.vbproj create mode 100644 Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.vbproj.user create mode 100644 Code/Chapter 28/MyResourcesWinApp/Resources/HappyDude.bmp create mode 100644 Code/Chapter 28/PenCapApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/PenCapApp/MainForm.resx create mode 100644 Code/Chapter 28/PenCapApp/MainForm.vb create mode 100644 Code/Chapter 28/PenCapApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/PenCapApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/PenCapApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/PenCapApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/PenCapApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/PenCapApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/PenCapApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/PenCapApp/PenCapApp.sln create mode 100644 Code/Chapter 28/PenCapApp/PenCapApp.suo create mode 100644 Code/Chapter 28/PenCapApp/PenCapApp.vbproj create mode 100644 Code/Chapter 28/PenCapApp/PenCapApp.vbproj.user create mode 100644 Code/Chapter 28/ResXWriter/HappyDude.bmp create mode 100644 Code/Chapter 28/ResXWriter/MainForm.Designer.vb create mode 100644 Code/Chapter 28/ResXWriter/MainForm.resx create mode 100644 Code/Chapter 28/ResXWriter/MainForm.vb create mode 100644 Code/Chapter 28/ResXWriter/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/ResXWriter/My Project/Application.myapp create mode 100644 Code/Chapter 28/ResXWriter/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/ResXWriter/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/ResXWriter/My Project/Resources.resx create mode 100644 Code/Chapter 28/ResXWriter/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/ResXWriter/My Project/Settings.settings create mode 100644 Code/Chapter 28/ResXWriter/ResXWriter.sln create mode 100644 Code/Chapter 28/ResXWriter/ResXWriter.suo create mode 100644 Code/Chapter 28/ResXWriter/ResXWriter.vbproj create mode 100644 Code/Chapter 28/ResXWriter/ResXWriter.vbproj.user create mode 100644 Code/Chapter 28/SolidBrushApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/SolidBrushApp/MainForm.resx create mode 100644 Code/Chapter 28/SolidBrushApp/MainForm.vb create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/SolidBrushApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/SolidBrushApp/SolidBrushApp.sln create mode 100644 Code/Chapter 28/SolidBrushApp/SolidBrushApp.suo create mode 100644 Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj create mode 100644 Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj.user create mode 100644 Code/Chapter 28/SwellingFontApp/MainForm.Designer.vb create mode 100644 Code/Chapter 28/SwellingFontApp/MainForm.resx create mode 100644 Code/Chapter 28/SwellingFontApp/MainForm.vb create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Application.myapp create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Resources.resx create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/SwellingFontApp/My Project/Settings.settings create mode 100644 Code/Chapter 28/SwellingFontApp/SwellingFontApp.sln create mode 100644 Code/Chapter 28/SwellingFontApp/SwellingFontApp.suo create mode 100644 Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj create mode 100644 Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj.user create mode 100644 Code/Chapter 28/TexturedBrushes/Clouds.bmp create mode 100644 Code/Chapter 28/TexturedBrushes/MainForm.Designer.vb create mode 100644 Code/Chapter 28/TexturedBrushes/MainForm.resx create mode 100644 Code/Chapter 28/TexturedBrushes/MainForm.vb create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Application.myapp create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Resources.resx create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 28/TexturedBrushes/My Project/Settings.settings create mode 100644 Code/Chapter 28/TexturedBrushes/Soap Bubbles.bmp create mode 100644 Code/Chapter 28/TexturedBrushes/TexturedBrushes.sln create mode 100644 Code/Chapter 28/TexturedBrushes/TexturedBrushes.suo create mode 100644 Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj create mode 100644 Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj.user create mode 100644 Code/Chapter 29/AnchoringControls/AnchoringControls.sln create mode 100644 Code/Chapter 29/AnchoringControls/AnchoringControls.suo create mode 100644 Code/Chapter 29/AnchoringControls/AnchoringControls.vbproj create mode 100644 Code/Chapter 29/AnchoringControls/AnchoringControls.vbproj.user create mode 100644 Code/Chapter 29/AnchoringControls/MainForm.Designer.vb create mode 100644 Code/Chapter 29/AnchoringControls/MainForm.resx create mode 100644 Code/Chapter 29/AnchoringControls/MainForm.vb create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Application.myapp create mode 100644 Code/Chapter 29/AnchoringControls/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Resources.resx create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/AnchoringControls/My Project/Settings.settings create mode 100644 Code/Chapter 29/Buttons/Buttons.sln create mode 100644 Code/Chapter 29/Buttons/Buttons.suo create mode 100644 Code/Chapter 29/Buttons/Buttons.vbproj create mode 100644 Code/Chapter 29/Buttons/Buttons.vbproj.user create mode 100644 Code/Chapter 29/Buttons/MainForm.Designer.vb create mode 100644 Code/Chapter 29/Buttons/MainForm.resx create mode 100644 Code/Chapter 29/Buttons/MainForm.vb create mode 100644 Code/Chapter 29/Buttons/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/Buttons/My Project/Application.myapp create mode 100644 Code/Chapter 29/Buttons/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/Buttons/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/Buttons/My Project/Resources.resx create mode 100644 Code/Chapter 29/Buttons/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/Buttons/My Project/Settings.settings create mode 100644 Code/Chapter 29/CarConfig/CarConfig.sln create mode 100644 Code/Chapter 29/CarConfig/CarConfig.suo create mode 100644 Code/Chapter 29/CarConfig/CarConfig.vbproj create mode 100644 Code/Chapter 29/CarConfig/CarConfig.vbproj.user create mode 100644 Code/Chapter 29/CarConfig/MainForm.Designer.vb create mode 100644 Code/Chapter 29/CarConfig/MainForm.resx create mode 100644 Code/Chapter 29/CarConfig/MainForm.vb create mode 100644 Code/Chapter 29/CarConfig/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/CarConfig/My Project/Application.myapp create mode 100644 Code/Chapter 29/CarConfig/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/CarConfig/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/CarConfig/My Project/Resources.resx create mode 100644 Code/Chapter 29/CarConfig/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/CarConfig/My Project/Settings.settings create mode 100644 Code/Chapter 29/CarConfig/UpgradeLog.XML create mode 100644 Code/Chapter 29/CarControlLibrary/AboutToBlow.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/CarControl.Designer.vb create mode 100644 Code/Chapter 29/CarControlLibrary/CarControl.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/CarControl.resx create mode 100644 Code/Chapter 29/CarControlLibrary/CarControl.vb create mode 100644 Code/Chapter 29/CarControlLibrary/CarControlLibrary.sln create mode 100644 Code/Chapter 29/CarControlLibrary/CarControlLibrary.suo create mode 100644 Code/Chapter 29/CarControlLibrary/CarControlLibrary.vbproj create mode 100644 Code/Chapter 29/CarControlLibrary/CarControlLibrary.vbproj.user create mode 100644 Code/Chapter 29/CarControlLibrary/EngineBlown.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/Lemon1.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/Lemon2.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/Lemon3.bmp create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Application.myapp create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Resources.resx create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/CarControlLibrary/My Project/Settings.settings create mode 100644 Code/Chapter 29/CarControlTestForm/CarControlTestForm.sln create mode 100644 Code/Chapter 29/CarControlTestForm/CarControlTestForm.suo create mode 100644 Code/Chapter 29/CarControlTestForm/CarControlTestForm.vbproj create mode 100644 Code/Chapter 29/CarControlTestForm/CarControlTestForm.vbproj.user create mode 100644 Code/Chapter 29/CarControlTestForm/MainForm.Designer.vb create mode 100644 Code/Chapter 29/CarControlTestForm/MainForm.resx create mode 100644 Code/Chapter 29/CarControlTestForm/MainForm.vb create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Application.myapp create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Resources.resx create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/CarControlTestForm/My Project/Settings.settings create mode 100644 Code/Chapter 29/ControlsByHand/ControlsByHand.vb create mode 100644 Code/Chapter 29/ExoticControls/CarNode.bmp create mode 100644 Code/Chapter 29/ExoticControls/ExoticControls.sln create mode 100644 Code/Chapter 29/ExoticControls/ExoticControls.suo create mode 100644 Code/Chapter 29/ExoticControls/ExoticControls.vbproj create mode 100644 Code/Chapter 29/ExoticControls/ExoticControls.vbproj.user create mode 100644 Code/Chapter 29/ExoticControls/MainForm.Designer.vb create mode 100644 Code/Chapter 29/ExoticControls/MainForm.resx create mode 100644 Code/Chapter 29/ExoticControls/MainForm.vb create mode 100644 Code/Chapter 29/ExoticControls/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/ExoticControls/My Project/Application.myapp create mode 100644 Code/Chapter 29/ExoticControls/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/ExoticControls/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/ExoticControls/My Project/Resources.resx create mode 100644 Code/Chapter 29/ExoticControls/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/ExoticControls/My Project/Settings.settings create mode 100644 Code/Chapter 29/ExoticControls/RadioNode.bmp create mode 100644 Code/Chapter 29/ExoticControls/SimpleCar.vb create mode 100644 Code/Chapter 29/ExoticControls/SpeedNode.bmp create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.sln create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.suo create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.vbproj create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.vbproj.user create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/MainForm.Designer.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/MainForm.resx create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/MainForm.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.myapp create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.resx create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.settings create mode 100644 Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.resx create mode 100644 Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/MainForm.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/MainForm.resx create mode 100644 Code/Chapter 29/SimpleModalDialog/MainForm.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Application.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Application.myapp create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Resources.resx create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/My Project/Settings.settings create mode 100644 Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.sln create mode 100644 Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.suo create mode 100644 Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.vbproj create mode 100644 Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.vbproj.user create mode 100644 Code/Chapter 29/SimpleModalDialog/UserMessageDialog.Designer.vb create mode 100644 Code/Chapter 29/SimpleModalDialog/UserMessageDialog.resx create mode 100644 Code/Chapter 29/SimpleModalDialog/UserMessageDialog.vb create mode 100644 Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.sln create mode 100644 Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.suo create mode 100644 Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj create mode 100644 Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj.user create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Application.myapp create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Resources.resx create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/BasicConsoleIO/My Project/Settings.settings create mode 100644 Code/Chapter 3/BasicConsoleIO/Program.vb create mode 100644 Code/Chapter 3/BasicDataTypes/BasicDataTypes.sln create mode 100644 Code/Chapter 3/BasicDataTypes/BasicDataTypes.suo create mode 100644 Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj create mode 100644 Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj.user create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Application.myapp create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Resources.resx create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/BasicDataTypes/My Project/Settings.settings create mode 100644 Code/Chapter 3/BasicDataTypes/Program.vb create mode 100644 Code/Chapter 3/FunWithMain/FunWithMain.sln create mode 100644 Code/Chapter 3/FunWithMain/FunWithMain.suo create mode 100644 Code/Chapter 3/FunWithMain/FunWithMain.vbproj create mode 100644 Code/Chapter 3/FunWithMain/FunWithMain.vbproj.user create mode 100644 Code/Chapter 3/FunWithMain/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/FunWithMain/My Project/Application.myapp create mode 100644 Code/Chapter 3/FunWithMain/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/FunWithMain/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/FunWithMain/My Project/Resources.resx create mode 100644 Code/Chapter 3/FunWithMain/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/FunWithMain/My Project/Settings.settings create mode 100644 Code/Chapter 3/FunWithMain/Program.vb create mode 100644 Code/Chapter 3/FunWithModules/FunWithModules.sln create mode 100644 Code/Chapter 3/FunWithModules/FunWithModules.suo create mode 100644 Code/Chapter 3/FunWithModules/FunWithModules.vbproj create mode 100644 Code/Chapter 3/FunWithModules/FunWithModules.vbproj.user create mode 100644 Code/Chapter 3/FunWithModules/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/FunWithModules/My Project/Application.myapp create mode 100644 Code/Chapter 3/FunWithModules/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/FunWithModules/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/FunWithModules/My Project/Resources.resx create mode 100644 Code/Chapter 3/FunWithModules/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/FunWithModules/My Project/Settings.settings create mode 100644 Code/Chapter 3/FunWithModules/Program.vb create mode 100644 Code/Chapter 3/FunWithStrings/FunWithStrings.sln create mode 100644 Code/Chapter 3/FunWithStrings/FunWithStrings.suo create mode 100644 Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj create mode 100644 Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj.user create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Application.myapp create mode 100644 Code/Chapter 3/FunWithStrings/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Resources.resx create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/FunWithStrings/My Project/Settings.settings create mode 100644 Code/Chapter 3/FunWithStrings/Program.vb create mode 100644 Code/Chapter 3/TypeConversions/My Project/Application.Designer.vb create mode 100644 Code/Chapter 3/TypeConversions/My Project/Application.myapp create mode 100644 Code/Chapter 3/TypeConversions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 3/TypeConversions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 3/TypeConversions/My Project/Resources.resx create mode 100644 Code/Chapter 3/TypeConversions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 3/TypeConversions/My Project/Settings.settings create mode 100644 Code/Chapter 3/TypeConversions/Program.vb create mode 100644 Code/Chapter 3/TypeConversions/TypeConversions.sln create mode 100644 Code/Chapter 3/TypeConversions/TypeConversions.suo create mode 100644 Code/Chapter 3/TypeConversions/TypeConversions.vbproj create mode 100644 Code/Chapter 3/TypeConversions/TypeConversions.vbproj.user create mode 100644 Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml create mode 100644 Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml.vb create mode 100644 Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml create mode 100644 Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml.vb create mode 100644 Code/Chapter 30/CodeBehindXamlApp/SimpleXamlApp.vbproj create mode 100644 Code/Chapter 30/SimpleWPFApp/SimpleWPFApp.vb create mode 100644 Code/Chapter 30/SimpleWPFApp/build.rsp create mode 100644 Code/Chapter 30/SimpleWPFAppRevisited/SimpleWPFApp.vb create mode 100644 Code/Chapter 30/SimpleWPFAppRevisited/build.rsp create mode 100644 Code/Chapter 30/SimpleXamlApp/MainWindow.xaml create mode 100644 Code/Chapter 30/SimpleXamlApp/MyApp.xaml create mode 100644 Code/Chapter 30/SimpleXamlApp/SimpleXamlApp.vbproj create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.sln create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.suo create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/MainWindow.xaml create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/MainWindow.xaml.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/Resources.resx create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/My Project/Settings.settings create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/SimpleXamlPad.vbproj create mode 100644 Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/SimpleXamlPad.vbproj.user create mode 100644 Code/Chapter 31/CarViewerApp/AddNewCarDialog.xaml create mode 100644 Code/Chapter 31/CarViewerApp/AddNewCarDialog.xaml.vb create mode 100644 Code/Chapter 31/CarViewerApp/Application.xaml create mode 100644 Code/Chapter 31/CarViewerApp/Application.xaml.vb create mode 100644 Code/Chapter 31/CarViewerApp/CarViewerApp.sln create mode 100644 Code/Chapter 31/CarViewerApp/CarViewerApp.suo create mode 100644 Code/Chapter 31/CarViewerApp/CarViewerApp.vbproj create mode 100644 Code/Chapter 31/CarViewerApp/CarViewerApp.vbproj.user create mode 100644 Code/Chapter 31/CarViewerApp/Inventory.xml create mode 100644 Code/Chapter 31/CarViewerApp/MainWindow.xaml create mode 100644 Code/Chapter 31/CarViewerApp/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/CarViewerApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/CarViewerApp/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/CarViewerApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/CarViewerApp/My Project/Resources.resx create mode 100644 Code/Chapter 31/CarViewerApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/CarViewerApp/My Project/Settings.settings create mode 100644 Code/Chapter 31/CarViewerApp/ObservableCarCollection.vb create mode 100644 Code/Chapter 31/CheckRadioGroup.xaml create mode 100644 Code/Chapter 31/ControlReview/Application.xaml create mode 100644 Code/Chapter 31/ControlReview/Application.xaml.vb create mode 100644 Code/Chapter 31/ControlReview/ControlReview.sln create mode 100644 Code/Chapter 31/ControlReview/ControlReview.suo create mode 100644 Code/Chapter 31/ControlReview/ControlReview.vbproj create mode 100644 Code/Chapter 31/ControlReview/MainWindow.xaml create mode 100644 Code/Chapter 31/ControlReview/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/ControlReview/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/ControlReview/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/ControlReview/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/ControlReview/My Project/Resources.resx create mode 100644 Code/Chapter 31/ControlReview/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/ControlReview/My Project/Settings.settings create mode 100644 Code/Chapter 31/CustomSpinButtonApp/Application.xaml create mode 100644 Code/Chapter 31/CustomSpinButtonApp/Application.xaml.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.sln create mode 100644 Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.suo create mode 100644 Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.vbproj create mode 100644 Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml create mode 100644 Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.resx create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.settings create mode 100644 Code/Chapter 31/GridWithSplitter.xaml create mode 100644 Code/Chapter 31/ListControls/Application.xaml create mode 100644 Code/Chapter 31/ListControls/Application.xaml.vb create mode 100644 Code/Chapter 31/ListControls/ListControls.sln create mode 100644 Code/Chapter 31/ListControls/ListControls.suo create mode 100644 Code/Chapter 31/ListControls/ListControls.vbproj create mode 100644 Code/Chapter 31/ListControls/MainWindow.xaml create mode 100644 Code/Chapter 31/ListControls/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/ListControls/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/ListControls/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/ListControls/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/ListControls/My Project/Resources.resx create mode 100644 Code/Chapter 31/ListControls/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/ListControls/My Project/Settings.settings create mode 100644 Code/Chapter 31/MySpellChecker/Application.xaml create mode 100644 Code/Chapter 31/MySpellChecker/Application.xaml.vb create mode 100644 Code/Chapter 31/MySpellChecker/MainWindow.xaml create mode 100644 Code/Chapter 31/MySpellChecker/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/MySpellChecker/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/MySpellChecker/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/MySpellChecker/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/MySpellChecker/My Project/Resources.resx create mode 100644 Code/Chapter 31/MySpellChecker/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/MySpellChecker/My Project/Settings.settings create mode 100644 Code/Chapter 31/MySpellChecker/MySpellChecker.sln create mode 100644 Code/Chapter 31/MySpellChecker/MySpellChecker.suo create mode 100644 Code/Chapter 31/MySpellChecker/MySpellChecker.vbproj create mode 100644 Code/Chapter 31/ScrollViewer.xaml create mode 100644 Code/Chapter 31/SimpleCanvas.xaml create mode 100644 Code/Chapter 31/SimpleDataBinding/Application.xaml create mode 100644 Code/Chapter 31/SimpleDataBinding/Application.xaml.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/MainWindow.xaml create mode 100644 Code/Chapter 31/SimpleDataBinding/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/Resources.resx create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/My Project/Settings.settings create mode 100644 Code/Chapter 31/SimpleDataBinding/MyColorConverter.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/MyDoubleConverter.vb create mode 100644 Code/Chapter 31/SimpleDataBinding/SimpleDataBinding.sln create mode 100644 Code/Chapter 31/SimpleDataBinding/SimpleDataBinding.suo create mode 100644 Code/Chapter 31/SimpleDataBinding/SimpleDataBinding.vbproj create mode 100644 Code/Chapter 31/SimpleDockPanel.xaml create mode 100644 Code/Chapter 31/SimpleGrid.xaml create mode 100644 Code/Chapter 31/SimpleStackPanel.xaml create mode 100644 Code/Chapter 31/SimpleWrapPanel.xaml create mode 100644 Code/Chapter 31/TextControls/Application.xaml create mode 100644 Code/Chapter 31/TextControls/Application.xaml.vb create mode 100644 Code/Chapter 31/TextControls/MainWindow.xaml create mode 100644 Code/Chapter 31/TextControls/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/TextControls/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/TextControls/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/TextControls/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/TextControls/My Project/Resources.resx create mode 100644 Code/Chapter 31/TextControls/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/TextControls/My Project/Settings.settings create mode 100644 Code/Chapter 31/TextControls/TextControls.sln create mode 100644 Code/Chapter 31/TextControls/TextControls.suo create mode 100644 Code/Chapter 31/TextControls/TextControls.vbproj create mode 100644 Code/Chapter 31/WPFControlEvents/Application.xaml create mode 100644 Code/Chapter 31/WPFControlEvents/Application.xaml.vb create mode 100644 Code/Chapter 31/WPFControlEvents/MainWindow.xaml create mode 100644 Code/Chapter 31/WPFControlEvents/MainWindow.xaml.vb create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/Resources.resx create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 31/WPFControlEvents/My Project/Settings.settings create mode 100644 Code/Chapter 31/WPFControlEvents/WPFControlEvents.sln create mode 100644 Code/Chapter 31/WPFControlEvents/WPFControlEvents.suo create mode 100644 Code/Chapter 31/WPFControlEvents/WPFControlEvents.vbproj create mode 100644 Code/Chapter 31/WindowFrame.xaml create mode 100644 Code/Chapter 32/AnimatedButtonWithDiscreteKeyFrames.xaml create mode 100644 Code/Chapter 32/AnimatedLabel/AnimatedLabel.sln create mode 100644 Code/Chapter 32/AnimatedLabel/AnimatedLabel.suo create mode 100644 Code/Chapter 32/AnimatedLabel/AnimatedLabel.vbproj create mode 100644 Code/Chapter 32/AnimatedLabel/Application.xaml create mode 100644 Code/Chapter 32/AnimatedLabel/Application.xaml.vb create mode 100644 Code/Chapter 32/AnimatedLabel/MainWindow.xaml create mode 100644 Code/Chapter 32/AnimatedLabel/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/Resources.resx create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/AnimatedLabel/My Project/Settings.settings create mode 100644 Code/Chapter 32/AnimationInXaml.xaml create mode 100644 Code/Chapter 32/ControlTemplates/Application.xaml create mode 100644 Code/Chapter 32/ControlTemplates/Application.xaml.vb create mode 100644 Code/Chapter 32/ControlTemplates/ControlTemplates.sln create mode 100644 Code/Chapter 32/ControlTemplates/ControlTemplates.suo create mode 100644 Code/Chapter 32/ControlTemplates/ControlTemplates.vbproj create mode 100644 Code/Chapter 32/ControlTemplates/ControlTemplates.vbproj.user create mode 100644 Code/Chapter 32/ControlTemplates/MainWindow.xaml create mode 100644 Code/Chapter 32/ControlTemplates/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/ControlTemplates/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/ControlTemplates/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/ControlTemplates/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/ControlTemplates/My Project/Resources.resx create mode 100644 Code/Chapter 32/ControlTemplates/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/ControlTemplates/My Project/Settings.settings create mode 100644 Code/Chapter 32/FunWithBrushes.xaml create mode 100644 Code/Chapter 32/FunWithDrawingGeometries.xaml create mode 100644 Code/Chapter 32/FunWithResources/Application.xaml create mode 100644 Code/Chapter 32/FunWithResources/Application.xaml.vb create mode 100644 Code/Chapter 32/FunWithResources/FunWithResources.sln create mode 100644 Code/Chapter 32/FunWithResources/FunWithResources.suo create mode 100644 Code/Chapter 32/FunWithResources/FunWithResources.vbproj create mode 100644 Code/Chapter 32/FunWithResources/IntertechBlue.gif create mode 100644 Code/Chapter 32/FunWithResources/MainWindow.xaml create mode 100644 Code/Chapter 32/FunWithResources/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/FunWithResources/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/FunWithResources/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/FunWithResources/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/FunWithResources/My Project/Resources.resx create mode 100644 Code/Chapter 32/FunWithResources/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/FunWithResources/My Project/Settings.settings create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/Application.xaml create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/Application.xaml.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/FunWithSystemWindowsShapes.sln create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/FunWithSystemWindowsShapes.suo create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/FunWithSystemWindowsShapes.vbproj create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/MainWindow.xaml create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/Resources.resx create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/FunWithSystemWindowsShapes/My Project/Settings.settings create mode 100644 Code/Chapter 32/FunWithTransformations.xaml create mode 100644 Code/Chapter 32/Gooseberry0007.JPG create mode 100644 Code/Chapter 32/IntertechBlue.gif create mode 100644 Code/Chapter 32/SpinButtonWithLinearKeyFrames.xaml create mode 100644 Code/Chapter 32/StyleWithTriggers.xaml create mode 100644 Code/Chapter 32/StylesAtRuntime/Application.xaml create mode 100644 Code/Chapter 32/StylesAtRuntime/Application.xaml.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/MainWindow.xaml create mode 100644 Code/Chapter 32/StylesAtRuntime/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/Resources.resx create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/StylesAtRuntime/My Project/Settings.settings create mode 100644 Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.sln create mode 100644 Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.suo create mode 100644 Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.vbproj create mode 100644 Code/Chapter 32/WPFGraphicsOptions/Application.xaml create mode 100644 Code/Chapter 32/WPFGraphicsOptions/Application.xaml.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml create mode 100644 Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/MyExtensions/MyWpfExtension.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.resx create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.settings create mode 100644 Code/Chapter 32/WPFGraphicsOptions/MyCustomRenderer.vb create mode 100644 Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.sln create mode 100644 Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.suo create mode 100644 Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj create mode 100644 Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj.user create mode 100644 Code/Chapter 33/CarsWebSite/ClassicAspPage.asp create mode 100644 Code/Chapter 33/CarsWebSite/default.htm create mode 100644 Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll create mode 100644 Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll.refresh create mode 100644 Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.pdb create mode 100644 Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.xml create mode 100644 Code/Chapter 33/CodeBehindPageModel/Default.aspx create mode 100644 Code/Chapter 33/CodeBehindPageModel/Default.aspx.vb create mode 100644 Code/Chapter 33/CodeBehindPageModel/web.config create mode 100644 Code/Chapter 33/FunWithPageMembers/Default.aspx create mode 100644 Code/Chapter 33/FunWithPageMembers/Default.aspx.vb create mode 100644 Code/Chapter 33/FunWithPageMembers/web.config create mode 100644 Code/Chapter 33/PageLifeCycle/Default.aspx create mode 100644 Code/Chapter 33/PageLifeCycle/Default.aspx.vb create mode 100644 Code/Chapter 33/PageLifeCycle/web.config create mode 100644 Code/Chapter 33/SinglePageModel/Default.aspx create mode 100644 Code/Chapter 33/SinglePageModel/Web.config create mode 100644 Code/Chapter 33/SinglePageModel/bin/AutoLotDAL.dll create mode 100644 Code/Chapter 34/AspNetCarsSite/Ads.xml create mode 100644 Code/Chapter 34/AspNetCarsSite/BuildCar.aspx create mode 100644 Code/Chapter 34/AspNetCarsSite/BuildCar.aspx.vb create mode 100644 Code/Chapter 34/AspNetCarsSite/CAR.GIF create mode 100644 Code/Chapter 34/AspNetCarsSite/Default.aspx create mode 100644 Code/Chapter 34/AspNetCarsSite/Default.aspx.vb create mode 100644 Code/Chapter 34/AspNetCarsSite/Inventory.aspx create mode 100644 Code/Chapter 34/AspNetCarsSite/Inventory.aspx.vb create mode 100644 Code/Chapter 34/AspNetCarsSite/MasterPage.master create mode 100644 Code/Chapter 34/AspNetCarsSite/MasterPage.master.vb create mode 100644 Code/Chapter 34/AspNetCarsSite/SlugBug.jpg create mode 100644 Code/Chapter 34/AspNetCarsSite/Web.sitemap create mode 100644 Code/Chapter 34/AspNetCarsSite/web.config create mode 100644 Code/Chapter 34/DynamicCtrls/Default.aspx create mode 100644 Code/Chapter 34/DynamicCtrls/Default.aspx.vb create mode 100644 Code/Chapter 34/DynamicCtrls/web.config create mode 100644 Code/Chapter 34/FunWithThemes/App_Themes/BasicGreen/BasicGreen.skin create mode 100644 Code/Chapter 34/FunWithThemes/App_Themes/CrazyOrange/CrazyOrange.skin create mode 100644 Code/Chapter 34/FunWithThemes/Default.aspx create mode 100644 Code/Chapter 34/FunWithThemes/Default.aspx.vb create mode 100644 Code/Chapter 34/FunWithThemes/web.config create mode 100644 Code/Chapter 34/ValidatorCtrls/Default.aspx create mode 100644 Code/Chapter 34/ValidatorCtrls/Default.aspx.vb create mode 100644 Code/Chapter 34/ValidatorCtrls/web.config create mode 100644 Code/Chapter 35/AppState/App_Code/CarLotInfo.vb create mode 100644 Code/Chapter 35/AppState/Default.aspx create mode 100644 Code/Chapter 35/AppState/Default.aspx.vb create mode 100644 Code/Chapter 35/AppState/Global.asax create mode 100644 Code/Chapter 35/AppState/web.config create mode 100644 Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll create mode 100644 Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll.refresh create mode 100644 Code/Chapter 35/CacheState/Bin/AutoLotDAL.pdb create mode 100644 Code/Chapter 35/CacheState/Bin/AutoLotDAL.xml create mode 100644 Code/Chapter 35/CacheState/Default.aspx create mode 100644 Code/Chapter 35/CacheState/Default.aspx.vb create mode 100644 Code/Chapter 35/CacheState/Global.asax create mode 100644 Code/Chapter 35/CacheState/web.config create mode 100644 Code/Chapter 35/CookieStateApp/Default.aspx create mode 100644 Code/Chapter 35/CookieStateApp/Default.aspx.vb create mode 100644 Code/Chapter 35/CookieStateApp/web.config create mode 100644 Code/Chapter 35/FunWithProfiles/App_Code/UserAddress.vb create mode 100644 Code/Chapter 35/FunWithProfiles/Default.aspx create mode 100644 Code/Chapter 35/FunWithProfiles/Default.aspx.vb create mode 100644 Code/Chapter 35/FunWithProfiles/web.config create mode 100644 Code/Chapter 35/SessionState/App_Code/UserShoppingCart.vb create mode 100644 Code/Chapter 35/SessionState/Default.aspx create mode 100644 Code/Chapter 35/SessionState/Default.aspx.vb create mode 100644 Code/Chapter 35/SessionState/Global.asax create mode 100644 Code/Chapter 35/SessionState/web.config create mode 100644 Code/Chapter 35/SimpleStateExample/Default.aspx create mode 100644 Code/Chapter 35/SimpleStateExample/Default.aspx.vb create mode 100644 Code/Chapter 35/SimpleStateExample/web.config create mode 100644 Code/Chapter 35/ViewStateApp/Default.aspx create mode 100644 Code/Chapter 35/ViewStateApp/Default.aspx.vb create mode 100644 Code/Chapter 35/ViewStateApp/web.config create mode 100644 Code/Chapter 4/FunWithArrays/FunWithArrays.sln create mode 100644 Code/Chapter 4/FunWithArrays/FunWithArrays.suo create mode 100644 Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj create mode 100644 Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj.user create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Application.Designer.vb create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Application.myapp create mode 100644 Code/Chapter 4/FunWithArrays/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Resources.resx create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 4/FunWithArrays/My Project/Settings.settings create mode 100644 Code/Chapter 4/FunWithArrays/Program.vb create mode 100644 Code/Chapter 4/FunWithEnums/FunWithEnums.sln create mode 100644 Code/Chapter 4/FunWithEnums/FunWithEnums.suo create mode 100644 Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj create mode 100644 Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj.user create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Application.Designer.vb create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Application.myapp create mode 100644 Code/Chapter 4/FunWithEnums/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Resources.resx create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 4/FunWithEnums/My Project/Settings.settings create mode 100644 Code/Chapter 4/FunWithEnums/Program.vb create mode 100644 Code/Chapter 4/FunWithMethods/FunWithMethods.sln create mode 100644 Code/Chapter 4/FunWithMethods/FunWithMethods.suo create mode 100644 Code/Chapter 4/FunWithMethods/FunWithMethods.vbproj create mode 100644 Code/Chapter 4/FunWithMethods/FunWithMethods.vbproj.user create mode 100644 Code/Chapter 4/FunWithMethods/HelperFunctions.vb create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Application.Designer.vb create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Application.myapp create mode 100644 Code/Chapter 4/FunWithMethods/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Resources.resx create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 4/FunWithMethods/My Project/Settings.settings create mode 100644 Code/Chapter 4/FunWithMethods/Program.vb create mode 100644 Code/Chapter 4/FunWithStructures/FunWithStructures.sln create mode 100644 Code/Chapter 4/FunWithStructures/FunWithStructures.suo create mode 100644 Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj create mode 100644 Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj.user create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Application.Designer.vb create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Application.myapp create mode 100644 Code/Chapter 4/FunWithStructures/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Resources.resx create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 4/FunWithStructures/My Project/Settings.settings create mode 100644 Code/Chapter 4/FunWithStructures/Program.vb create mode 100644 Code/Chapter 4/MethodOverloading/MethodOverloading.sln create mode 100644 Code/Chapter 4/MethodOverloading/MethodOverloading.suo create mode 100644 Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj create mode 100644 Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj.user create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Application.Designer.vb create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Application.myapp create mode 100644 Code/Chapter 4/MethodOverloading/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Resources.resx create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 4/MethodOverloading/My Project/Settings.settings create mode 100644 Code/Chapter 4/MethodOverloading/Program.vb create mode 100644 Code/Chapter 5/ConstData/ConstData.sln create mode 100644 Code/Chapter 5/ConstData/ConstData.suo create mode 100644 Code/Chapter 5/ConstData/ConstData.vbproj create mode 100644 Code/Chapter 5/ConstData/ConstData.vbproj.user create mode 100644 Code/Chapter 5/ConstData/My Project/Application.Designer.vb create mode 100644 Code/Chapter 5/ConstData/My Project/Application.myapp create mode 100644 Code/Chapter 5/ConstData/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 5/ConstData/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 5/ConstData/My Project/Resources.resx create mode 100644 Code/Chapter 5/ConstData/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 5/ConstData/My Project/Settings.settings create mode 100644 Code/Chapter 5/ConstData/Program.vb create mode 100644 Code/Chapter 5/EmployeeApp Documentation/Documentation.chm create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_build.log create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/CFW.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_c97a4a35.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Caution.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhc create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhk create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhp create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.log create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xml create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xsd create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Hier_N_EmployeeApp.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_DisplayStats.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_GiveBonus.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/N_EmployeeApp.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Age.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Company.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_ID.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Name.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Pay.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_SocialSecurityNumber.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Constructor.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Members.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Methods.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Properties.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/box.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collall.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collapse.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collapse_all.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycode.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycodeHighlight.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange_up.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpup.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/exp.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/expall.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/expand_all.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/footer.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/greencheck.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/greychck.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intclass.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intdelegate.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intenumeration.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intevent.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intfield.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intinterface.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intmethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intproperty.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intstructure.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.css create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.js create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/note.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/previous_build_details.dat create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privclass.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privclass.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privdelegate.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privdelegate.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privenumeration.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privenumeration.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privevent.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privevent.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privfield.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privfield.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privinterface.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privinterface.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privmethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privmethod.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privovermethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privovermethod.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privproperty.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privproperty.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privstructure.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/privstructure.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protclass.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protclass.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protdelegate.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protdelegate.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protenumeration.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protenumeration.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protevent.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protfield.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protfield.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protinterface.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protinterface.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protmethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protoperator.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protovermethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protovermethod.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protproperty.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protstructure.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/protstructure.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubclass.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubclass.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubdelegate.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubdelegate.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubenumeration.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubenumeration.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubevent.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubfield.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubfield.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubinterface.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubinterface.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubmethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/puboperator.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubovermethod.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubovermethod.png create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubproperty.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/pubstructure.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/sdkLinkManager.html create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/security.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/static.gif create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/tooltip.htc create mode 100644 Code/Chapter 5/EmployeeApp Documentation/ndoc_qa.log create mode 100644 Code/Chapter 5/EmployeeApp/Employee.Internal.vb create mode 100644 Code/Chapter 5/EmployeeApp/Employee.vb create mode 100644 Code/Chapter 5/EmployeeApp/EmployeeApp.cd create mode 100644 Code/Chapter 5/EmployeeApp/EmployeeApp.sln create mode 100644 Code/Chapter 5/EmployeeApp/EmployeeApp.suo create mode 100644 Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj create mode 100644 Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj.user create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Application.Designer.vb create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Application.myapp create mode 100644 Code/Chapter 5/EmployeeApp/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Resources.resx create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 5/EmployeeApp/My Project/Settings.settings create mode 100644 Code/Chapter 5/EmployeeApp/Program.vb create mode 100644 Code/Chapter 5/SharedData/My Project/Application.Designer.vb create mode 100644 Code/Chapter 5/SharedData/My Project/Application.myapp create mode 100644 Code/Chapter 5/SharedData/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 5/SharedData/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 5/SharedData/My Project/Resources.resx create mode 100644 Code/Chapter 5/SharedData/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 5/SharedData/My Project/Settings.settings create mode 100644 Code/Chapter 5/SharedData/Program.vb create mode 100644 Code/Chapter 5/SharedData/SavingsAccount.vb create mode 100644 Code/Chapter 5/SharedData/SharedData.sln create mode 100644 Code/Chapter 5/SharedData/SharedData.suo create mode 100644 Code/Chapter 5/SharedData/SharedData.vbproj create mode 100644 Code/Chapter 5/SharedData/SharedData.vbproj.user create mode 100644 Code/Chapter 5/SharedMethods/My Project/Application.Designer.vb create mode 100644 Code/Chapter 5/SharedMethods/My Project/Application.myapp create mode 100644 Code/Chapter 5/SharedMethods/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 5/SharedMethods/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 5/SharedMethods/My Project/Resources.resx create mode 100644 Code/Chapter 5/SharedMethods/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 5/SharedMethods/My Project/Settings.settings create mode 100644 Code/Chapter 5/SharedMethods/Program.vb create mode 100644 Code/Chapter 5/SharedMethods/SharedMethods.sln create mode 100644 Code/Chapter 5/SharedMethods/SharedMethods.suo create mode 100644 Code/Chapter 5/SharedMethods/SharedMethods.vbproj create mode 100644 Code/Chapter 5/SharedMethods/SharedMethods.vbproj.user create mode 100644 Code/Chapter 5/SharedMethods/Teenager.vb create mode 100644 Code/Chapter 5/SimpleClassExample/Car.vb create mode 100644 Code/Chapter 5/SimpleClassExample/Motorcycle.vb create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Application.Designer.vb create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Application.myapp create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Resources.resx create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 5/SimpleClassExample/My Project/Settings.settings create mode 100644 Code/Chapter 5/SimpleClassExample/Program.vb create mode 100644 Code/Chapter 5/SimpleClassExample/SimpleClassExample.sln create mode 100644 Code/Chapter 5/SimpleClassExample/SimpleClassExample.suo create mode 100644 Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj create mode 100644 Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj.user create mode 100644 Code/Chapter 6/BasicInheritance/BasicInheritance.sln create mode 100644 Code/Chapter 6/BasicInheritance/BasicInheritance.suo create mode 100644 Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj create mode 100644 Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj.user create mode 100644 Code/Chapter 6/BasicInheritance/Car.vb create mode 100644 Code/Chapter 6/BasicInheritance/Cars.cd create mode 100644 Code/Chapter 6/BasicInheritance/MiniVan.vb create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Application.Designer.vb create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Application.myapp create mode 100644 Code/Chapter 6/BasicInheritance/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Resources.resx create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 6/BasicInheritance/My Project/Settings.settings create mode 100644 Code/Chapter 6/BasicInheritance/Program.vb create mode 100644 Code/Chapter 6/Employees/Employee.Internal.vb create mode 100644 Code/Chapter 6/Employees/Employee.vb create mode 100644 Code/Chapter 6/Employees/Employees.cd create mode 100644 Code/Chapter 6/Employees/Employees.sln create mode 100644 Code/Chapter 6/Employees/Employees.suo create mode 100644 Code/Chapter 6/Employees/Employees.vbproj create mode 100644 Code/Chapter 6/Employees/Employees.vbproj.user create mode 100644 Code/Chapter 6/Employees/Manager.vb create mode 100644 Code/Chapter 6/Employees/My Project/Application.Designer.vb create mode 100644 Code/Chapter 6/Employees/My Project/Application.myapp create mode 100644 Code/Chapter 6/Employees/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 6/Employees/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 6/Employees/My Project/Resources.resx create mode 100644 Code/Chapter 6/Employees/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 6/Employees/My Project/Settings.settings create mode 100644 Code/Chapter 6/Employees/PTSalesPerson.vb create mode 100644 Code/Chapter 6/Employees/Program.vb create mode 100644 Code/Chapter 6/Employees/SalesPerson.vb create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Application.Designer.vb create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Application.myapp create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Resources.resx create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 6/ObjectOverrides/My Project/Settings.settings create mode 100644 Code/Chapter 6/ObjectOverrides/ObjectOverrides.sln create mode 100644 Code/Chapter 6/ObjectOverrides/ObjectOverrides.suo create mode 100644 Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj create mode 100644 Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj.user create mode 100644 Code/Chapter 6/ObjectOverrides/Person.vb create mode 100644 Code/Chapter 6/ObjectOverrides/Program.vb create mode 100644 Code/Chapter 6/Shapes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 6/Shapes/My Project/Application.myapp create mode 100644 Code/Chapter 6/Shapes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 6/Shapes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 6/Shapes/My Project/Resources.resx create mode 100644 Code/Chapter 6/Shapes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 6/Shapes/My Project/Settings.settings create mode 100644 Code/Chapter 6/Shapes/MyShapes.vb create mode 100644 Code/Chapter 6/Shapes/Program.vb create mode 100644 Code/Chapter 6/Shapes/Shape.vb create mode 100644 Code/Chapter 6/Shapes/Shapes.cd create mode 100644 Code/Chapter 6/Shapes/Shapes.sln create mode 100644 Code/Chapter 6/Shapes/Shapes.suo create mode 100644 Code/Chapter 6/Shapes/Shapes.vbproj create mode 100644 Code/Chapter 6/Shapes/Shapes.vbproj.user create mode 100644 Code/Chapter 7/CustomException/Car.vb create mode 100644 Code/Chapter 7/CustomException/CarIsDeadException.vb create mode 100644 Code/Chapter 7/CustomException/CustomException.sln create mode 100644 Code/Chapter 7/CustomException/CustomException.suo create mode 100644 Code/Chapter 7/CustomException/CustomException.vbproj create mode 100644 Code/Chapter 7/CustomException/CustomException.vbproj.user create mode 100644 Code/Chapter 7/CustomException/My Project/Application.Designer.vb create mode 100644 Code/Chapter 7/CustomException/My Project/Application.myapp create mode 100644 Code/Chapter 7/CustomException/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 7/CustomException/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 7/CustomException/My Project/Resources.resx create mode 100644 Code/Chapter 7/CustomException/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 7/CustomException/My Project/Settings.settings create mode 100644 Code/Chapter 7/CustomException/Program.vb create mode 100644 Code/Chapter 7/CustomException/Radio.vb create mode 100644 Code/Chapter 7/SimpleException/Car.vb create mode 100644 Code/Chapter 7/SimpleException/My Project/Application.Designer.vb create mode 100644 Code/Chapter 7/SimpleException/My Project/Application.myapp create mode 100644 Code/Chapter 7/SimpleException/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 7/SimpleException/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 7/SimpleException/My Project/Resources.resx create mode 100644 Code/Chapter 7/SimpleException/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 7/SimpleException/My Project/Settings.settings create mode 100644 Code/Chapter 7/SimpleException/Program.vb create mode 100644 Code/Chapter 7/SimpleException/Radio.vb create mode 100644 Code/Chapter 7/SimpleException/SimpleException.sln create mode 100644 Code/Chapter 7/SimpleException/SimpleException.suo create mode 100644 Code/Chapter 7/SimpleException/SimpleException.vbproj create mode 100644 Code/Chapter 7/SimpleException/SimpleException.vbproj.user create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Car.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/CarIsDeadException.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.Designer.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.myapp create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.resx create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.settings create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Program.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Radio.vb create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.sln create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.suo create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.vbproj create mode 100644 Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.vbproj.user create mode 100644 Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.sln create mode 100644 Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.suo create mode 100644 Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj create mode 100644 Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj.user create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Application.Designer.vb create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Application.myapp create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.resx create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.settings create mode 100644 Code/Chapter 8/FinalizableDisposableClass/MyResourceWrapper.vb create mode 100644 Code/Chapter 8/FinalizableDisposableClass/Program.vb create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Application.Designer.vb create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Application.myapp create mode 100644 Code/Chapter 8/SimpleDispose/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Resources.resx create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 8/SimpleDispose/My Project/Settings.settings create mode 100644 Code/Chapter 8/SimpleDispose/MyResourceWrapper.vb create mode 100644 Code/Chapter 8/SimpleDispose/Program.vb create mode 100644 Code/Chapter 8/SimpleDispose/SimpleDispose.sln create mode 100644 Code/Chapter 8/SimpleDispose/SimpleDispose.suo create mode 100644 Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj create mode 100644 Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj.user create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Application.Designer.vb create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Application.myapp create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Resources.resx create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 8/SimpleFinalize/My Project/Settings.settings create mode 100644 Code/Chapter 8/SimpleFinalize/MyResourceWrapper.vb create mode 100644 Code/Chapter 8/SimpleFinalize/Program.vb create mode 100644 Code/Chapter 8/SimpleFinalize/SimpleFinalize.sln create mode 100644 Code/Chapter 8/SimpleFinalize/SimpleFinalize.suo create mode 100644 Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj create mode 100644 Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj.user create mode 100644 Code/Chapter 8/SimpleGC/Car.vb create mode 100644 Code/Chapter 8/SimpleGC/My Project/Application.Designer.vb create mode 100644 Code/Chapter 8/SimpleGC/My Project/Application.myapp create mode 100644 Code/Chapter 8/SimpleGC/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 8/SimpleGC/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 8/SimpleGC/My Project/Resources.resx create mode 100644 Code/Chapter 8/SimpleGC/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 8/SimpleGC/My Project/Settings.settings create mode 100644 Code/Chapter 8/SimpleGC/Program.vb create mode 100644 Code/Chapter 8/SimpleGC/SimpleGC.sln create mode 100644 Code/Chapter 8/SimpleGC/SimpleGC.suo create mode 100644 Code/Chapter 8/SimpleGC/SimpleGC.vbproj create mode 100644 Code/Chapter 8/SimpleGC/SimpleGC.vbproj.user create mode 100644 Code/Chapter 9/CloneablePoint/CloneablePoint.sln create mode 100644 Code/Chapter 9/CloneablePoint/CloneablePoint.suo create mode 100644 Code/Chapter 9/CloneablePoint/CloneablePoint.vbproj create mode 100644 Code/Chapter 9/CloneablePoint/CloneablePoint.vbproj.user create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Application.myapp create mode 100644 Code/Chapter 9/CloneablePoint/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Resources.resx create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/CloneablePoint/My Project/Settings.settings create mode 100644 Code/Chapter 9/CloneablePoint/Point.vb create mode 100644 Code/Chapter 9/CloneablePoint/Program.vb create mode 100644 Code/Chapter 9/CollectionTypes/Car.vb create mode 100644 Code/Chapter 9/CollectionTypes/CarIsDeadException.vb create mode 100644 Code/Chapter 9/CollectionTypes/CollectionTypes.sln create mode 100644 Code/Chapter 9/CollectionTypes/CollectionTypes.suo create mode 100644 Code/Chapter 9/CollectionTypes/CollectionTypes.vbproj create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Application.myapp create mode 100644 Code/Chapter 9/CollectionTypes/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Resources.resx create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/CollectionTypes/My Project/Settings.settings create mode 100644 Code/Chapter 9/CollectionTypes/Program.vb create mode 100644 Code/Chapter 9/CollectionTypes/Radio.vb create mode 100644 Code/Chapter 9/ComparableCar/Car.vb create mode 100644 Code/Chapter 9/ComparableCar/CarIsDeadException.vb create mode 100644 Code/Chapter 9/ComparableCar/ComparableCar.sln create mode 100644 Code/Chapter 9/ComparableCar/ComparableCar.suo create mode 100644 Code/Chapter 9/ComparableCar/ComparableCar.vbproj create mode 100644 Code/Chapter 9/ComparableCar/ComparableCar.vbproj.user create mode 100644 Code/Chapter 9/ComparableCar/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/ComparableCar/My Project/Application.myapp create mode 100644 Code/Chapter 9/ComparableCar/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/ComparableCar/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/ComparableCar/My Project/Resources.resx create mode 100644 Code/Chapter 9/ComparableCar/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/ComparableCar/My Project/Settings.settings create mode 100644 Code/Chapter 9/ComparableCar/PetNameComparer.vb create mode 100644 Code/Chapter 9/ComparableCar/Program.vb create mode 100644 Code/Chapter 9/ComparableCar/Radio.vb create mode 100644 Code/Chapter 9/CustomEnumerator/Car.vb create mode 100644 Code/Chapter 9/CustomEnumerator/CustomEnumerator.sln create mode 100644 Code/Chapter 9/CustomEnumerator/CustomEnumerator.suo create mode 100644 Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj create mode 100644 Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj.user create mode 100644 Code/Chapter 9/CustomEnumerator/Garage.vb create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Application.myapp create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Resources.resx create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/CustomEnumerator/My Project/Settings.settings create mode 100644 Code/Chapter 9/CustomEnumerator/Program.vb create mode 100644 Code/Chapter 9/CustomEnumerator/Radio.vb create mode 100644 Code/Chapter 9/CustomInterface/CustomInterface.sln create mode 100644 Code/Chapter 9/CustomInterface/CustomInterface.suo create mode 100644 Code/Chapter 9/CustomInterface/CustomInterface.vbproj create mode 100644 Code/Chapter 9/CustomInterface/CustomInterface.vbproj.user create mode 100644 Code/Chapter 9/CustomInterface/IPointy.vb create mode 100644 Code/Chapter 9/CustomInterface/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/CustomInterface/My Project/Application.myapp create mode 100644 Code/Chapter 9/CustomInterface/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/CustomInterface/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/CustomInterface/My Project/Resources.resx create mode 100644 Code/Chapter 9/CustomInterface/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/CustomInterface/My Project/Settings.settings create mode 100644 Code/Chapter 9/CustomInterface/MyShapes.cd create mode 100644 Code/Chapter 9/CustomInterface/MyShapes.vb create mode 100644 Code/Chapter 9/CustomInterface/OtherPointyItems.vb create mode 100644 Code/Chapter 9/CustomInterface/Program.vb create mode 100644 Code/Chapter 9/CustomInterface/Shape.vb create mode 100644 Code/Chapter 9/CustomInterface/Triangle.vb create mode 100644 Code/Chapter 9/EventInterface/Car.vb create mode 100644 Code/Chapter 9/EventInterface/CarEventSink.vb create mode 100644 Code/Chapter 9/EventInterface/EventInterface.sln create mode 100644 Code/Chapter 9/EventInterface/EventInterface.suo create mode 100644 Code/Chapter 9/EventInterface/EventInterface.vbproj create mode 100644 Code/Chapter 9/EventInterface/EventInterface.vbproj.user create mode 100644 Code/Chapter 9/EventInterface/Interfaces.vb create mode 100644 Code/Chapter 9/EventInterface/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/EventInterface/My Project/Application.myapp create mode 100644 Code/Chapter 9/EventInterface/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/EventInterface/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/EventInterface/My Project/Resources.resx create mode 100644 Code/Chapter 9/EventInterface/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/EventInterface/My Project/Settings.settings create mode 100644 Code/Chapter 9/EventInterface/Program.vb create mode 100644 Code/Chapter 9/EventInterface/Radio.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.sln create mode 100644 Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.suo create mode 100644 Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj create mode 100644 Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj.user create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Application.myapp create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Resources.resx create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/My Project/Settings.settings create mode 100644 Code/Chapter 9/InterfaceHierarchy/MyInterfaces.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/Program.vb create mode 100644 Code/Chapter 9/InterfaceHierarchy/SuperShape.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/BlackAndWhiteBitmap.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.sln create mode 100644 Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.suo create mode 100644 Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj create mode 100644 Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj.user create mode 100644 Code/Chapter 9/InterfaceNameClash/Line.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Application.Designer.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Application.myapp create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/AssemblyInfo.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Resources.Designer.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Resources.resx create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Settings.Designer.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/My Project/Settings.settings create mode 100644 Code/Chapter 9/InterfaceNameClash/MyInterfaces.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/Octagon.vb create mode 100644 Code/Chapter 9/InterfaceNameClash/Program.vb create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 contributing.md diff --git a/9781590598221.jpg b/9781590598221.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d56a42692d7560ae2f395cd9ee280f7fdc68ad27 GIT binary patch literal 10600 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 1/Calc.cs b/Code/Chapter 1/Calc.cs new file mode 100644 index 0000000..911b212 --- /dev/null +++ b/Code/Chapter 1/Calc.cs @@ -0,0 +1,26 @@ +// Calc.cs +using System; + +namespace CalculatorExample +{ + // This class contains the app's entry point. + public class Program + { + static void Main() + { + Calc c = new Calc(); + int ans = c.Add(10, 84); + Console.WriteLine("10 + 84 is {0}.", ans); + + // Wait for user to press the Enter key before shutting down. + Console.ReadLine(); + } + } + + // The C# calculator. + public class Calc + { + public int Add(int x, int y) + { return x + y; } + } +} diff --git a/Code/Chapter 1/Calc.vb b/Code/Chapter 1/Calc.vb new file mode 100644 index 0000000..697c4f5 --- /dev/null +++ b/Code/Chapter 1/Calc.vb @@ -0,0 +1,21 @@ +' Calc.vb +Imports System + +Namespace CalculatorExample + ' A VB .NET 'Module' is a class that only contains + ' static members. + Module Program + Sub Main() + Dim c As New Calc + Dim ans As Integer = c.Add(10, 84) + Console.WriteLine("10 + 84 is {0}.", ans) + Console.ReadLine() + End Sub + End Module + + Class Calc + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + End Class +End Namespace diff --git a/Code/Chapter 1/ReadMe.txt b/Code/Chapter 1/ReadMe.txt new file mode 100644 index 0000000..f8bd46d --- /dev/null +++ b/Code/Chapter 1/ReadMe.txt @@ -0,0 +1,8 @@ +These files have been provided simply +because they were mentioned in Chapter 1. + +However, Chapter 2 explains how to compile +VB source code. If you want to compile Calc.vb +code into a .NET executable, check out Ch. 2. + +- Andrew \ No newline at end of file diff --git a/Code/Chapter 10/Boxing/Boxing.sln b/Code/Chapter 10/Boxing/Boxing.sln new file mode 100644 index 0000000..3988576 --- /dev/null +++ b/Code/Chapter 10/Boxing/Boxing.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Boxing", "Boxing.vbproj", "{6106329D-4867-4612-AB9C-689998AFEE8D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6106329D-4867-4612-AB9C-689998AFEE8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6106329D-4867-4612-AB9C-689998AFEE8D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6106329D-4867-4612-AB9C-689998AFEE8D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6106329D-4867-4612-AB9C-689998AFEE8D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/Boxing/Boxing.suo b/Code/Chapter 10/Boxing/Boxing.suo new file mode 100644 index 0000000000000000000000000000000000000000..1dead896c6c1a3909a1c3ce701de303e5890ecc5 GIT binary patch literal 14848 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 c+VeeS@tq_M6SgrC`lR{iDAf43Fl1poj5 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/Boxing/Boxing.vbproj b/Code/Chapter 10/Boxing/Boxing.vbproj new file mode 100644 index 0000000..9c56499 --- /dev/null +++ b/Code/Chapter 10/Boxing/Boxing.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {6106329D-4867-4612-AB9C-689998AFEE8D} + Exe + Boxing.Program + Boxing + Boxing + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Boxing.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Boxing.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/Boxing/Boxing.vbproj.user b/Code/Chapter 10/Boxing/Boxing.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 10/Boxing/Boxing.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 10/Boxing/My Project/Application.Designer.vb b/Code/Chapter 10/Boxing/My Project/Application.Designer.vb new file mode 100644 index 0000000..bf69971 --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1434 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/Boxing/My Project/Application.myapp b/Code/Chapter 10/Boxing/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/Boxing/My Project/AssemblyInfo.vb b/Code/Chapter 10/Boxing/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c6b9a19 --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/Boxing/My Project/Resources.Designer.vb b/Code/Chapter 10/Boxing/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9d03e5c --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1434 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Boxing.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/Boxing/My Project/Resources.resx b/Code/Chapter 10/Boxing/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/Boxing/My Project/Settings.Designer.vb b/Code/Chapter 10/Boxing/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d3b6f10 --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1434 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Boxing.My.MySettings + Get + Return Global.Boxing.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/Boxing/My Project/Settings.settings b/Code/Chapter 10/Boxing/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/Boxing/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/Boxing/Program.vb b/Code/Chapter 10/Boxing/Program.vb new file mode 100644 index 0000000..f25cd7f --- /dev/null +++ b/Code/Chapter 10/Boxing/Program.vb @@ -0,0 +1,52 @@ +Option Explicit On +Option Strict On + +' Structures are value types! +Structure MyPoint + Public x, y As Integer +End Structure + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Boxing / Unboxing *****") + Console.WriteLine() + + ' Make a short value type. + Dim s As Short = 25 + + ' Because s is passed into a + ' method prototyped to take an Object, + ' it is 'boxed' automatically. + UseThisObject(s) + + Dim myData As New ArrayList() + myData.Add(88) + myData.Add(3.33) + myData.Add(False) + + ' Unbox first item from ArrayList. + Dim firstItem As Integer = CType(myData(0), Integer) + Console.WriteLine("First item is {0} ", firstItem) + + Dim p As MyPoint + p.x = 10 + p.y = 20 + UseBoxedMyPoint(p) + + Console.ReadLine() + End Sub + + Sub UseThisObject(ByVal o As Object) + Console.WriteLine("Value of o is: {0} ", o) + End Sub + + Sub UseBoxedMyPoint(ByVal o As Object) + ' Error! System.Object does not have + ' member variables named 'x' or 'y'. + If TypeOf o Is MyPoint Then + Dim p As MyPoint = CType(o, MyPoint) + Console.WriteLine("{0}, {1}", p.x, p.y) + End If + End Sub +End Module diff --git a/Code/Chapter 10/CollectionTypes/Car.vb b/Code/Chapter 10/CollectionTypes/Car.vb new file mode 100644 index 0000000..ebc309f --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/Car.vb @@ -0,0 +1,104 @@ +Option Explicit On +Option Strict On + +Public Class Car + Implements IComparable + + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + Private carID As Integer + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + +#Region "Properties & constructors" + ' Properties. + Public Property Name() As String + Get + Return petName + End Get + Set(ByVal value As String) + petName = value + End Set + End Property + Public Property Speed() As Integer + Get + Return currSpeed + End Get + Set(ByVal value As Integer) + currSpeed = value + End Set + End Property + Public Property ID() As Integer + Get + Return carID + End Get + Set(ByVal value As Integer) + carID = value + End Set + End Property + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer, ByVal id As Integer) + currSpeed = currSp + petName = name + carID = id + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New Exception(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0} ", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub + + Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo + Dim temp As Car = CType(obj, Car) + If Me.carID > temp.carID Then + Return 1 + End If + If Me.carID < temp.carID Then + Return -1 + Else + Return 0 + End If + End Function + + Public Shared ReadOnly Property SortByPetName() As IComparer + Get + Return CType(New PetNameComparer(), IComparer) + End Get + End Property +End Class \ No newline at end of file diff --git a/Code/Chapter 10/CollectionTypes/CollectionTypes.sln b/Code/Chapter 10/CollectionTypes/CollectionTypes.sln new file mode 100644 index 0000000..309ad5a --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/CollectionTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CollectionTypes", "CollectionTypes.vbproj", "{13AF3C0E-433A-4DB1-BC39-2395E1207D7F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {13AF3C0E-433A-4DB1-BC39-2395E1207D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13AF3C0E-433A-4DB1-BC39-2395E1207D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13AF3C0E-433A-4DB1-BC39-2395E1207D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13AF3C0E-433A-4DB1-BC39-2395E1207D7F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/CollectionTypes/CollectionTypes.suo b/Code/Chapter 10/CollectionTypes/CollectionTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..de93f9fe9429445e368dc26f71601c74ef21d853 GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/CollectionTypes/CollectionTypes.vbproj b/Code/Chapter 10/CollectionTypes/CollectionTypes.vbproj new file mode 100644 index 0000000..b784c07 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/CollectionTypes.vbproj @@ -0,0 +1,112 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {13AF3C0E-433A-4DB1-BC39-2395E1207D7F} + Exe + CollectionTypes.Program + CollectionTypes + CollectionTypes + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + CollectionTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CollectionTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/CollectionTypes/My Project/Application.Designer.vb b/Code/Chapter 10/CollectionTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/CollectionTypes/My Project/Application.myapp b/Code/Chapter 10/CollectionTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/CollectionTypes/My Project/AssemblyInfo.vb b/Code/Chapter 10/CollectionTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..68f3060 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/CollectionTypes/My Project/Resources.Designer.vb b/Code/Chapter 10/CollectionTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2c02509 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CollectionTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/CollectionTypes/My Project/Resources.resx b/Code/Chapter 10/CollectionTypes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/CollectionTypes/My Project/Settings.Designer.vb b/Code/Chapter 10/CollectionTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8d6d095 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CollectionTypes.My.MySettings + Get + Return Global.CollectionTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/CollectionTypes/My Project/Settings.settings b/Code/Chapter 10/CollectionTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/CollectionTypes/PetNameComparer.vb b/Code/Chapter 10/CollectionTypes/PetNameComparer.vb new file mode 100644 index 0000000..487f77d --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/PetNameComparer.vb @@ -0,0 +1,13 @@ +Imports System.Collections + +Public Class PetNameComparer + Implements IComparer + + Public Sub New() + End Sub + Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare + Dim t1 As Car = CType(x, Car) + Dim t2 As Car = CType(y, Car) + Return String.Compare(t1.Name, t2.Name) + End Function +End Class diff --git a/Code/Chapter 10/CollectionTypes/Program.vb b/Code/Chapter 10/CollectionTypes/Program.vb new file mode 100644 index 0000000..fa8f458 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/Program.vb @@ -0,0 +1,102 @@ +Option Explicit On +Option Strict On + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with System.Collections *****" & vbLf) + ArrayListTest() + Console.WriteLine() + QueueTest() + Console.WriteLine() + StackTest() + Console.ReadLine() + End Sub + +#Region "ArrayList Test" + Sub ArrayListTest() + ' Make ArrayList and add a range of Cars. + Dim carArList As New ArrayList() + carArList.AddRange(New Car() {New Car("Fred", 90, 10), _ + New Car("Mary", 100, 50), New Car("MB", 190, 11)}) + Console.WriteLine("Items in carArList: {0}", carArList.Count) + + ' Iterate over contents using For / Each. + For Each c As Car In carArList + Console.WriteLine("Car pet name: {0}", c.Name) + Next + + ' Insert new car. + Console.WriteLine("->Inserting new Car.") + carArList.Insert(2, New Car("TheNewCar", 0, 12)) + Console.WriteLine("Items in carArList: {0}", carArList.Count) + + ' Get the subobjects as an array. + Dim arrayOfCars As Object() = carArList.ToArray() + Dim i As Integer = 0 + + ' Now iterate over array using While loop / Length property. + While i < arrayOfCars.Length + Console.WriteLine("Car pet name: {0}", CType(arrayOfCars(i), Car).Name) + i = i + 1 + End While + End Sub + +#End Region + +#Region "Queue Test" + Public Sub WashCar(ByVal c As Car) + Console.WriteLine("Cleaning {0}", c.Name) + End Sub + + Sub QueueTest() + ' Make a Q with three items. + Dim carWashQ As New Queue() + carWashQ.Enqueue(New Car("FirstCar", 0, 1)) + carWashQ.Enqueue(New Car("SecondCar", 0, 2)) + carWashQ.Enqueue(New Car("ThirdCar", 0, 3)) + + ' Peek at first car in Q. + Console.WriteLine("First in Q is {0}", _ + CType(carWashQ.Peek(), Car).Name) + + ' Remove each item from Q. + WashCar(CType(carWashQ.Dequeue(), Car)) + WashCar(CType(carWashQ.Dequeue(), Car)) + WashCar(CType(carWashQ.Dequeue(), Car)) + + ' Try to de-Q again? + Try + WashCar(CType(carWashQ.Dequeue(), Car)) + Catch ex As Exception + Console.WriteLine("Error!! {0}", ex.Message) + End Try + End Sub +#End Region + +#Region "Stack Test" + Sub StackTest() + Dim stringStack As New Stack() + stringStack.Push("One") + stringStack.Push("Two") + stringStack.Push("Three") + + ' Now look at the top item, pop it, and look again. + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + + Try + Console.WriteLine("Top item is: {0} ", stringStack.Peek()) + Console.WriteLine("Popped off {0} ", stringStack.Pop()) + Catch ex As Exception + Console.WriteLine("Error!! {0} ", ex.Message) + End Try + End Sub + +#End Region + +End Module diff --git a/Code/Chapter 10/CollectionTypes/Radio.vb b/Code/Chapter 10/CollectionTypes/Radio.vb new file mode 100644 index 0000000..1bfec88 --- /dev/null +++ b/Code/Chapter 10/CollectionTypes/Radio.vb @@ -0,0 +1,13 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class + diff --git a/Code/Chapter 10/CustomGenericCollection/CarCollection.vb b/Code/Chapter 10/CustomGenericCollection/CarCollection.vb new file mode 100644 index 0000000..ba9cc35 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/CarCollection.vb @@ -0,0 +1,45 @@ +Option Explicit On +Option Strict On + +Public Class CarCollection(Of T As Car) + Implements IEnumerable(Of T) + + Private myCars As New List(Of T) + + ' Error! System.Object does not have a + ' property named PetName. + Public Sub PrintPetName(ByVal pos As Integer) + Console.WriteLine(myCars(pos).PetName) + End Sub + + ' Type indexer. + Default Public Property Item(ByVal index As Integer) As T + Get + Return myCars(index) + End Get + Set(ByVal value As T) + myCars.Add(value) + End Set + End Property + + Public Sub ClearCars() + myCars.Clear() + End Sub + + Public Function CarCount() As Integer + Return myCars.Count() + End Function + +#Region "Interface implementations" + Public Function GetEnumeratorGeneric() As IEnumerator(Of T) _ + Implements IEnumerable(Of T).GetEnumerator + Return myCars.GetEnumerator() + End Function + + Public Function GetEnumerator() As IEnumerator _ + Implements IEnumerable.GetEnumerator + Return myCars.GetEnumerator() + End Function +#End Region + +End Class diff --git a/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.sln b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.sln new file mode 100644 index 0000000..c016d0c --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomGenericCollection", "CustomGenericCollection.vbproj", "{08AC02C1-15A2-4BB6-AA86-790A6785673A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {08AC02C1-15A2-4BB6-AA86-790A6785673A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {08AC02C1-15A2-4BB6-AA86-790A6785673A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08AC02C1-15A2-4BB6-AA86-790A6785673A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {08AC02C1-15A2-4BB6-AA86-790A6785673A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.suo b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.suo new file mode 100644 index 0000000000000000000000000000000000000000..e643d2a806b02fea5c4acdcc45c26e3a42bdf39f GIT binary patch literal 29184 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 URYup3l2wCLatPmi;}Mzu59EF17XSbN literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj new file mode 100644 index 0000000..4b73cbb --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {08AC02C1-15A2-4BB6-AA86-790A6785673A} + Exe + CustomGenericCollection.Program + CustomGenericCollection + CustomGenericCollection + Console + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + v3.5 + + + true + full + true + true + bin\Debug\ + CustomGenericCollection.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomGenericCollection.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj.user b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/CustomGenericCollection.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 10/CustomGenericCollection/ExampleConstraints.vb b/Code/Chapter 10/CustomGenericCollection/ExampleConstraints.vb new file mode 100644 index 0000000..4b4b0ed --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/ExampleConstraints.vb @@ -0,0 +1,31 @@ +Option Explicit On +Option Strict On + +' Contained items must have a default ctor. +Public Class MyGenericClass(Of T As New) +End Class + +' Contained items must implement ICloneable +' and support a default ctor. +Public Class MyGenericClass2(Of T As {ICloneable, New}) +End Class + +' MyGenericClass derives from SomBaseClass and implements ISomeInterface, +' while the contained items must be structures. +Public Class MyGenericClass3(Of T As Structure) + Inherits SomeBaseClass + Implements ISomeInterface +End Class + +' (Of K) must have a default ctor, while (Of T) must +' implement the generic IComparable interface. +Public Class MyGenericClass(Of K As New, T As IComparable(Of T)) +End Class + +#Region "Just so the previous code compiles..." +Public Class SomeBaseClass +End Class + +Public Interface ISomeInterface +End Interface +#End Region diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Application.Designer.vb b/Code/Chapter 10/CustomGenericCollection/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Application.myapp b/Code/Chapter 10/CustomGenericCollection/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/AssemblyInfo.vb b/Code/Chapter 10/CustomGenericCollection/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ece720b --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Resources.Designer.vb b/Code/Chapter 10/CustomGenericCollection/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bd81d07 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomGenericCollection.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Resources.resx b/Code/Chapter 10/CustomGenericCollection/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Settings.Designer.vb b/Code/Chapter 10/CustomGenericCollection/My Project/Settings.Designer.vb new file mode 100644 index 0000000..83aa75e --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomGenericCollection.My.MySettings + Get + Return Global.CustomGenericCollection.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/CustomGenericCollection/My Project/Settings.settings b/Code/Chapter 10/CustomGenericCollection/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/CustomGenericCollection/Program.vb b/Code/Chapter 10/CustomGenericCollection/Program.vb new file mode 100644 index 0000000..21f5838 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/Program.vb @@ -0,0 +1,29 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Custom Generic Collection *****") + Console.WriteLine() + + ' Make a collection of Cars. + Dim myCars As New CarCollection(Of Car) + myCars(0) = New Car("Rusty", 20) + myCars(1) = New Car("Zippy", 90) + + For Each c As Car In myCars + Console.WriteLine("PetName: {0} , Speed: {1} ", _ + c.PetName, c.Speed) + Next + + Console.WriteLine() + + Dim otherCars As New CarCollection(Of Car) + otherCars(0) = New MiniVan("Mel", 10) + otherCars(1) = New SportsCar("Suzy", 30) + For i As Integer = 0 To otherCars.CarCount - 1 + otherCars.PrintPetName(i) + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 10/CustomGenericCollection/SimpleCars.vb b/Code/Chapter 10/CustomGenericCollection/SimpleCars.vb new file mode 100644 index 0000000..0e46760 --- /dev/null +++ b/Code/Chapter 10/CustomGenericCollection/SimpleCars.vb @@ -0,0 +1,29 @@ +Option Explicit On +Option Strict On + +' A simple Car type for testing +Public Class Car + Public PetName As String + Public Speed As Integer + Public Sub New(ByVal name As String, ByVal sp As Integer) + PetName = name : Speed = sp + End Sub + Public Sub New() + End Sub +End Class + +Public Class SportsCar + Inherits Car + Public Sub New(ByVal p As String, ByVal s As Integer) + MyBase.New(p, s) + End Sub + ' Assume additional SportsCar methods. +End Class + +Public Class MiniVan + Inherits Car + Public Sub New(ByVal p As String, ByVal s As Integer) + MyBase.New(p, s) + End Sub + ' Assume additional MiniVan methods. +End Class diff --git a/Code/Chapter 10/GenericDelegate/GenericDelegate.sln b/Code/Chapter 10/GenericDelegate/GenericDelegate.sln new file mode 100644 index 0000000..8ef7295 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/GenericDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GenericDelegate", "GenericDelegate.vbproj", "{EA004E11-FF3F-43BD-BB64-404DCE200AF8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EA004E11-FF3F-43BD-BB64-404DCE200AF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA004E11-FF3F-43BD-BB64-404DCE200AF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA004E11-FF3F-43BD-BB64-404DCE200AF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA004E11-FF3F-43BD-BB64-404DCE200AF8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/GenericDelegate/GenericDelegate.suo b/Code/Chapter 10/GenericDelegate/GenericDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..141cc1863a05b8becd9ea564f9cf080a67d3f08f GIT binary patch literal 23552 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 S^lRl--mS*}K-7M9ss8~ + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {EA004E11-FF3F-43BD-BB64-404DCE200AF8} + Exe + GenericDelegate.Program + GenericDelegate + GenericDelegate + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + GenericDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + GenericDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericDelegate/GenericDelegate.vbproj.user b/Code/Chapter 10/GenericDelegate/GenericDelegate.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/GenericDelegate.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericDelegate/My Project/Application.Designer.vb b/Code/Chapter 10/GenericDelegate/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/GenericDelegate/My Project/Application.myapp b/Code/Chapter 10/GenericDelegate/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/GenericDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 10/GenericDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..81801a0 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/GenericDelegate/My Project/Resources.Designer.vb b/Code/Chapter 10/GenericDelegate/My Project/Resources.Designer.vb new file mode 100644 index 0000000..42b525c --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GenericDelegate.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericDelegate/My Project/Resources.resx b/Code/Chapter 10/GenericDelegate/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericDelegate/My Project/Settings.Designer.vb b/Code/Chapter 10/GenericDelegate/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1445d02 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.GenericDelegate.My.MySettings + Get + Return Global.GenericDelegate.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericDelegate/My Project/Settings.settings b/Code/Chapter 10/GenericDelegate/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/GenericDelegate/Program.vb b/Code/Chapter 10/GenericDelegate/Program.vb new file mode 100644 index 0000000..9d2dfc3 --- /dev/null +++ b/Code/Chapter 10/GenericDelegate/Program.vb @@ -0,0 +1,62 @@ +Option Explicit On +Option Strict On + +' This generic delegate can point to any method +' taking a single argument (specified at the time +' of creation). +Public Delegate Sub MyGenericDelegate(Of T)(ByVal arg As T) + +#Region "Simulating generic delegates with Object." +Public Delegate Sub MyDelegate(ByVal arg As Object) + +Module NonGenericDelegateTest + Sub TestMethod() + ' Register target with 'traditional' delegate syntax. + Dim d As New MyDelegate(AddressOf MyTarget) + d("More string data") + + ' Register target using method group conversion. + Dim d2 As New MyDelegate(AddressOf MyTarget) + d2(9) ' Boxing penalty! + End Sub + + ' Due to a lack of type safety, we must + ' determine the underlying type before casting. + Sub MyTarget(ByVal arg As Object) + If TypeOf arg Is Integer Then + Dim i As Integer = CType(arg, Integer) ' Unboxing penalty! + Console.WriteLine("++arg is: {0}", ++i) + End If + If TypeOf arg Is String Then + Dim s As String = CType(arg, String) + Console.WriteLine("arg in uppercase is: {0}", s.ToUpper()) + End If + End Sub +End Module +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Fun with generic delegates *****") + Console.WriteLine() + + ' Make instance of delegate pointing to method taking an + ' integer. + Dim d As New MyGenericDelegate(Of Integer)(AddressOf IntegerTarget) + d(100) + + ' Now pointing to a method taking a string. + Dim d2 As New MyGenericDelegate(Of String)(AddressOf StringTarget) + d2("Cool!") + End Sub + + Public Sub IntegerTarget(ByVal arg As Integer) + Console.WriteLine("You passed me a {0} with the value of {1}", _ + arg.GetType().Name, arg) + End Sub + + Public Sub StringTarget(ByVal arg As String) + Console.WriteLine("You passed me a {0} with the value of {1}", _ + arg.GetType().Name, arg) + End Sub +End Module diff --git a/Code/Chapter 10/GenericInterface/GenericInterface.sln b/Code/Chapter 10/GenericInterface/GenericInterface.sln new file mode 100644 index 0000000..9291376 --- /dev/null +++ b/Code/Chapter 10/GenericInterface/GenericInterface.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GenericInterface", "GenericInterface.vbproj", "{4E436B31-4279-48BD-BB6E-603F6AC5C7E2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4E436B31-4279-48BD-BB6E-603F6AC5C7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E436B31-4279-48BD-BB6E-603F6AC5C7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E436B31-4279-48BD-BB6E-603F6AC5C7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E436B31-4279-48BD-BB6E-603F6AC5C7E2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/GenericInterface/GenericInterface.suo b/Code/Chapter 10/GenericInterface/GenericInterface.suo new file mode 100644 index 0000000000000000000000000000000000000000..da9957add29b46ba156f29b472b0b9b5380c42aa GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/GenericInterface/GenericInterface.vbproj b/Code/Chapter 10/GenericInterface/GenericInterface.vbproj new file mode 100644 index 0000000..022020a --- /dev/null +++ b/Code/Chapter 10/GenericInterface/GenericInterface.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4E436B31-4279-48BD-BB6E-603F6AC5C7E2} + Exe + GenericInterface.Program + GenericInterface + GenericInterface + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + GenericInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + GenericInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericInterface/GenericInterface.vbproj.user b/Code/Chapter 10/GenericInterface/GenericInterface.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/GenericInterface/GenericInterface.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericInterface/My Project/Application.Designer.vb b/Code/Chapter 10/GenericInterface/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/GenericInterface/My Project/Application.myapp b/Code/Chapter 10/GenericInterface/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/GenericInterface/My Project/AssemblyInfo.vb b/Code/Chapter 10/GenericInterface/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..25e4e52 --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/GenericInterface/My Project/Resources.Designer.vb b/Code/Chapter 10/GenericInterface/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1fe2daf --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GenericInterface.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericInterface/My Project/Resources.resx b/Code/Chapter 10/GenericInterface/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericInterface/My Project/Settings.Designer.vb b/Code/Chapter 10/GenericInterface/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c49377c --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.GenericInterface.My.MySettings + Get + Return Global.GenericInterface.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericInterface/My Project/Settings.settings b/Code/Chapter 10/GenericInterface/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/GenericInterface/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/GenericInterface/Program.vb b/Code/Chapter 10/GenericInterface/Program.vb new file mode 100644 index 0000000..df76a70 --- /dev/null +++ b/Code/Chapter 10/GenericInterface/Program.vb @@ -0,0 +1,44 @@ +Option Explicit On +Option Strict On + +#Region "Generic interface and implementation class" +Public Interface IBasicMath(Of T) + Function Add(ByVal a As T, ByVal b As T) As T + Function Subtract(ByVal a As T, ByVal b As T) As T + Function Multiply(ByVal a As T, ByVal b As T) As T + Function Divide(ByVal a As T, ByVal b As T) As T +End Interface + +Public Class BasicMath + Implements IBasicMath(Of Integer) + + Public Function Add(ByVal a As Integer, ByVal b As Integer) _ + As Integer Implements IBasicMath(Of Integer).Add + Return a + b + End Function + + Public Function Divide(ByVal a As Integer, ByVal b As Integer) _ + As Integer Implements IBasicMath(Of Integer).Divide + Return CInt(a / b) + End Function + + Public Function Multiply(ByVal a As Integer, ByVal b As Integer) _ + As Integer Implements IBasicMath(Of Integer).Multiply + Return a * b + End Function + + Public Function Subtract(ByVal a As Integer, ByVal b As Integer) _ + As Integer Implements IBasicMath(Of Integer).Subtract + Return a - b + End Function +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Generic Interfaces *****") + Dim m As New BasicMath() + Console.WriteLine("1 + 1 = {0} ", m.Add(1, 1)) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 10/GenericStructure/GenericStructure.sln b/Code/Chapter 10/GenericStructure/GenericStructure.sln new file mode 100644 index 0000000..3aaa334 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/GenericStructure.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GenericStructure", "GenericStructure.vbproj", "{2693150F-59DE-4049-8206-0DE13BA28B62}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2693150F-59DE-4049-8206-0DE13BA28B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2693150F-59DE-4049-8206-0DE13BA28B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2693150F-59DE-4049-8206-0DE13BA28B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2693150F-59DE-4049-8206-0DE13BA28B62}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/GenericStructure/GenericStructure.suo b/Code/Chapter 10/GenericStructure/GenericStructure.suo new file mode 100644 index 0000000000000000000000000000000000000000..cd4e4f1e4c0b9dfe0c4b65efa43ac5b4a5427f2c GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/GenericStructure/GenericStructure.vbproj b/Code/Chapter 10/GenericStructure/GenericStructure.vbproj new file mode 100644 index 0000000..5b73753 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/GenericStructure.vbproj @@ -0,0 +1,135 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2693150F-59DE-4049-8206-0DE13BA28B62} + Exe + GenericStructure.Program + GenericStructure + GenericStructure + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + GenericStructure.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + GenericStructure.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericStructure/GenericStructure.vbproj.user b/Code/Chapter 10/GenericStructure/GenericStructure.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/GenericStructure.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericStructure/My Project/Application.Designer.vb b/Code/Chapter 10/GenericStructure/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/GenericStructure/My Project/Application.myapp b/Code/Chapter 10/GenericStructure/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/GenericStructure/My Project/AssemblyInfo.vb b/Code/Chapter 10/GenericStructure/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ed084fc --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/GenericStructure/My Project/Resources.Designer.vb b/Code/Chapter 10/GenericStructure/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d48cb89 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GenericStructure.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericStructure/My Project/Resources.resx b/Code/Chapter 10/GenericStructure/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericStructure/My Project/Settings.Designer.vb b/Code/Chapter 10/GenericStructure/My Project/Settings.Designer.vb new file mode 100644 index 0000000..2265a71 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.GenericStructure.My.MySettings + Get + Return Global.GenericStructure.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericStructure/My Project/Settings.settings b/Code/Chapter 10/GenericStructure/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/GenericStructure/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/GenericStructure/Point.vb b/Code/Chapter 10/GenericStructure/Point.vb new file mode 100644 index 0000000..894bc85 --- /dev/null +++ b/Code/Chapter 10/GenericStructure/Point.vb @@ -0,0 +1,33 @@ +Option Explicit On +Option Strict On + +Public Structure Point(Of T) + Private xPos, yPos As T + + Public Sub New(ByVal x As T, ByVal y As T) + xPos = x : yPos = y + End Sub + +#Region "Properties for (x, y) values" + Public Property X() As T + Get + Return xPos + End Get + Set(ByVal value As T) + xPos = value + End Set + End Property + Public Property Y() As T + Get + Return xPos + End Get + Set(ByVal value As T) + yPos = value + End Set + End Property +#End Region + + Public Overrides Function ToString() As String + Return String.Format("({0}, {1})", xPos, yPos) + End Function +End Structure \ No newline at end of file diff --git a/Code/Chapter 10/GenericStructure/Program.vb b/Code/Chapter 10/GenericStructure/Program.vb new file mode 100644 index 0000000..addb99a --- /dev/null +++ b/Code/Chapter 10/GenericStructure/Program.vb @@ -0,0 +1,43 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Custom Generic Types *****") + Console.WriteLine() + + ' Make a Point Integers. + Dim intPt As New Point(Of Integer)(100, 100) + Console.WriteLine("intPt.ToString()={0} ", intPt.ToString()) + Console.WriteLine() + + ' Point using double. + Dim dblPt As New Point(Of Double)(5.6, 3.23) + Console.WriteLine("dblPt.ToString()={0} ", dblPt.ToString()) + Console.WriteLine() + + ' Swap 2 Points. + Dim p1 As New Point(Of Integer)(10, 43) + Dim p2 As New Point(Of Integer)(6, 987) + Console.WriteLine("Before swap: {0} , {1} ", p1, p2) + + ' Here we are swapping two points of type Integer. + Swap(Of Point(Of Integer))(p1, p2) + + ' Could also simply write the following + ' given type inference. + ' Swap(p1, p2) + + Console.WriteLine("After swap: {0} , {1} ", p1, p2) + Console.ReadLine() + End Sub + + ' This generic method can swap any two items of type 'T' + Public Function Swap(Of T)(ByRef a As T, ByRef b As T) As T + Console.WriteLine("T is a {0}.", GetType(T)) + Dim temp As T + temp = a + a = b + b = temp + End Function +End Module diff --git a/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.sln b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.sln new file mode 100644 index 0000000..6b31c57 --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GenericSwapMethod", "GenericSwapMethod.vbproj", "{E03E5102-4B92-4518-8A6D-0DBBF08B07F8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E03E5102-4B92-4518-8A6D-0DBBF08B07F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E03E5102-4B92-4518-8A6D-0DBBF08B07F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E03E5102-4B92-4518-8A6D-0DBBF08B07F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E03E5102-4B92-4518-8A6D-0DBBF08B07F8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.suo b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.suo new file mode 100644 index 0000000000000000000000000000000000000000..739a131ed1bb80385da0400dd459d1704ad9b78b GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj new file mode 100644 index 0000000..ceb22ae --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E03E5102-4B92-4518-8A6D-0DBBF08B07F8} + Exe + GenericSwapMethod.Program + GenericSwapMethod + GenericSwapMethod + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + GenericSwapMethod.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + GenericSwapMethod.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj.user b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/GenericSwapMethod.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Application.Designer.vb b/Code/Chapter 10/GenericSwapMethod/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Application.myapp b/Code/Chapter 10/GenericSwapMethod/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/AssemblyInfo.vb b/Code/Chapter 10/GenericSwapMethod/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c5ce070 --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Resources.Designer.vb b/Code/Chapter 10/GenericSwapMethod/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5a7a214 --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GenericSwapMethod.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Resources.resx b/Code/Chapter 10/GenericSwapMethod/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Settings.Designer.vb b/Code/Chapter 10/GenericSwapMethod/My Project/Settings.Designer.vb new file mode 100644 index 0000000..442439d --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.GenericSwapMethod.My.MySettings + Get + Return Global.GenericSwapMethod.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/GenericSwapMethod/My Project/Settings.settings b/Code/Chapter 10/GenericSwapMethod/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/GenericSwapMethod/Program.vb b/Code/Chapter 10/GenericSwapMethod/Program.vb new file mode 100644 index 0000000..249fed1 --- /dev/null +++ b/Code/Chapter 10/GenericSwapMethod/Program.vb @@ -0,0 +1,74 @@ +Option Explicit On +Option Strict On + +#Region "Non-generic members" +Module NonGenericMethods + Public Function Swap(ByRef a As Integer, ByRef b As Integer) As Integer + Dim temp As Integer + temp = a + a = b + b = temp + End Function + Public Function Swap(ByRef a As Double, ByRef b As Double) As Double + Dim temp As Double + temp = a + a = b + b = temp + End Function +End Module +#End Region + +Module Program + +#Region "Generic methods" + ' This generic method can swap any two items of type 'T'. + Public Function Swap(Of T)(ByRef a As T, ByRef b As T) As T + Console.WriteLine("T is a {0}.", GetType(T)) + Dim temp As T + temp = a + a = b + b = temp + End Function + + ' Display the base class of 'T'. + Sub DisplayBaseClass(Of T)() + Console.WriteLine("Base class of {0} is: {1}.", _ + GetType(T), GetType(T).BaseType) + End Sub +#End Region + + Sub Main() + Console.WriteLine("***** Fun with Generic Methods *****" & vbLf) + + ' Swap two Integers. + Dim a, b As Integer + a = 10 : b = 40 + Console.WriteLine("Before swap: a={0}, b={1}", a, b) + Swap(Of Integer)(a, b) + Console.WriteLine("After swap: a={0}, b={1}", a, b) + Console.WriteLine() + + ' Swap two Strings. + Dim s1, s2 As String + s1 = "Generics" : s2 = "Rock" + Console.WriteLine("Before swap: s1={0}, s2={1}", s1, s2) + Swap(Of String)(s1, s2) + Console.WriteLine("After swap: s1={0}, s2={1}", s1, s2) + Console.WriteLine() + + ' Compiler will infer System.Boolean. + Dim b1, b2 As Boolean + b1 = True : b2 = False + Console.WriteLine("Before swap: b1={0}, b2={1}", b1, b2) + Swap(b1, b2) + Console.WriteLine("Before swap: b1={0}, b2={1}", b1, b2) + Console.WriteLine() + + ' Must specify 'T' when a generic + ' method takes no parameters. + DisplayBaseClass(Of Boolean)() + DisplayBaseClass(Of String)() + DisplayBaseClass(Of Integer)() + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 10/NullableData/My Project/Application.Designer.vb b/Code/Chapter 10/NullableData/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/NullableData/My Project/Application.myapp b/Code/Chapter 10/NullableData/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/NullableData/My Project/AssemblyInfo.vb b/Code/Chapter 10/NullableData/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..56816d9 --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/NullableData/My Project/Resources.Designer.vb b/Code/Chapter 10/NullableData/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d8c41ad --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("NullableData.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/NullableData/My Project/Resources.resx b/Code/Chapter 10/NullableData/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/NullableData/My Project/Settings.Designer.vb b/Code/Chapter 10/NullableData/My Project/Settings.Designer.vb new file mode 100644 index 0000000..7bc48f7 --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.NullableData.My.MySettings + Get + Return Global.NullableData.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/NullableData/My Project/Settings.settings b/Code/Chapter 10/NullableData/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/NullableData/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/NullableData/NullableData.sln b/Code/Chapter 10/NullableData/NullableData.sln new file mode 100644 index 0000000..a3f6b60 --- /dev/null +++ b/Code/Chapter 10/NullableData/NullableData.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NullableData", "NullableData.vbproj", "{0E8206B7-765B-45EB-80A2-0CC6CB922CC7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0E8206B7-765B-45EB-80A2-0CC6CB922CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E8206B7-765B-45EB-80A2-0CC6CB922CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E8206B7-765B-45EB-80A2-0CC6CB922CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E8206B7-765B-45EB-80A2-0CC6CB922CC7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/NullableData/NullableData.suo b/Code/Chapter 10/NullableData/NullableData.suo new file mode 100644 index 0000000000000000000000000000000000000000..5bab4806966453d1655a079af61fd9c39fced3f5 GIT binary patch literal 25088 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 HI}iSU0NsX} literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/NullableData/NullableData.vbproj b/Code/Chapter 10/NullableData/NullableData.vbproj new file mode 100644 index 0000000..6aea4d5 --- /dev/null +++ b/Code/Chapter 10/NullableData/NullableData.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {0E8206B7-765B-45EB-80A2-0CC6CB922CC7} + Exe + NullableData.Program + NullableData + NullableData + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + NullableData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + NullableData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/NullableData/NullableData.vbproj.user b/Code/Chapter 10/NullableData/NullableData.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/NullableData/NullableData.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 10/NullableData/Program.vb b/Code/Chapter 10/NullableData/Program.vb new file mode 100644 index 0000000..1c087c5 --- /dev/null +++ b/Code/Chapter 10/NullableData/Program.vb @@ -0,0 +1,89 @@ +Option Explicit On +Option Strict On + +#Region "Helper classes" +'Class DatabaseReader +' ' Nullable data fields. +' Public numericValue As Nullable(Of Integer) +' Public boolValue As Nullable(Of Boolean) = True + +' ' Note the nullable return type. +' Public Function GetIntFromDatabase() As Nullable(Of Integer) +' Return numericValue +' End Function + +' ' Note the nullable return type. +' Public Function GetBoolFromDatabase() As Nullable(Of Boolean) +' Return boolValue +' End Function +'End Class + +Class DatabaseReader + ' Note the use of the ? operator in the class + ' definition. + Public numericValue As Integer? + Public boolValue As Boolean? = True + + ' Note the nullable return type. + Public Function GetIntFromDatabase() As Integer? + Return numericValue + End Function + + ' Note the nullable return type. + Public Function GetBoolFromDatabase() As Boolean? + Return boolValue + End Function +End Class +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Nullable Data *****" & vbLf) + Dim dr As New DatabaseReader() + + ' Get int from 'database'. + Dim i As Integer? = dr.GetIntFromDatabase() + If (i.HasValue) Then + Console.WriteLine("Value of 'i' is: {0}", i.Value) + Else + Console.WriteLine("Value of 'i' is undefined.") + End If + + ' Get bool from 'database'. + Dim b As Boolean? = dr.GetBoolFromDatabase() + If (b.HasValue) Then + Console.WriteLine("Value of 'b' is: {0}", b.Value) + Else + Console.WriteLine("Value of 'b' is undefined.") + End If + + Console.ReadLine() + End Sub + +#Region "Main with Nullable (Of T)" + 'Sub Main() + ' Console.WriteLine("***** Fun with Nullable Data *****") + ' Console.WriteLine() + ' Dim dr As New DatabaseReader() + + ' ' Get int from 'database'. + ' Dim i As Nullable(Of Integer) = dr.GetIntFromDatabase() + ' If (i.HasValue) Then + ' Console.WriteLine("Value of 'i' is: {0}", i.Value) + ' Else + ' Console.WriteLine("Value of 'i' is undefined.") + ' End If + + ' ' Get bool from 'database'. + ' Dim b As Nullable(Of Boolean) = dr.GetBoolFromDatabase() + ' If (b.HasValue) Then + ' Console.WriteLine("Value of 'b' is: {0}", b.Value) + ' Else + ' Console.WriteLine("Value of 'b' is undefined.") + ' End If + ' Console.ReadLine() + 'End Sub +#End Region + +End Module diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Application.Designer.vb b/Code/Chapter 10/SimpleGenerics/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Application.myapp b/Code/Chapter 10/SimpleGenerics/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/SimpleGenerics/My Project/AssemblyInfo.vb b/Code/Chapter 10/SimpleGenerics/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7a0613e --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Resources.Designer.vb b/Code/Chapter 10/SimpleGenerics/My Project/Resources.Designer.vb new file mode 100644 index 0000000..31a00ff --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleGenerics.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Resources.resx b/Code/Chapter 10/SimpleGenerics/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Settings.Designer.vb b/Code/Chapter 10/SimpleGenerics/My Project/Settings.Designer.vb new file mode 100644 index 0000000..971c962 --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleGenerics.My.MySettings + Get + Return Global.SimpleGenerics.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/SimpleGenerics/My Project/Settings.settings b/Code/Chapter 10/SimpleGenerics/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/SimpleGenerics/Program.vb b/Code/Chapter 10/SimpleGenerics/Program.vb new file mode 100644 index 0000000..c446292 --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/Program.vb @@ -0,0 +1,28 @@ +Option Explicit On +Option Strict On + +Public Class Car +End Class + +Module Program + Sub Main() + Console.WriteLine("***** This example does not do much beyond showing *****") + Console.WriteLine("***** how to declare a generic type *****") + Console.WriteLine() + + ' A list of Cars. + Dim myCars As New List(Of Car) + myCars.Add(New Car()) + Console.WriteLine("myCars contains {0} items", _ + myCars.Count) + + ' A list of Integers. + Dim MyInts As New List(Of Integer) + MyInts.Add(50) + ' No unboxing! + Dim val As Integer = MyInts.Count + Console.WriteLine("myInts contains {0} items", MyInts.Count) + Console.ReadLine() + End Sub +End Module + diff --git a/Code/Chapter 10/SimpleGenerics/SimpleGenerics.sln b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.sln new file mode 100644 index 0000000..29ff854 --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleGenerics", "SimpleGenerics.vbproj", "{1BFBC666-99B9-40B4-96AA-104434CCE728}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1BFBC666-99B9-40B4-96AA-104434CCE728}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BFBC666-99B9-40B4-96AA-104434CCE728}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BFBC666-99B9-40B4-96AA-104434CCE728}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BFBC666-99B9-40B4-96AA-104434CCE728}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/SimpleGenerics/SimpleGenerics.suo b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.suo new file mode 100644 index 0000000000000000000000000000000000000000..f007442888fd9960c417668687c020ca11afaa4c GIT binary patch literal 16384 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 CO>1%h literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj new file mode 100644 index 0000000..c50aec5 --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1BFBC666-99B9-40B4-96AA-104434CCE728} + Exe + SimpleGenerics.Program + SimpleGenerics + SimpleGenerics + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleGenerics.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleGenerics.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj.user b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj.user new file mode 100644 index 0000000..fdcb14e --- /dev/null +++ b/Code/Chapter 10/SimpleGenerics/SimpleGenerics.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 10/StronglyTypedCollections/Car.vb b/Code/Chapter 10/StronglyTypedCollections/Car.vb new file mode 100644 index 0000000..b578655 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/Car.vb @@ -0,0 +1,6 @@ +Option Explicit On +Option Strict On + +' This is just to test the custom Car collection. +Public Class Car +End Class diff --git a/Code/Chapter 10/StronglyTypedCollections/CarCollection.vb b/Code/Chapter 10/StronglyTypedCollections/CarCollection.vb new file mode 100644 index 0000000..aa0d76c --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/CarCollection.vb @@ -0,0 +1,41 @@ +Option Explicit On +Option Strict On + +Public Class CarCollection + Implements IEnumerable + Private arCars As New ArrayList() + + Public Function GetCar(ByVal pos As Integer) As Car + Return CType(arCars(pos), Car) + End Function + + Public Sub AddCar(ByVal c As Car) + arCars.Add(c) + End Sub + + Public Sub ClearCars() + arCars.Clear() + End Sub + + Public ReadOnly Property Count() As Integer + Get + Return arCars.Count + End Get + End Property + + Public Function GetEnumerator() As IEnumerator _ + Implements IEnumerable.GetEnumerator + Return arCars.GetEnumerator() + End Function + + ' The 'indexer' of this custom collection. + Default Public Property Item(ByVal c As Integer) As Car + Get + Return CType(arCars(c), Car) + End Get + Set(ByVal value As Car) + arCars.Insert(c, value) + End Set + End Property + +End Class diff --git a/Code/Chapter 10/StronglyTypedCollections/IntegerCollection.vb b/Code/Chapter 10/StronglyTypedCollections/IntegerCollection.vb new file mode 100644 index 0000000..577d564 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/IntegerCollection.vb @@ -0,0 +1,41 @@ +Option Explicit On +Option Strict On + +Public Class IntegerCollection + Implements IEnumerable + + Private arInts As New ArrayList() + + Public Function GetInt(ByVal pos As Integer) As Integer + Return CType(arInts(pos), Integer) + End Function + + Public Sub AddInt(ByVal i As Integer) + arInts.Add(i) + End Sub + + Public Sub ClearInts() + arInts.Clear() + End Sub + + Public ReadOnly Property Count() As Integer + Get + Return arInts.Count + End Get + End Property + + Public Function GetEnumerator() As IEnumerator _ + Implements IEnumerable.GetEnumerator + Return arInts.GetEnumerator() + End Function + + ' The 'indexer' of this custom collection. + Default Public Property Item(ByVal c As Integer) As Integer + Get + Return CType(arInts(c), Integer) + End Get + Set(ByVal value As Integer) + arInts.Insert(c, value) + End Set + End Property +End Class diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Application.Designer.vb b/Code/Chapter 10/StronglyTypedCollections/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Application.myapp b/Code/Chapter 10/StronglyTypedCollections/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/AssemblyInfo.vb b/Code/Chapter 10/StronglyTypedCollections/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c5b6855 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.Designer.vb b/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c1d6ea4 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("StronglyTypedCollections.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.resx b/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.Designer.vb b/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.Designer.vb new file mode 100644 index 0000000..211a3a9 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.StronglyTypedCollections.My.MySettings + Get + Return Global.StronglyTypedCollections.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.settings b/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 10/StronglyTypedCollections/PeopleCollection.vb b/Code/Chapter 10/StronglyTypedCollections/PeopleCollection.vb new file mode 100644 index 0000000..37766f8 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/PeopleCollection.vb @@ -0,0 +1,41 @@ +Option Explicit On +Option Strict On + +Public Class PeopleCollection + Implements IEnumerable + Private arPeople As New ArrayList() + + Public Function GetPerson(ByVal pos As Integer) As Person + Return CType(arPeople(pos), Person) + End Function + + Public Sub AddPerson(ByVal p As Person) + arPeople.Add(p) + End Sub + + Public Sub ClearPeople() + arPeople.Clear() + End Sub + + Public ReadOnly Property Count() As Integer + Get + Return arPeople.Count + End Get + End Property + + Public Function GetEnumerator() As IEnumerator _ + Implements IEnumerable.GetEnumerator + Return arPeople.GetEnumerator() + End Function + + ' The 'indexer' of this custom collection. + Default Public Property Item(ByVal p As Integer) As Person + Get + Return CType(arPeople(p), Person) + End Get + Set(ByVal value As Person) + arPeople.Insert(p, value) + End Set + End Property + +End Class diff --git a/Code/Chapter 10/StronglyTypedCollections/Person.vb b/Code/Chapter 10/StronglyTypedCollections/Person.vb new file mode 100644 index 0000000..f66684f --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/Person.vb @@ -0,0 +1,22 @@ +Option Explicit On +Option Strict On + +Public Class Person + ' Made public for simplicity. + Public currAge As Integer + Public fName As String + Public lName As String + + Public Sub New() + End Sub + Public Sub New(ByVal firstName As String, ByVal lastName As String, _ + ByVal age As Integer) + currAge = age + fName = firstName + lName = lastName + End Sub + + Public Overrides Function ToString() As String + Return String.Format("{0}, {1} is {2} years old.", lName, fName, currAge) + End Function +End Class diff --git a/Code/Chapter 10/StronglyTypedCollections/Program.vb b/Code/Chapter 10/StronglyTypedCollections/Program.vb new file mode 100644 index 0000000..b03dc30 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/Program.vb @@ -0,0 +1,43 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Strongly Typed Collections *****") + Console.WriteLine() + + Dim myPeople As New PeopleCollection() + myPeople.AddPerson(New Person("Homer", "Simpson", 40)) + myPeople.AddPerson(New Person("Marge", "Simpson", 38)) + myPeople.AddPerson(New Person("Lisa", "Simpson", 9)) + myPeople.AddPerson(New Person("Bart", "Simpson", 7)) + myPeople.AddPerson(New Person("Maggie", "Simpson", 2)) + + ' This would be a compile-time error! + ' Uncomment line below to test. + ' myPeople.AddPerson(New Car) + + For Each p As Person In myPeople + Console.WriteLine(p) + Next + + ' Use the generic List type to hold only people. + Dim morePeople As New List(Of Person) + morePeople.Add(New Person()) + + ' Use the generic List type to hold only cars. + Dim moreCars As New List(Of Car) + moreCars.Add(New Car()) + + ' Compile-time error! + ' Uncomment line below to test. + ' moreCars.Add(New Person()) + + ' Get / Set new Person object using type indexer. + myPeople(5) = New Person("Waylon", "Smithers", 47) + Console.WriteLine("Person #5 is {0}", myPeople(5)) + + Console.ReadLine() + + End Sub +End Module diff --git a/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.sln b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.sln new file mode 100644 index 0000000..771f98a --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StronglyTypedCollections", "StronglyTypedCollections.vbproj", "{961B843C-AC0E-4F47-9BB2-5C8A274D08BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {961B843C-AC0E-4F47-9BB2-5C8A274D08BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {961B843C-AC0E-4F47-9BB2-5C8A274D08BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {961B843C-AC0E-4F47-9BB2-5C8A274D08BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {961B843C-AC0E-4F47-9BB2-5C8A274D08BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.suo b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.suo new file mode 100644 index 0000000000000000000000000000000000000000..993be1727cdcff4b474e3e77d0e456eec256f8fe GIT binary patch literal 25088 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj new file mode 100644 index 0000000..566ef7e --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {961B843C-AC0E-4F47-9BB2-5C8A274D08BA} + Exe + StronglyTypedCollections.Program + StronglyTypedCollections + StronglyTypedCollections + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + StronglyTypedCollections.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + StronglyTypedCollections.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj.user b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 10/StronglyTypedCollections/StronglyTypedCollections.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 11/CarDelegate/Car.vb b/Code/Chapter 11/CarDelegate/Car.vb new file mode 100644 index 0000000..09f70bc --- /dev/null +++ b/Code/Chapter 11/CarDelegate/Car.vb @@ -0,0 +1,79 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' Our delegate type. + Public Delegate Sub CarDelegateHandler(ByVal msg As String) + + ' Because delegates are simply classes, we can create + ' member variables. + Private almostDeadList As CarDelegateHandler + Private explodedList As CarDelegateHandler + +#Region "Registration / unregistration methods" + ' Now with type-safe multicasting! + Public Sub OnAboutToBlow(ByVal clientMethod As CarDelegateHandler) + almostDeadList = CType(System.Delegate.Combine(almostDeadList, _ + clientMethod), CarDelegateHandler) + End Sub + Public Sub OnExploded(ByVal clientMethod As CarDelegateHandler) + explodedList = CType(System.Delegate.Combine(explodedList, _ + clientMethod), CarDelegateHandler) + End Sub + + ' To remove a target from the list. + Public Sub RemoveAboutToBlow(ByVal clientMethod As CarDelegateHandler) + almostDeadList = CType(System.Delegate.Remove(almostDeadList, _ + clientMethod), CarDelegateHandler) + End Sub + + Public Sub RemoveExploded(ByVal clientMethod As CarDelegateHandler) + explodedList = CType(System.Delegate.Remove(explodedList, _ + clientMethod), CarDelegateHandler) + End Sub +#End Region + + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + If explodedList IsNot Nothing Then + explodedList("Sorry, this car is dead...") + End If + Else + currSpeed += delta + If 10 = maxSpeed - currSpeed AndAlso almostDeadList IsNot Nothing Then + almostDeadList("Careful buddy! Gonna blow!") + End If + If currSpeed >= maxSpeed Then + carIsDead = True + Else + Console.WriteLine("->CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 11/CarDelegate/CarDelegate.sln b/Code/Chapter 11/CarDelegate/CarDelegate.sln new file mode 100644 index 0000000..9f04a8c --- /dev/null +++ b/Code/Chapter 11/CarDelegate/CarDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarDelegate", "CarDelegate.vbproj", "{82805F75-D837-4E19-8DF4-36045950D9FB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {82805F75-D837-4E19-8DF4-36045950D9FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82805F75-D837-4E19-8DF4-36045950D9FB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82805F75-D837-4E19-8DF4-36045950D9FB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82805F75-D837-4E19-8DF4-36045950D9FB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/CarDelegate/CarDelegate.suo b/Code/Chapter 11/CarDelegate/CarDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..6604b55004f9059f4123174cd2c5b764b3465879 GIT binary patch literal 20992 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�QF-G_F~q9@eCb!g+GXcuF2Xn)8E+eT@04x?`h(K)masMwqY zyvW>PutdDXaxC%Cu8|bDWHen!Tr+m|Zf&VQ8)R>&HwK@R=U2G-4Q}4z<~O=|*v&iL zyw%Nba`QcIE^Ct!$C5r?{~Bpj9*v~-J_(GEj9;RMhBk?5l%I$1G6e5sLRhHN=$rK2 zhfszz?0|=pwiH@((im?C^g0|F8f5(NT9f6{!=yYA(&A6QBsrvf61^b<2aP{yoPY8AhcIDgbp`b4Fc@C%^x*OKD# zQM^L^uy{OGi#dYZD?Ftam|sCK0+10fN#rcc*u6?RgI7ml1R2+qqwU0bmfOs?p>qkMxsySItiqI$9kG<1z;A%vJuP^P-pA?Bh zN+jLA6Tf*%i8;;HFoSO&4Xi=66aAmG`7xfOwxzI8k2n6MaJTU@VWM;ojn~rno9h`r z$3msgfCQffd=Bt=z!v~t1bhkbWx!VePXWFP_!_|buBzi=zP>1+c5*Tz;nslElve6d z^&hvg-lK;u#sm~R9pAg`m8XlnuWBwpSX4=?9ewqUTi*T=4SEI4D%wItEGw_IjHzG@ z!~c5>fwDl$eLMCSKkNKmvG=d?SLL)+uJs7TE!s7|Eau5#MqDrPN6%dM&cBPtMD}B) zp2b@JcYc3cFY){L8&HUU`M^0>uRNbW0(jXiSPMUQHuVzy|MXWV+SDu0=XtA z)uKm-vHaeM*ysPTx2ISpOWZu--#Lo^s>9UfUv;$O4?GHg)iKc)4$6P+Xy~sx3iwLT z?mR2+ES_V&8!#lSCwcKN4772KVMG|&NDmDC`uvi70Z-HT$+%fYJW797ldMeqYgP>J zrbM|osLWU)`ngIIBTTEUP|6cjh-NGQ|BjW$q}Pty^gbOHeVl|XQpTrCx7mfp@6vNB zu$rGmp2ig9P}A61JTNFe*YZyO4L|Y`@5Px9~St z`|-J35AJl}9zW0Q14Q9s<=@nlg8%>k literal 0 HcmV?d00001 diff --git a/Code/Chapter 11/CarDelegate/CarDelegate.vbproj b/Code/Chapter 11/CarDelegate/CarDelegate.vbproj new file mode 100644 index 0000000..660aa0e --- /dev/null +++ b/Code/Chapter 11/CarDelegate/CarDelegate.vbproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {82805F75-D837-4E19-8DF4-36045950D9FB} + Exe + CarDelegate.Program + CarDelegate + CarDelegate + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CarDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/CarDelegate/My Project/Application.Designer.vb b/Code/Chapter 11/CarDelegate/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/CarDelegate/My Project/Application.myapp b/Code/Chapter 11/CarDelegate/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/CarDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 11/CarDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..8ceb0e2 --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/CarDelegate/My Project/Resources.Designer.vb b/Code/Chapter 11/CarDelegate/My Project/Resources.Designer.vb new file mode 100644 index 0000000..81a5ea4 --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarDelegate.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CarDelegate/My Project/Resources.resx b/Code/Chapter 11/CarDelegate/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/CarDelegate/My Project/Settings.Designer.vb b/Code/Chapter 11/CarDelegate/My Project/Settings.Designer.vb new file mode 100644 index 0000000..cebabcd --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarDelegate.My.MySettings + Get + Return Global.CarDelegate.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CarDelegate/My Project/Settings.settings b/Code/Chapter 11/CarDelegate/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/CarDelegate/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/CarDelegate/Program.vb b/Code/Chapter 11/CarDelegate/Program.vb new file mode 100644 index 0000000..64cf276 --- /dev/null +++ b/Code/Chapter 11/CarDelegate/Program.vb @@ -0,0 +1,40 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Delegates as event enablers *****") + Dim c1 As New Car("SlugBug", 10) + + ' Register multiple event handlers! + c1.OnAboutToBlow(AddressOf CarAboutToBlow) + c1.OnAboutToBlow(AddressOf CarIsAlmostDoomed) + c1.OnExploded(AddressOf CarExploded) + + Console.WriteLine("***** Speeding up *****") + For i As Integer = 0 To 5 + c1.Accelerate(20) + Next + + ' Remove CarExploded from list. + c1.RemoveExploded(AddressOf CarExploded) + + ' This will not fire the Exploded event. + For i As Integer = 0 To 5 + c1.Accelerate(20) + Next + Console.ReadLine() + End Sub + + Public Sub CarAboutToBlow(ByVal msg As String) + Console.WriteLine(msg) + End Sub + + Public Sub CarIsAlmostDoomed(ByVal msg As String) + Console.WriteLine("Critical Message from Car: {0} ", msg) + End Sub + + Public Sub CarExploded(ByVal msg As String) + Console.WriteLine(msg) + End Sub +End Module diff --git a/Code/Chapter 11/CarDelegate/Radio.vb b/Code/Chapter 11/CarDelegate/Radio.vb new file mode 100644 index 0000000..4423278 --- /dev/null +++ b/Code/Chapter 11/CarDelegate/Radio.vb @@ -0,0 +1,12 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 11/CarDelegate/UpgradeLog.XML b/Code/Chapter 11/CarDelegate/UpgradeLog.XML new file mode 100644 index 0000000..f59a70a --- /dev/null +++ b/Code/Chapter 11/CarDelegate/UpgradeLog.XML @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/CarEvent/Car.vb b/Code/Chapter 11/CarEvent/Car.vb new file mode 100644 index 0000000..f51d8e5 --- /dev/null +++ b/Code/Chapter 11/CarEvent/Car.vb @@ -0,0 +1,51 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + + ' This car can send these events. + Public Event Exploded(ByVal msg As String) + Public Event AboutToBlow(ByVal msg As String) + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + ' If the car is doomed, sent out the Exploded notification. + RaiseEvent Exploded("Sorry, this car is dead...") + Else + currSpeed += delta + ' Are we almost doomed? If so, send out AboutToBlow notification. + If 10 = maxSpeed - currSpeed Then + RaiseEvent AboutToBlow("Careful buddy! Gonna blow!") + End If + If currSpeed >= maxSpeed Then + carIsDead = True + Else + Console.WriteLine("->CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub +End Class diff --git a/Code/Chapter 11/CarEvent/CarEvent.sln b/Code/Chapter 11/CarEvent/CarEvent.sln new file mode 100644 index 0000000..3a578bc --- /dev/null +++ b/Code/Chapter 11/CarEvent/CarEvent.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarEvent", "CarEvent.vbproj", "{CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/CarEvent/CarEvent.suo b/Code/Chapter 11/CarEvent/CarEvent.suo new file mode 100644 index 0000000000000000000000000000000000000000..2bf83f51e74b43acf6c134f5ef912f6b413798dc GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 11/CarEvent/CarEvent.vbproj b/Code/Chapter 11/CarEvent/CarEvent.vbproj new file mode 100644 index 0000000..67d4484 --- /dev/null +++ b/Code/Chapter 11/CarEvent/CarEvent.vbproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {CE38E111-9BB0-42C3-8E5C-6EC4C8FC23C3} + Exe + CarEvent.Program + CarEvent + CarEvent + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CarEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/CarEvent/CarEvent.vbproj.user b/Code/Chapter 11/CarEvent/CarEvent.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 11/CarEvent/CarEvent.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 11/CarEvent/My Project/Application.Designer.vb b/Code/Chapter 11/CarEvent/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/CarEvent/My Project/Application.myapp b/Code/Chapter 11/CarEvent/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/CarEvent/My Project/AssemblyInfo.vb b/Code/Chapter 11/CarEvent/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..863c72c --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/CarEvent/My Project/Resources.Designer.vb b/Code/Chapter 11/CarEvent/My Project/Resources.Designer.vb new file mode 100644 index 0000000..3ef5bf5 --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarEvent.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CarEvent/My Project/Resources.resx b/Code/Chapter 11/CarEvent/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/CarEvent/My Project/Settings.Designer.vb b/Code/Chapter 11/CarEvent/My Project/Settings.Designer.vb new file mode 100644 index 0000000..09021ba --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarEvent.My.MySettings + Get + Return Global.CarEvent.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CarEvent/My Project/Settings.settings b/Code/Chapter 11/CarEvent/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/CarEvent/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/CarEvent/Program.vb b/Code/Chapter 11/CarEvent/Program.vb new file mode 100644 index 0000000..b91fd62 --- /dev/null +++ b/Code/Chapter 11/CarEvent/Program.vb @@ -0,0 +1,25 @@ +Option Explicit On +Option Strict On + +Module Program + ' Declare variables 'WithEvents' to + ' receive the outbound events. + Private WithEvents c As New Car("NightRider", 50) + + Sub Main() + Console.WriteLine("***** Fun with Events *****") + Console.WriteLine() + + Dim i As Integer + For i = 0 To 5 + c.Accelerate(10) + Next + Console.ReadLine() + End Sub + + ' Event Handlers. + Public Sub MyExplodedHandler(ByVal s As String) _ + Handles c.Exploded, c.AboutToBlow + Console.WriteLine(s) + End Sub +End Module \ No newline at end of file diff --git a/Code/Chapter 11/CarEvent/Radio.vb b/Code/Chapter 11/CarEvent/Radio.vb new file mode 100644 index 0000000..4423278 --- /dev/null +++ b/Code/Chapter 11/CarEvent/Radio.vb @@ -0,0 +1,12 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 11/CustomEvent/Car.vb b/Code/Chapter 11/CustomEvent/Car.vb new file mode 100644 index 0000000..ee701b8 --- /dev/null +++ b/Code/Chapter 11/CustomEvent/Car.vb @@ -0,0 +1,32 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' This ArrayList will hold onto the delegates + ' sent from the caller. + Private arConnections As New ArrayList() + + ' This event has been customized! + Public Custom Event EngineStart As System.EventHandler + AddHandler(ByVal value As EventHandler) + Console.WriteLine("Added connection") + arConnections.Add(value) + End AddHandler + + RemoveHandler(ByVal value As System.EventHandler) + Console.WriteLine("Removed connection") + arConnections.Remove(value) + End RemoveHandler + + RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs) + For Each h As EventHandler In arConnections + Console.WriteLine("Raising event") + h(sender, e) + Next + End RaiseEvent + End Event + + Public Sub Start() + RaiseEvent EngineStart(Me, New EventArgs()) + End Sub +End Class diff --git a/Code/Chapter 11/CustomEvent/CarEventArgs.vb b/Code/Chapter 11/CustomEvent/CarEventArgs.vb new file mode 100644 index 0000000..41f2c49 --- /dev/null +++ b/Code/Chapter 11/CustomEvent/CarEventArgs.vb @@ -0,0 +1,11 @@ +Option Explicit On +Option Strict On + +Public Class CarEventArgs + Inherits EventArgs + + Public ReadOnly msgData As String + Public Sub New(ByVal msg As String) + msgData = msg + End Sub +End Class diff --git a/Code/Chapter 11/CustomEvent/CustomEvent.sln b/Code/Chapter 11/CustomEvent/CustomEvent.sln new file mode 100644 index 0000000..bd26e0b --- /dev/null +++ b/Code/Chapter 11/CustomEvent/CustomEvent.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomEvent", "CustomEvent.vbproj", "{6FC77026-E19B-46A4-9C67-3D3D66163389}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6FC77026-E19B-46A4-9C67-3D3D66163389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FC77026-E19B-46A4-9C67-3D3D66163389}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FC77026-E19B-46A4-9C67-3D3D66163389}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FC77026-E19B-46A4-9C67-3D3D66163389}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/CustomEvent/CustomEvent.suo b/Code/Chapter 11/CustomEvent/CustomEvent.suo new file mode 100644 index 0000000000000000000000000000000000000000..a1de2b544153775d25935f3b07881b08fc5c251d GIT binary patch literal 22528 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {6FC77026-E19B-46A4-9C67-3D3D66163389} + Exe + CustomEvent.Program + CustomEvent + CustomEvent + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CustomEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEvent/CustomEvent.vbproj.user b/Code/Chapter 11/CustomEvent/CustomEvent.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 11/CustomEvent/CustomEvent.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEvent/My Project/Application.Designer.vb b/Code/Chapter 11/CustomEvent/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/CustomEvent/My Project/Application.myapp b/Code/Chapter 11/CustomEvent/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/CustomEvent/My Project/AssemblyInfo.vb b/Code/Chapter 11/CustomEvent/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..321d47d --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/CustomEvent/My Project/Resources.Designer.vb b/Code/Chapter 11/CustomEvent/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2aa02a8 --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomEvent.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CustomEvent/My Project/Resources.resx b/Code/Chapter 11/CustomEvent/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEvent/My Project/Settings.Designer.vb b/Code/Chapter 11/CustomEvent/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c299bb2 --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomEvent.My.MySettings + Get + Return Global.CustomEvent.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CustomEvent/My Project/Settings.settings b/Code/Chapter 11/CustomEvent/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/CustomEvent/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/CustomEvent/Program.vb b/Code/Chapter 11/CustomEvent/Program.vb new file mode 100644 index 0000000..21ec4ac --- /dev/null +++ b/Code/Chapter 11/CustomEvent/Program.vb @@ -0,0 +1,28 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Custom Events *****") + Console.WriteLine() + + Dim c As New Car() + + ' Dynamically hook into event. + AddHandler c.EngineStart, AddressOf EngineStartHandler + c.Start() + + ' Just to trigger our custom logic. + RemoveHandler c.EngineStart, AddressOf EngineStartHandler + + ' Just to test we are no longer sending event. + c.Start() + Console.ReadLine() + End Sub + + ' Our handler must match this signature given that + ' EngineStart has been prototyped using the System.EventHandler delegate. + Public Sub EngineStartHandler(ByVal sender As Object, ByVal e As EventArgs) + Console.WriteLine("Car has started") + End Sub +End Module \ No newline at end of file diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/Car.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/Car.vb new file mode 100644 index 0000000..d3fd51a --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/Car.vb @@ -0,0 +1,35 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' The custom delegate. + Public Delegate Sub CarDelegate(ByVal sender As Object, ByVal args As CarEventArgs) + + ' This ArrayList will hold onto the delegates + ' sent from the caller. + Private arConnections As New ArrayList() + + ' This event has been customized! + Public Custom Event EngineStart As CarDelegate + AddHandler(ByVal value As CarDelegate) + Console.WriteLine("Added connection") + arConnections.Add(value) + End AddHandler + + RemoveHandler(ByVal value As CarDelegate) + Console.WriteLine("Removed connection") + arConnections.Remove(value) + End RemoveHandler + + RaiseEvent(ByVal sender As Object, ByVal e As CarEventArgs) + For Each h As CarDelegate In arConnections + Console.WriteLine("Raising event") + h.Invoke(sender, e) + Next + End RaiseEvent + End Event + + Public Sub Start() + RaiseEvent EngineStart(Me, New CarEventArgs("Enjoy the ride")) + End Sub +End Class diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/CarEventArgs.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/CarEventArgs.vb new file mode 100644 index 0000000..41f2c49 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/CarEventArgs.vb @@ -0,0 +1,11 @@ +Option Explicit On +Option Strict On + +Public Class CarEventArgs + Inherits EventArgs + + Public ReadOnly msgData As String + Public Sub New(ByVal msg As String) + msgData = msg + End Sub +End Class diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.sln b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.sln new file mode 100644 index 0000000..3944fa1 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomEventWithCustomDelegate", "CustomEventWithCustomDelegate.vbproj", "{9154A997-3359-4893-9F01-8CE491F1F03C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9154A997-3359-4893-9F01-8CE491F1F03C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9154A997-3359-4893-9F01-8CE491F1F03C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9154A997-3359-4893-9F01-8CE491F1F03C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9154A997-3359-4893-9F01-8CE491F1F03C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.suo b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..78be5ca5ea8fd2bffab05cc077f8067d06fb3f5a GIT binary patch literal 24576 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 YJs0@*j^JP4D&^m$ZLD@T+xhqZ0D`d)Jpcdz literal 0 HcmV?d00001 diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj new file mode 100644 index 0000000..e29e3c5 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {9154A997-3359-4893-9F01-8CE491F1F03C} + Exe + CustomEventWithCustomDelegate.Program + CustomEventWithCustomDelegate + CustomEventWithCustomDelegate + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CustomEventWithCustomDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomEventWithCustomDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj.user b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/CustomEventWithCustomDelegate.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.Designer.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.myapp b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..31a9e2d --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.Designer.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.Designer.vb new file mode 100644 index 0000000..238492a --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomEventWithCustomDelegate.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.resx b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.Designer.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4cd93a9 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomEventWithCustomDelegate.My.MySettings + Get + Return Global.CustomEventWithCustomDelegate.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.settings b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/CustomEventWithCustomDelegate/Program.vb b/Code/Chapter 11/CustomEventWithCustomDelegate/Program.vb new file mode 100644 index 0000000..b7a75d6 --- /dev/null +++ b/Code/Chapter 11/CustomEventWithCustomDelegate/Program.vb @@ -0,0 +1,24 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Custom Events *****") + Dim c As New Car() + + ' Dynamically hook into event. + AddHandler c.EngineStart, AddressOf EngineStartHandler + c.Start() + + ' Just to trigger our custom logic. + RemoveHandler c.EngineStart, AddressOf EngineStartHandler + + ' Just to test we are no longer sending event. + c.Start() + Console.ReadLine() + End Sub + + Public Sub EngineStartHandler(ByVal sender As Object, ByVal e As CarEventArgs) + Console.WriteLine("Message from {0}: {1}", sender, e.msgData) + End Sub +End Module \ No newline at end of file diff --git a/Code/Chapter 11/DynamicCarEvents/Car.vb b/Code/Chapter 11/DynamicCarEvents/Car.vb new file mode 100644 index 0000000..f51d8e5 --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/Car.vb @@ -0,0 +1,51 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + + ' This car can send these events. + Public Event Exploded(ByVal msg As String) + Public Event AboutToBlow(ByVal msg As String) + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + ' If the car is doomed, sent out the Exploded notification. + RaiseEvent Exploded("Sorry, this car is dead...") + Else + currSpeed += delta + ' Are we almost doomed? If so, send out AboutToBlow notification. + If 10 = maxSpeed - currSpeed Then + RaiseEvent AboutToBlow("Careful buddy! Gonna blow!") + End If + If currSpeed >= maxSpeed Then + carIsDead = True + Else + Console.WriteLine("->CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub +End Class diff --git a/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.sln b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.sln new file mode 100644 index 0000000..95d88ad --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DynamicCarEvents", "DynamicCarEvents.vbproj", "{155754F2-73EA-4EB3-BEB6-6D6B8A4C6060}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {155754F2-73EA-4EB3-BEB6-6D6B8A4C6060}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {155754F2-73EA-4EB3-BEB6-6D6B8A4C6060}.Debug|Any CPU.Build.0 = Debug|Any CPU + {155754F2-73EA-4EB3-BEB6-6D6B8A4C6060}.Release|Any CPU.ActiveCfg = Release|Any CPU + {155754F2-73EA-4EB3-BEB6-6D6B8A4C6060}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.suo b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.suo new file mode 100644 index 0000000000000000000000000000000000000000..aa943a204aed2ed5e2c00a3eab17ad53a2004201 GIT binary patch literal 23040 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj new file mode 100644 index 0000000..348ea0f --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {155754F2-73EA-4EB3-BEB6-6D6B8A4C6060} + Exe + DynamicCarEvents.Program + DynamicCarEvents + DynamicCarEvents + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + DynamicCarEvents.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DynamicCarEvents.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj.user b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/DynamicCarEvents.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Application.Designer.vb b/Code/Chapter 11/DynamicCarEvents/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Application.myapp b/Code/Chapter 11/DynamicCarEvents/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/AssemblyInfo.vb b/Code/Chapter 11/DynamicCarEvents/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..cc9649e --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Resources.Designer.vb b/Code/Chapter 11/DynamicCarEvents/My Project/Resources.Designer.vb new file mode 100644 index 0000000..02d4cfd --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.26 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DynamicCarEvents.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Resources.resx b/Code/Chapter 11/DynamicCarEvents/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Settings.Designer.vb b/Code/Chapter 11/DynamicCarEvents/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b03127b --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.DynamicCarEvents.My.MySettings + Get + Return Global.DynamicCarEvents.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/DynamicCarEvents/My Project/Settings.settings b/Code/Chapter 11/DynamicCarEvents/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/DynamicCarEvents/Program.vb b/Code/Chapter 11/DynamicCarEvents/Program.vb new file mode 100644 index 0000000..d0a213d --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/Program.vb @@ -0,0 +1,25 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with AddHandler/RemoveHandler *****") + ' Note lack of WithEvents keyword. + Dim c As New Car("NightRider", 50) + + ' Dynamically hook into event using AddHandler. + AddHandler c.Exploded, AddressOf CarEventHandler + AddHandler c.AboutToBlow, AddressOf CarEventHandler + + For i As Integer = 0 To 5 + c.Accelerate(10) + Next + Console.ReadLine() + End Sub + + ' Event Handler for both events + '(note lack of Handles keyword). + Public Sub CarEventHandler(ByVal s As String) + Console.WriteLine(s) + End Sub +End Module diff --git a/Code/Chapter 11/DynamicCarEvents/Radio.vb b/Code/Chapter 11/DynamicCarEvents/Radio.vb new file mode 100644 index 0000000..4423278 --- /dev/null +++ b/Code/Chapter 11/DynamicCarEvents/Radio.vb @@ -0,0 +1,12 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/DelegateNoArgs.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/DelegateNoArgs.vb new file mode 100644 index 0000000..2e0a2ac --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/DelegateNoArgs.vb @@ -0,0 +1,18 @@ +' VB +Option Strict On + +Public Delegate Function GetTime() As String + +Module Test + Sub LambdaNoArgs() + Console.WriteLine("***** Lambdas with No Params! *****" + vbLf) + + ' Register w/ delegate as a lambda expression. + Dim t As New GetTime(Function() DateTime.Now.ToString()) + + ' This will execute the lambda expression. + Console.WriteLine(t) + + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.sln b/Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.sln new file mode 100644 index 0000000..d6b1300 --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LambdaExpressionsMultipleParams", "LambdaExpressionsMultipleParams.vbproj", "{DB047EE7-322B-450B-9B0D-986F3B923320}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DB047EE7-322B-450B-9B0D-986F3B923320}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB047EE7-322B-450B-9B0D-986F3B923320}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB047EE7-322B-450B-9B0D-986F3B923320}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB047EE7-322B-450B-9B0D-986F3B923320}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.suo b/Code/Chapter 11/LambdaExpressionsMultipleParams/LambdaExpressionsMultipleParams.suo new file mode 100644 index 0000000000000000000000000000000000000000..679138a1e9937e34d0b50944804df577d52fdbbc GIT binary patch literal 25600 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DB047EE7-322B-450B-9B0D-986F3B923320} + Exe + LambdaExpressionsMultipleParams.Program + LambdaExpressionsMultipleParams + LambdaExpressionsMultipleParams + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LambdaExpressionsMultipleParams.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LambdaExpressionsMultipleParams.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.Designer.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.myapp b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/AssemblyInfo.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..80220f9 --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.Designer.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4afc99a --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LambdaExpressionsMultipleParams.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.resx b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.Designer.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.Designer.vb new file mode 100644 index 0000000..fe15ae7 --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LambdaExpressionsMultipleParams.My.MySettings + Get + Return Global.LambdaExpressionsMultipleParams.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.settings b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/LambdaExpressionsMultipleParams/Program.vb b/Code/Chapter 11/LambdaExpressionsMultipleParams/Program.vb new file mode 100644 index 0000000..2bf5d5c --- /dev/null +++ b/Code/Chapter 11/LambdaExpressionsMultipleParams/Program.vb @@ -0,0 +1,40 @@ +' VB +Option Strict On + +Public Delegate Function BinaryOp(ByVal x As Integer, ByVal y As Integer) As Integer + +#Region "Simple Math" +Public Class SimpleMath + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Public Function Subtract(ByVal x As Integer, _ + ByVal y As Integer) As Integer + Return x - y + End Function +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Lambdas with Multiple Params! *****") + + ' Register w/ delegate as a lambda expression. + Dim b As New BinaryOp(Function(x, y) x + y) + + ' What method is b pointing to? + DisplayDelegateInfo(b) + + Console.WriteLine(b(10, 10)) + Console.ReadLine() + End Sub + + Sub DisplayDelegateInfo(ByVal delObj As System.Delegate) + For Each d As System.Delegate In delObj.GetInvocationList() + Console.WriteLine("Method Name: {0}", d.Method) + Console.WriteLine("Type Name: {0}", d.Target) + Next + End Sub +End Module + + diff --git a/Code/Chapter 11/PrimAndProperEvent/Car.vb b/Code/Chapter 11/PrimAndProperEvent/Car.vb new file mode 100644 index 0000000..c7585d7 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/Car.vb @@ -0,0 +1,51 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + + ' This car can send these events. + Public Event Exploded(ByVal sender As Object, ByVal e As CarEventArgs) + Public Event AboutToBlow(ByVal sender As Object, ByVal e As CarEventArgs) + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + ' If the car is doomed, sent out the Exploded notification. + RaiseEvent Exploded(Me, New CarEventArgs("This car is doomed...")) + Else + currSpeed += delta + ' Are we almost doomed? If so, send out AboutToBlow notification. + If 10 = maxSpeed - currSpeed Then + RaiseEvent AboutToBlow(Me, New CarEventArgs("Slow down!")) + End If + If currSpeed >= maxSpeed Then + carIsDead = True + Else + Console.WriteLine("->CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub +End Class diff --git a/Code/Chapter 11/PrimAndProperEvent/CarEventArgs.vb b/Code/Chapter 11/PrimAndProperEvent/CarEventArgs.vb new file mode 100644 index 0000000..41f2c49 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/CarEventArgs.vb @@ -0,0 +1,11 @@ +Option Explicit On +Option Strict On + +Public Class CarEventArgs + Inherits EventArgs + + Public ReadOnly msgData As String + Public Sub New(ByVal msg As String) + msgData = msg + End Sub +End Class diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Application.Designer.vb b/Code/Chapter 11/PrimAndProperEvent/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Application.myapp b/Code/Chapter 11/PrimAndProperEvent/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/AssemblyInfo.vb b/Code/Chapter 11/PrimAndProperEvent/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..36458b7 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.Designer.vb b/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.Designer.vb new file mode 100644 index 0000000..625dc2f --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("PrimAndProperEvent.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.resx b/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.Designer.vb b/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.Designer.vb new file mode 100644 index 0000000..31462a0 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.PrimAndProperEvent.My.MySettings + Get + Return Global.PrimAndProperEvent.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.settings b/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.sln b/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.sln new file mode 100644 index 0000000..7672cf8 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PrimAndProperEvent", "PrimAndProperEvent.vbproj", "{CA29623D-C199-4347-B973-D675B8A92867}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CA29623D-C199-4347-B973-D675B8A92867}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA29623D-C199-4347-B973-D675B8A92867}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA29623D-C199-4347-B973-D675B8A92867}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA29623D-C199-4347-B973-D675B8A92867}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.suo b/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.suo new file mode 100644 index 0000000000000000000000000000000000000000..d4e42093e0a4e59a47062de1547e049ecc3b0704 GIT binary patch literal 22016 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 gcDH9G?IKEjG4 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {CA29623D-C199-4347-B973-D675B8A92867} + Exe + PrimAndProperEvent.Program + PrimAndProperEvent + PrimAndProperEvent + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + PrimAndProperEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + PrimAndProperEvent.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.vbproj.user b/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/PrimAndProperEvent.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 11/PrimAndProperEvent/Program.vb b/Code/Chapter 11/PrimAndProperEvent/Program.vb new file mode 100644 index 0000000..80605da --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/Program.vb @@ -0,0 +1,32 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Prim and Proper Events *****") + Dim c As New Car("NightRider", 50) + + ' Dynamically hook into event using AddressOf. + AddHandler c.Exploded, AddressOf ExplodedHandler + AddHandler c.AboutToBlow, AddressOf AboutToBlowHandler + + For i As Integer = 0 To 5 + c.Accelerate(10) + Next + Console.ReadLine() + End Sub + + ' Event Handler for both events + '(note lack of Handles keyword). + Public Sub AboutToBlowHandler(ByVal sender As Object, ByVal e As CarEventArgs) + Console.WriteLine("{0} says: {1}", sender, e.msgData) + End Sub + + Public Sub ExplodedHandler(ByVal sender As Object, ByVal e As CarEventArgs) + If TypeOf sender Is Car Then + Dim c As Car = CType(sender, Car) + c.CrankTunes(False) + End If + Console.WriteLine("Critical message from {0}: {1}", sender, e.msgData) + End Sub +End Module \ No newline at end of file diff --git a/Code/Chapter 11/PrimAndProperEvent/Radio.vb b/Code/Chapter 11/PrimAndProperEvent/Radio.vb new file mode 100644 index 0000000..4423278 --- /dev/null +++ b/Code/Chapter 11/PrimAndProperEvent/Radio.vb @@ -0,0 +1,12 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Application.Designer.vb b/Code/Chapter 11/SimpleDelegate/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Application.myapp b/Code/Chapter 11/SimpleDelegate/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/SimpleDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 11/SimpleDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..90f0555 --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Resources.Designer.vb b/Code/Chapter 11/SimpleDelegate/My Project/Resources.Designer.vb new file mode 100644 index 0000000..79ad88d --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleDelegate.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Resources.resx b/Code/Chapter 11/SimpleDelegate/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Settings.Designer.vb b/Code/Chapter 11/SimpleDelegate/My Project/Settings.Designer.vb new file mode 100644 index 0000000..92dd7e4 --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleDelegate.My.MySettings + Get + Return Global.SimpleDelegate.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/SimpleDelegate/My Project/Settings.settings b/Code/Chapter 11/SimpleDelegate/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/SimpleDelegate/Program.vb b/Code/Chapter 11/SimpleDelegate/Program.vb new file mode 100644 index 0000000..b378105 --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/Program.vb @@ -0,0 +1,49 @@ +Option Explicit On +Option Strict On + +' Our delegate type can point to any method +' taking two integers and returning an integer. +Public Delegate Function BinaryOp(ByVal x As Integer, ByVal y As Integer) As Integer + +#Region "SimpleMath type" +' This class defines the methods which will be 'pointed to' by the delegate. +Public Class SimpleMath + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer + Return x - y + End Function + Public Function SquareNumber(ByVal a As Integer) As Integer + Return a * a + End Function +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Simple Delegate Example *****" & vbLf) + + Dim myMath As New SimpleMath() + + ' Make a delegate object and add a method to the invocation + ' list using the AddressOf keyword. + Dim b As BinaryOp = New BinaryOp(AddressOf myMath.Add) + + ' Invoke the method 'pointed to' + Console.WriteLine("10 + 10 is {0} ", b.Invoke(10, 10)) + DisplayDelegateInfo(b) + + ' This is a compiler error! + ' Dim b2 As BinaryOp = New BinaryOp(AddressOf myMath.SquareNumber) + + Console.ReadLine() + End Sub + + Sub DisplayDelegateInfo(ByVal delObj As System.Delegate) + For Each d As System.Delegate In delObj.GetInvocationList() + Console.WriteLine("Method Name: {0} ", d.Method) + Console.WriteLine("Type Name: {0} ", d.Target) + Next + End Sub +End Module diff --git a/Code/Chapter 11/SimpleDelegate/SimpleDelegate.sln b/Code/Chapter 11/SimpleDelegate/SimpleDelegate.sln new file mode 100644 index 0000000..ecc5e57 --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/SimpleDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleDelegate", "SimpleDelegate.vbproj", "{D2A09CCA-789A-4F2D-95A7-A823A64E6BD3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D2A09CCA-789A-4F2D-95A7-A823A64E6BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2A09CCA-789A-4F2D-95A7-A823A64E6BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2A09CCA-789A-4F2D-95A7-A823A64E6BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2A09CCA-789A-4F2D-95A7-A823A64E6BD3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/SimpleDelegate/SimpleDelegate.suo b/Code/Chapter 11/SimpleDelegate/SimpleDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..54f786e3b3ee12661bf80b135f4038c18359bd1c GIT binary patch literal 17920 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D2A09CCA-789A-4F2D-95A7-A823A64E6BD3} + Exe + SimpleDelegate.Program + SimpleDelegate + SimpleDelegate + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + SimpleDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 11/SimpleDelegate/SimpleDelegate.vbproj.user b/Code/Chapter 11/SimpleDelegate/SimpleDelegate.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 11/SimpleDelegate/SimpleDelegate.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.Designer.vb b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.myapp b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/AssemblyInfo.vb b/Code/Chapter 11/SimpleLambdaExpressions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..e378f3d --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.Designer.vb b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..472ed05 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleLambdaExpressions.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.resx b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.Designer.vb b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..332b987 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleLambdaExpressions.My.MySettings + Get + Return Global.SimpleLambdaExpressions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.settings b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 11/SimpleLambdaExpressions/Program.vb b/Code/Chapter 11/SimpleLambdaExpressions/Program.vb new file mode 100644 index 0000000..e522821 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/Program.vb @@ -0,0 +1,52 @@ +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Lambdas *****") + TraditionalDelegateSyntax() + LambdaExpressionSyntax() + Console.ReadLine() + End Sub + +#Region "Traditional delegate syntax" + Sub TraditionalDelegateSyntax() + Dim list As New List(Of Integer)() + list.AddRange(New Integer() {20, 1, 4, 8, 9, 44}) + + ' Create a Predicate(Of T) object for use by the List(Of T).FindAll() method. + Dim callback As New Predicate(Of Integer)(AddressOf IsEvenNumber) + + ' Call FindAll() passing the delegate object. + Dim evenNumbers As List(Of Integer) = list.FindAll(callback) + + ' Print out the result set. + Console.WriteLine("Here are the even numbers:") + For Each evenNumber As Integer In evenNumbers + Console.WriteLine(evenNumber) + Next + End Sub + + ' Target for the Predicate(Of T) delegate. + Function IsEvenNumber(ByVal i As Integer) As Boolean + ' Is it an even number? + Return (i Mod 2) = 0 + End Function +#End Region + +#Region "Lambda expression syntax" + Sub LambdaExpressionSyntax() + Dim list As New List(Of Integer)() + list.AddRange(New Integer() {20, 1, 4, 8, 9, 44}) + + ' Call FindAll() using a VB lambda. + Dim evenNumbers As List(Of Integer) = list.FindAll(Function(i As Integer) (i Mod 2) = 0) + + ' Print out the result set. + Console.WriteLine("Here are the even numbers:") + For Each evenNumber As Integer In evenNumbers + Console.WriteLine(evenNumber) + Next + End Sub +#End Region + +End Module diff --git a/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.sln b/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.sln new file mode 100644 index 0000000..0013175 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleLambdaExpressions", "SimpleLambdaExpressions.vbproj", "{8FDD0491-247A-41D7-A899-55B0B7518A4A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FDD0491-247A-41D7-A899-55B0B7518A4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FDD0491-247A-41D7-A899-55B0B7518A4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FDD0491-247A-41D7-A899-55B0B7518A4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FDD0491-247A-41D7-A899-55B0B7518A4A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.suo b/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.suo new file mode 100644 index 0000000000000000000000000000000000000000..c8fd8c24c5be2920f2858ed3a26c61d71bbc2450 GIT binary patch literal 21504 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⁢nN(!*J#eaU7IK8hUWlZb&SZ^!DxT f5C3NnMa^xret?>|^xks)3FV^Tzg(%m=KcCV6&lo9 literal 0 HcmV?d00001 diff --git a/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.vbproj b/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.vbproj new file mode 100644 index 0000000..fc430a7 --- /dev/null +++ b/Code/Chapter 11/SimpleLambdaExpressions/SimpleLambdaExpressions.vbproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {8FDD0491-247A-41D7-A899-55B0B7518A4A} + Exe + SimpleLambdaExpressions.Program + SimpleLambdaExpressions + SimpleLambdaExpressions + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + SimpleLambdaExpressions.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleLambdaExpressions.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/Casting/Casting.sln b/Code/Chapter 12/Casting/Casting.sln new file mode 100644 index 0000000..478ea57 --- /dev/null +++ b/Code/Chapter 12/Casting/Casting.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Casting", "Casting.vbproj", "{D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/Casting/Casting.suo b/Code/Chapter 12/Casting/Casting.suo new file mode 100644 index 0000000000000000000000000000000000000000..58a049b13722f59ab5b305146f4264017da489ca GIT binary patch literal 15872 zcmeHOUu+yl8J|l+>a;*;(*_7>*t%&*8~gB`?buG5roOfFr?C^)=h#tmQF^{x+h?zD z-Mw>&NkD?~fDpV;Q6eNNDiu++2oVV(sCa-rpz=@Y3#!zo@PaBplnRMHHRku5+41iE zzl)vZQgy6vXK!|PzHh$y=KDA6H?Q1%^~KBE{w9jbV`9Cyw!BGf477)EPmtwPLaf6L ze_vZ(URI4l;P#_(8*$(R(7M4}L$3A504;z!0Gj}J0qz8R9PkOiCjnS`u^I3=z&5}= zfGvP~0rvs60zM7+4B)c>$_HUP?(g@0-$pF@P?I_;9Q@^lAqGVjwJVmeLiLxekQmJ% z%0jjB^Y1>Ck# zMVE-7?!dKAwBs7ZeFyF$_#438*%d0sK<%Q)fls>Z6YE06%Y9KV{-C~W41XM$lK@Mj z7sStfN?lwp{=3ol8@!#H1~36^A4Gi!a2Rj|a1`(a;22;Cz&^)Op8$*io&<~n*nT^f z?(EWwm+imDesifOy8VBzK82|?RQ_X9LWKDC)IWxQ@aJd$yJJuPJ5v;hI?L66{^_mY zyVMOgvxI<*d*`{3xi2x`q!#C`Y(8fsvuPu4<@1^BbS{z1yN+e&tZZU<$yn*bA2G+7 z%O%ERM)>&Pn0zTeW2qk_b}~QZxbqk$GV)8;Ka|Hkl&=4m9FAvsNmf z7`1ZFqMNdEVb{t@O}O#V?4oTyrg(A&LGoWW z!FNLcP?b|hQ2uLlmyby^eGC?@|1FV%UK;@J94MKFH6RtWivj%9Ez~*n;^%sM>Q9UV z-?|TcBYMJaE7R`Xtrp*bV%g5A70ZKvlC)_MZ2870;jk2iLvc71#y*oDcovdhxTb zmj7b>hvb~okU|Hm;?|Tw;Fs%9|GZxO?7NYh0EJ@kEr1D&pAf_F{tVbd`h;`fdjk6- zhL$AOA&ojO<-&jkJ`PW93@wyg8}0PnT*$HkOYF+NgSaLzu7lc=cQfcqzH(<9u-sAE zO8rA=&q4wdBngGmSBS;NyFo16r74W9_faXXv(kSv3MeRtOJU?VS%Bh$(n`~yGb!i9 zRk4AQ92v%a3QrvTaxicD&f{pyVZF!;18bMZeHv{Je)Zy=ag3XgZ{<&hCE91}!>>%nLM|=r;rhI9G{@ad6j73O8`Cf&swAW)^6ZO5) zNLjgi{heOunNW|>7FqJ@Q-kqT2TdJLegA9sDYnzF4IR^<>Nf+tbD(>eBn?nFvLRi{7bwU%&SHj-i)+nEu)Kcf8xz*!xc! z^xsm_dz+V%K%K3GkB$Wgq(mhpy~UR>^bd6acUZmpmw938 zY!>>tw8&b=DLp%d)tN>s{V)AQ^)J3c|2M3EspJ0T8SN9`&@40)@dxd1CGXvW=Ag%_y?5%9Qtv$_ zY3B-Q?>*#^OYhy6vSRO@x{G6HrT>0sNO|4GvX~3VF8%$ylm%j-B z@k{AA`blYI<3}>pVw__7NsXePQBk=_r*`yF7-NK?jV8f6isjAZhqicZc!{t4ngA$6ZEcaYjeKIaF}S}O+z{x^*O5%A=X zp8oS~g^KiV-F_Gb-_zg*y_*QMhuRO+Coe!JHb-`%bkFXDm!)_(4;gl4)`a;0`X`(P zuPl`^E2pl|BViux`t(mT^M?9t>kD6fo6#ooD}g<#)HNKIwBcvWleWs3ce=rJd2%6d zxkey(slZm6ycOdDzR&Kx3m7BqN;$)W`;t|Q$9ri7GuUSt9%K2m&!F++za z3ZeCn5ZmEOFudtR8%3iZU?RYY$S9qRp`f#D;LUrX_);!!&4*3Lws9_yak9DaVJmC7 znN)ZnBO8+L($mq?tF;xy((7vWYOmg`urgdKZDE0 z2!>u^Ee(7<`fo4r>ilap{Tr1OR=*(s9il%=8LD^wjKW&I^{$4$vpQ<|6!=&6RlWFo z@a8YQv14X=`8^zqn{o7M7R_ryKjv2aKeheTmYfx@xmWGkxi>YNm7`DQ?2CC|!Dq7sk8GP|l^hvOB?9x{2|(e>orn6g<@tFtQ_b`JW~NW; z+(Pa$3tHF`F3N24`vw!-KMp_lD86zyfUhrnscXeI7R#diS1Ml+TJU z6KGItqB9ef;=q2;#oPvC#3bUvQP4%Rt>e_vGaR1L_-8n@g8Bp}0W(cMjy>W<@rlAi z?>!}PsWaQK{Oy3+$5)c@GO$Any*=Y4Tu?T9^#fkr>eUZ=b%$4XdG$`Oe#onLd9@l% z2!14>_!G<`mp`-8etrV$qfWV)d!Xf=!%WY?Q3=CNCuAHng}JE=Zy0^Z!%nz2^mnuP zHHG!2WXVo|OOKR|m?va6ZfoHurogNnqtUHIrs5 zji)B19G$%l_|BXi&#ES&@s?J;U-V@s-Sl%{7Au%jtF#ja28WJvH~5lMxNZh?h<`rL z9Y&qNJQB}ad6M4`UisY0psl=Cs-=zM;52m&`5wm3RM{$?0onMY?I4g=em}TYx-csB zKlNb;&aI+=1S~<267>~NIXVVzDjnSQDvQU{TXmvXj;gh^6t%gd?Ql6t_+N9(grMMXhXT>w} zX(?{XJY`+wNA)*i#LW}j!daB>8-`~`$>0vvR4_vmd{=X(*>`*?_q0yXek3__Yo)!E zMlD@I8ksD${v{P=}C5{y7xx< zI=ifn-o7(!dhlQt|41@7lTS|C*4pAa!vypl9?dPLGry2@Ew_c(;+Zd7$WOO?x7wkC zcepV4%wp2ctH47vT~YCQW%5 zs?*&U;X3j-6sKpxK)Zj0Tl;gLwf)>fQKUbb_0PmE$kQ(#eRg9eJqVlHWnJ%?82=fs Y10PxS;R7rDi&wOh-->-yZUhJZ4@nAGwg3PC literal 0 HcmV?d00001 diff --git a/Code/Chapter 12/Casting/Casting.vbproj b/Code/Chapter 12/Casting/Casting.vbproj new file mode 100644 index 0000000..8562a03 --- /dev/null +++ b/Code/Chapter 12/Casting/Casting.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D7CBEBE0-668C-4DEA-9ACC-83F31E2B41E8} + Exe + Casting.Program + Casting + Casting + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Casting.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Casting.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/Casting/Casting.vbproj.user b/Code/Chapter 12/Casting/Casting.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 12/Casting/Casting.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 12/Casting/My Project/Application.Designer.vb b/Code/Chapter 12/Casting/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/Casting/My Project/Application.myapp b/Code/Chapter 12/Casting/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/Casting/My Project/AssemblyInfo.vb b/Code/Chapter 12/Casting/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b1d4355 --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/Casting/My Project/Resources.Designer.vb b/Code/Chapter 12/Casting/My Project/Resources.Designer.vb new file mode 100644 index 0000000..08d0526 --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Casting.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/Casting/My Project/Resources.resx b/Code/Chapter 12/Casting/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/Casting/My Project/Settings.Designer.vb b/Code/Chapter 12/Casting/My Project/Settings.Designer.vb new file mode 100644 index 0000000..84bfc10 --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Casting.My.MySettings + Get + Return Global.Casting.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/Casting/My Project/Settings.settings b/Code/Chapter 12/Casting/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/Casting/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/Casting/Program.vb b/Code/Chapter 12/Casting/Program.vb new file mode 100644 index 0000000..0ec930a --- /dev/null +++ b/Code/Chapter 12/Casting/Program.vb @@ -0,0 +1,63 @@ +Option Explicit On +Option Strict On + +#Region "Helper types for testing" +Interface ITurboBoost + Sub TurboCharge(ByVal onOff As Boolean) +End Interface + +Class Car +End Class + +Class SportsCar + Inherits Car + Implements ITurboBoost + Public Sub TurboCharge(ByVal onOff As Boolean) _ + Implements ITurboBoost.TurboCharge + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Fun with CType / DirectCast / TryCast ******" & vbLf) + + Dim myCar As New Car + Dim iTB As ITurboBoost + + ' CType()throws + ' exceptions if the types are not compatible. + Try + iTB = CType(myCar, ITurboBoost) + Catch ex As InvalidCastException + Console.WriteLine(ex.Message) + Console.WriteLine() + End Try + + + ' CType() can also be used to narrow or widen + ' between primitive types. + Dim i As Integer = 200 + Dim b As Byte = CType(i, Byte) + + ' Like CType(), DirectCast() throws + ' exceptions if the types are not compatible. + Dim myViper As New SportsCar + Try + iTB = DirectCast(myViper, ITurboBoost) + Catch ex As Exception + Console.WriteLine(ex.Message) + Console.WriteLine() + End Try + + ' TryCast() returns Nothing if the types are not + ' compatible. + Dim c As Car = TryCast(myViper, Car) + If c Is Nothing Then + Console.WriteLine("Sorry, types are not compatable...") + Else + Console.WriteLine(c.ToString()) + End If + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 12/CustomConversions/CustomConversions.sln b/Code/Chapter 12/CustomConversions/CustomConversions.sln new file mode 100644 index 0000000..a93bdf6 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/CustomConversions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomConversions", "CustomConversions.vbproj", "{CFD8B745-3CEE-48C5-BE3D-93EB8930728E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CFD8B745-3CEE-48C5-BE3D-93EB8930728E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFD8B745-3CEE-48C5-BE3D-93EB8930728E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFD8B745-3CEE-48C5-BE3D-93EB8930728E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFD8B745-3CEE-48C5-BE3D-93EB8930728E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/CustomConversions/CustomConversions.suo b/Code/Chapter 12/CustomConversions/CustomConversions.suo new file mode 100644 index 0000000000000000000000000000000000000000..be95ccf28f12c3d2b713df352dc0749c3dd52e1a GIT binary patch literal 17920 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {CFD8B745-3CEE-48C5-BE3D-93EB8930728E} + Exe + CustomConversions.Program + CustomConversions + CustomConversions + Console + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + v3.5 + + + true + full + true + true + bin\Debug\ + CustomConversions.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + pdbonly + false + true + true + bin\Release\ + CustomConversions.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/CustomConversions/CustomConversions.vbproj.user b/Code/Chapter 12/CustomConversions/CustomConversions.vbproj.user new file mode 100644 index 0000000..71ff977 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/CustomConversions.vbproj.user @@ -0,0 +1,16 @@ + + + http://localhost/CustomConversions/ + + + + + + + + + en-US + true + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 12/CustomConversions/My Project/Application.Designer.vb b/Code/Chapter 12/CustomConversions/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/CustomConversions/My Project/Application.myapp b/Code/Chapter 12/CustomConversions/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/CustomConversions/My Project/AssemblyInfo.vb b/Code/Chapter 12/CustomConversions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..68f75d5 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/CustomConversions/My Project/Resources.Designer.vb b/Code/Chapter 12/CustomConversions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8720fa0 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomConversions.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/CustomConversions/My Project/Resources.resx b/Code/Chapter 12/CustomConversions/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/CustomConversions/My Project/Settings.Designer.vb b/Code/Chapter 12/CustomConversions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..e40f0e6 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomConversions.My.MySettings + Get + Return Global.CustomConversions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/CustomConversions/My Project/Settings.settings b/Code/Chapter 12/CustomConversions/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/CustomConversions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/CustomConversions/MyTypes.vb b/Code/Chapter 12/CustomConversions/MyTypes.vb new file mode 100644 index 0000000..0ff49ae --- /dev/null +++ b/Code/Chapter 12/CustomConversions/MyTypes.vb @@ -0,0 +1,62 @@ +Option Explicit On +Option Strict On + +#Region "The Rectangle" +Public Structure Rectangle + ' Public for ease of use; + ' however, feel free to encapsulate with properties. + Public Width As Integer, Height As Integer + Public Sub Draw() + Console.WriteLine("Drawing a rect.") + End Sub + Public Overloads Overrides Function ToString() As String + Return String.Format("[Width = {0}; Height = {1}]", Width, Height) + End Function + + Public Shared Widening Operator CType(ByVal s As Square) As Rectangle + Dim r As Rectangle + r.Height = s.Length + + ' Assume the length of the new Rectangle with + ' (Length x 2) + r.Width = s.Length * 2 + Return r + End Operator +End Structure +#End Region + +#Region "The Square" +Public Structure Square + Public Length As Integer + Public Sub Draw() + Console.WriteLine("Drawing a square.") + End Sub + Public Overloads Overrides Function ToString() As String + Return String.Format("[Length = {0}]", Length) + End Function + + ' Rectangles can be explicitly converted + ' into Squares. + Public Shared Narrowing Operator CType(ByVal r As Rectangle) As Square + Dim s As Square + s.Length = r.Width + Return s + End Operator + + ' Can call as: + ' Dim sq2 As Square = CType(90, Square) + ' or as: + ' Dim sq2 As Square = 90 + Public Shared Widening Operator CType(ByVal sideLength As Integer) As Square + Dim newSq As Square + newSq.Length = sideLength + Return newSq + End Operator + + ' Must call as: + ' Dim side As Integer = CType(mySquare, Square) + Public Shared Narrowing Operator CType(ByVal s As Square) As Integer + Return s.Length + End Operator +End Structure +#End Region diff --git a/Code/Chapter 12/CustomConversions/Program.vb b/Code/Chapter 12/CustomConversions/Program.vb new file mode 100644 index 0000000..c0bdb03 --- /dev/null +++ b/Code/Chapter 12/CustomConversions/Program.vb @@ -0,0 +1,40 @@ +Option Explicit On +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Custom Conversions *****") + Console.WriteLine() + + ' Create a 5 * 10 Rectangle. + Dim rect As Rectangle + rect.Width = 10 + rect.Height = 5 + Console.WriteLine("rect = {0} ", rect) + + DrawSquare(CType(rect, Square)) + + ' Convert Rectangle to a 10 * 10 Square. + Dim sq As Square = CType(rect, Square) + Console.WriteLine("sq = {0} ", sq) + + ' Implicit cast OK! + Dim s3 As Square + s3.Length = 83 + Dim rect2 As Rectangle = s3 + Console.WriteLine("rect2 = {0}", rect2) + DrawSquare(s3) + + ' Explicit cast syntax still OK! + Dim s4 As Square + s4.Length = 3 + Dim rect3 As Rectangle = CType(s4, Rectangle) + Console.WriteLine("rect3 = {0}", rect3) + Console.ReadLine() + End Sub + + ' This method requires a Square type. + Sub DrawSquare(ByVal sq As Square) + sq.Draw() + End Sub +End Module diff --git a/Code/Chapter 12/OverloadedOps/My Project/Application.Designer.vb b/Code/Chapter 12/OverloadedOps/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/OverloadedOps/My Project/Application.myapp b/Code/Chapter 12/OverloadedOps/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/OverloadedOps/My Project/AssemblyInfo.vb b/Code/Chapter 12/OverloadedOps/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a03ccc6 --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/OverloadedOps/My Project/Resources.Designer.vb b/Code/Chapter 12/OverloadedOps/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4d7e8ff --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("OverloadedOps.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/OverloadedOps/My Project/Resources.resx b/Code/Chapter 12/OverloadedOps/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/OverloadedOps/My Project/Settings.Designer.vb b/Code/Chapter 12/OverloadedOps/My Project/Settings.Designer.vb new file mode 100644 index 0000000..31f47da --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.OverloadedOps.My.MySettings + Get + Return Global.OverloadedOps.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/OverloadedOps/My Project/Settings.settings b/Code/Chapter 12/OverloadedOps/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/OverloadedOps/MyPoint.vb b/Code/Chapter 12/OverloadedOps/MyPoint.vb new file mode 100644 index 0000000..6658632 --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/MyPoint.vb @@ -0,0 +1,96 @@ +Public Structure MyPoint + Implements IComparable + Private x As Integer, y As Integer + + Public Sub New(ByVal xPos As Integer, ByVal yPos As Integer) + x = xPos + y = yPos + End Sub + + Public Overrides Function ToString() As String + Return String.Format("[{0}, {1}]", Me.x, Me.y) + End Function + +#Region "Add/Subtract methods" + ' Adding two MyPoint objects to yeild a new (larger) MyPoint. + Public Shared Function Add(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x + p2.x, p1.y + p2.y) + End Function + + ' Subtracting two MyPoint objects to yeild a new (smaller) MyPoint. + Public Shared Function Subtract(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x - p2.x, p1.y - p2.y) + End Function +#End Region + +#Region "Overloaded + and - Operators" + ' Overloaded operator +. + Public Shared Operator +(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x + p2.x, p1.y + p2.y) + End Operator + + ' Overloaded operator -. + Public Shared Operator -(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x - p2.x, p1.y - p2.y) + End Operator +#End Region + +#Region "Overridden methods of System.Object" + Public Overrides Function Equals(ByVal o As Object) As Boolean + If TypeOf o Is MyPoint Then + If Me.ToString() = o.ToString() Then + Return True + End If + End If + Return False + End Function + + Public Overrides Function GetHashCode() As Integer + Return Me.ToString().GetHashCode() + End Function +#End Region + +#Region "overload the = and <> operators" + Public Shared Operator =(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return p1.Equals(p2) + End Operator + Public Shared Operator <>(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return Not p1.Equals(p2) + End Operator +#End Region + +#Region "IComparable implementation" + Public Function CompareTo(ByVal obj As Object) As Integer _ + Implements IComparable.CompareTo + If TypeOf obj Is MyPoint Then + Dim p As MyPoint = CType(obj, MyPoint) + If Me.x > p.x AndAlso Me.y > p.y Then + Return 1 + End If + If Me.x < p.x AndAlso Me.y < p.y Then + Return -1 + Else + Return 0 + End If + Else + Throw New ArgumentException() + End If + End Function +#End Region + +#Region "The overloaded comparison ops" + Public Shared Operator <(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) < 0) + End Operator + Public Shared Operator >(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) > 0) + End Operator + Public Shared Operator <=(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) <= 0) + End Operator + Public Shared Operator >=(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) >= 0) + End Operator +#End Region + +End Structure diff --git a/Code/Chapter 12/OverloadedOps/OverloadedOps.sln b/Code/Chapter 12/OverloadedOps/OverloadedOps.sln new file mode 100644 index 0000000..11f63dc --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/OverloadedOps.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "OverloadedOps", "OverloadedOps.vbproj", "{CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/OverloadedOps/OverloadedOps.suo b/Code/Chapter 12/OverloadedOps/OverloadedOps.suo new file mode 100644 index 0000000000000000000000000000000000000000..be9b508ffb1fbc7b7e8c78719556dd2ad0c75837 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 12/OverloadedOps/OverloadedOps.vbproj b/Code/Chapter 12/OverloadedOps/OverloadedOps.vbproj new file mode 100644 index 0000000..2d4a62e --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/OverloadedOps.vbproj @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {CCBBE78B-BC9A-43EB-95B7-DD0031AE2F19} + Exe + OverloadedOps.Program + OverloadedOps + OverloadedOps + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + OverloadedOps.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + OverloadedOps.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/OverloadedOps/Program.vb b/Code/Chapter 12/OverloadedOps/Program.vb new file mode 100644 index 0000000..97fe7f5 --- /dev/null +++ b/Code/Chapter 12/OverloadedOps/Program.vb @@ -0,0 +1,54 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Operator Overloading *****" & vbLf) + 'AddSubtractMyPointsWithMethodCalls() + 'AddSubtractMyPointsWithOperators() + 'TestMyPointsForEquality() + TestMyPointsForGreaterLessThan() + Console.ReadLine() + End Sub + + Sub AddSubtractMyPointsWithMethodCalls() + Dim p As New MyPoint(10, 10) + Dim p2 As New MyPoint(20, 30) + + ' Add two MyPoints. + Dim newPoint As MyPoint = MyPoint.Add(p, p2) + Console.WriteLine("p + p2 = {0}", newPoint) + + ' Subtract two MyPoints. + Console.WriteLine("p - p2 = {0}", MyPoint.Subtract(p, p2)) + End Sub + + Sub AddSubtractMyPointsWithOperators() + Dim p As New MyPoint(10, 10) + Dim p2 As New MyPoint(20, 30) + + ' Really calls: MyPoint.Operator+(p, p2) + Dim newPoint As MyPoint = p + p2 + Console.WriteLine("p + p2 = {0}", newPoint) + + ' Really calls: MyPoint.Operator-(p, p2) + Console.WriteLine("p - p2 = {0}", p - p2) + End Sub + + ' Make use of the overloaded equality operators. + Sub TestMyPointsForEquality() + Dim ptOne As New MyPoint(10, 2) + Dim ptTwo As New MyPoint(10, 44) + + Console.WriteLine("ptOne = ptTwo : {0}", ptOne = ptTwo) ' False! + Console.WriteLine("ptOne <> ptTwo : {0}", ptOne <> ptTwo) ' True! + End Sub + + Sub TestMyPointsForGreaterLessThan() + Dim ptOne As New MyPoint(5, 2) + Dim ptTwo As New MyPoint(5, 44) + + Console.WriteLine("ptOne > ptTwo : {0}", ptOne > ptTwo) ' False! + Console.WriteLine("ptOne < ptTwo : {0}", ptOne < ptTwo) ' False! + Console.WriteLine("ptOne >= ptTwo : {0}", ptOne >= ptTwo) ' True! + Console.WriteLine("ptOne <= ptTwo : {0}", ptOne <= ptTwo) ' True! + End Sub +End Module diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.Designer.vb b/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.myapp b/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/AssemblyInfo.vb b/Code/Chapter 12/RefTypeValTypeParams/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3b5f34a --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.Designer.vb b/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.Designer.vb new file mode 100644 index 0000000..269f43f --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("RefTypeValTypeParams.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.resx b/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.Designer.vb b/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5c91f26 --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.RefTypeValTypeParams.My.MySettings + Get + Return Global.RefTypeValTypeParams.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.settings b/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/RefTypeValTypeParams/Person.vb b/Code/Chapter 12/RefTypeValTypeParams/Person.vb new file mode 100644 index 0000000..5de6e3f --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/Person.vb @@ -0,0 +1,15 @@ +Class Person + Public fullName As String + Public age As Integer + + Public Sub New(ByVal n As String, ByVal a As Integer) + fullName = n + age = a + End Sub + Public Sub New() + End Sub + + Public Overrides Function ToString() As String + Return String.Format("Name: {0}, Age: {1}", fullName, age) + End Function +End Class diff --git a/Code/Chapter 12/RefTypeValTypeParams/Program.vb b/Code/Chapter 12/RefTypeValTypeParams/Program.vb new file mode 100644 index 0000000..e1d94b2 --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/Program.vb @@ -0,0 +1,42 @@ +Module Program + + Sub Main() + '' Passing ref types by value. + 'Console.WriteLine("***** Passing Person object by reference *****" & vbLf) + 'Dim fred As Person = New Person("Fred", 12) + 'Console.WriteLine("Before by value call, Person is:") + 'Console.WriteLine(fred) + 'SendAPersonByValue(fred) + 'Console.WriteLine("After by value call, Person is:") + 'Console.WriteLine(fred) + 'Console.ReadLine() + + ' Passing ref types by ref. + Console.WriteLine("***** Passing Person object by reference *****") + Dim mel As New Person("Mel", 23) + Console.WriteLine("Before by ref call, Person is:") + Console.WriteLine(mel) + SendAPersonByReference(mel) + Console.WriteLine("After by ref call, Person is:") + Console.WriteLine(mel) + Console.ReadLine() + + End Sub + + Sub SendAPersonByValue(ByVal p As Person) + ' Change the age of 'p'? + p.age = 99 + + ' Will the caller see this reassignment? + p = New Person("Nikki", 999) + End Sub + + Sub SendAPersonByReference(ByRef p As Person) + ' Change some data of 'p'. + p.age = 555 + + ' 'p' is now pointing to a new object on the heap! + p = New Person("Nikki", 999) + End Sub + +End Module diff --git a/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.sln b/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.sln new file mode 100644 index 0000000..4e1355f --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RefTypeValTypeParams", "RefTypeValTypeParams.vbproj", "{ED4FB1D6-C352-47F5-8E7C-F90AA64B7045}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED4FB1D6-C352-47F5-8E7C-F90AA64B7045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED4FB1D6-C352-47F5-8E7C-F90AA64B7045}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED4FB1D6-C352-47F5-8E7C-F90AA64B7045}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED4FB1D6-C352-47F5-8E7C-F90AA64B7045}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.suo b/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.suo new file mode 100644 index 0000000000000000000000000000000000000000..2c65323431e888a098b3b6e07444b6e88be6a0de GIT binary patch literal 18432 zcmeHOPjFjD8DA%9nzTS@Qv#F_UfeV^tu1UPj^m_hW683U#))0aaRO0DWa-I~{VX|8 za67&1*zLlP& zC+W!!k(|kTKJELnZ@+K9{r>H@>$h(_^yk;EKKd6?R-O@S#jT}{V!i8m8?Fhmd{Brr zxZwS*rKKhHPzYS!E31eDH$m$9XI!PrdMq-)%1& z!yf_W7{Ju%g~m@?>=*wdX!}(vDT>xX*0cl1oM+U3+5!EZHh}t1JHWBJ^`G{D?bxqw z&$^!e8)#3Pq4j?Ut|tLI0iOi0k6oyr1Uv=k0CWNZfKLIs0NsEdz;3`EKrdh~pbxMQ z&=1%TH~@GWa1ihe;90;SzyKf!2muBGVZabz7;qSH1n?ZdJuY64;@KGBdFNdO^#tIA zbI&%XaQ$h(X8@-GQNS6%X8~sc=KyTi%+j0AzjoF7Yw)L+`g*qh=es1eq4KW~y@U|s zzxem?D=)tHz_*XihvyyHYN(@SHg3argqhI(=&`&J%w%S>(aE3@ODBxndD93S4^J3l zF)NqM*mK5iJ7I(q(NHE~MnmUg^EuNtx_hGIW^y7wZ%)Q6R%0Z-nJDxjh$k^v#{}w} zI1k-7paI7rsS~&w!#fMlX*+E(hbOyHvuzl^QS_TZZOW_jXge>hhmH5$(3>dwhyl;6 z7!fIH*G}NqL=XCTw$9*o!2Z#{Gfto!*J&Xmjx!Hjtr1Np^ITTNTbatd>1$ytnJ z7GfB=DMsZir9e#@)YUHJKk@2PyR~{t|NCX9Avrz;pEfNq+u|f>$YJD^vwFDM1^LhU zWZXy^_^e)GTlxx?a{NKex(OO)!GjFufH6reI-UT2#+Hmj{o-ew`vU+=Iex|;oOkMp zpBdPR`KPa>fAou=7E{ZAIsPFz<^-fLgITfb${_H|`KNF8i=Vo>g+hojjbcAYvdXGp}s3SsI0=YgWZ5fPJu2;ByA)$lTl+9kifEds()|66HWiK_ao^}#sMpfc3u_9Y!M-!w zRg8odMwHiU3imp{@=Dw1;jjl0!VbaVbJ?*Mp>7Dyycce|6VLnbrWaTH(5??}I&t4G zx@h-~frE?zQd07%vy}h&f^TKiE9pZN%oy2?s=EEjLtg0-EqqbE(Eicx=u*99@r~R6 zmg7GLNtgpxu0u~^M2vef;&aef@6rMLw-v7%!M_>p8LP9<-g7-=0~2ju(bAMgCXA!# zi%j`jqz3D+0&dcvdaeCiI{plFU;$%RJ-f#|2AqtBYI&kAjGxlP`SpvR@e2JFO9P^Y zwbFpITJD2I-2-ua3AQzX*-`6KEq5w@aZ4Rni=}N!xy!a2tpwrA1kSLC9D&`O|BG zK{=urXs;{*C;n(e{}`+5xPfsFJ%E;RrDsV<{WP93`p|DGaq|iEU*;s3i}Wl1%uW8? zaS)@haWk->j5W%2d{Sl*h^2Z#{NKh{u95LShW1}_x(s3Tl%=eUVNB>!ITh7$^No)G zIVQj3ciSIky4-)Ag}d5U?r(VQ*Ag)H9Du}eRxd(>LeQ9LJfr?Iw^Uu84|qDph}iMq z&4H(0{`ujnf4FjE^Xn%!jR^Z!&kgLlG;{PjzyIbJ$8WuP1>ItO`}VbWPkp8RC*kky z|84xze;1jEMu~`h$w%J0_13nL%iloTTxOEeV|}WRkTdWG3oc|`=`s+Cyf5d5ym?vd{+Q6G=&jxMR%oXqZpNvY=fo@c%A@d3Au(> ztCc)FgI>vMdTD&#Y#P1pHJ|pwjDzOo2q;swYU!>3f zanm%w?Puz7TUlGKv9+Xdh1yzH##<(s&HiQ6c-(jd6>%a-v#{r`InF$GYjND$|EOG6 zNRDF%Rs|~Fo|Ew|cg>g&W{k`DkiRUIF{A3`)D3zwf>s-^)f-etvg#^dHOJ|7^A` zEazS^`lvG4vd3GO5q}&-AB;g*^gg5Bf24FW`^P;fW(Dd+V9SYrMu67|e-Nh=i+B9R z9nyM5$DiEK@*DphN88^x9oNRMWVaR##Q!iFFxK≤jRp?R2W+lTtfUy7S|0_g;S| z|22)(FJ=d+t6HtzDfy%K{Ud@wp3nj9=3(&&91%l#vi9= zuglFF&H@W~5#rgV>NzN`a{c2ov8HC8XEks!BlDn9*Vv;CjC2v+(~>)QtuHTLBjw)X z>ZF|7&ix#}QpvQZ-?jl~2T`x#!jem)ID0gN*l`#++jf_{v?CWki2bx6_CffL=O;Vh z-^Y>f4dJ}A^7KUv}Y@|)1vlS+CfR>*(+@V z<;$|4lekwitamk-o#XBT?STo*+|Nnl*#Poj^B4)=#c)54_dElk@{wNW4|ukqc>aJ9 zlsMp0=C~z>btY2r$GrpTecnQ!K8s?0REC-R7L3|v!LN(hv<_fzFe-Cs zNsLYHP6yD2Jlu__im`SYcS-Of3tkKdM~++oDXp)A>V%$(i1bWGkvXKD=bi?$Hd&0H zKE!>JO?e-Vll$qbb({kj6ZM2A11xCq5sa574~wH?zH+sWj&_k&NT0i^J&&uyuY1dD zHQQ5NYI%OS_2+dAGsvucF^@!zTOHorYn3$^9y!7h@U*$&erc=HlX1$glLPc*JjH0h z%eXZ*B_-V3ht;;_5okLtHFZA#T4?Q=n@+$ESkhC``;u0kuvfIM+>`VGLl>YIzkTo< zeef!!l&JHwUUb9?bhHM~bVNblpkfQ!5Mwk_P#DAg&=Woq+gkGCnv zFHh+6bQ)uxIBK@#xt_|?xq*`Cn5UyC=W+Q(C2mcvH*VS;+8Y%?Yi(g$o&hf%g?HNk z)+Ur@T1ia>^WN@n*&ojnxt|4`lllSqpAzJ!=3lGZ=1LxG>#f&I9Piy=Ew@$7nU-Wf zHrLIK=32GN8Pnr%)7U!xfcfWAUGefBZrYn+tIM_AO;0mp7VdMFa!*-qH+`$cx74?q zdQ`NYMTmsL$U}n>_sSjSz)3`T$%<@6C-QZ@IQ<$z%sqfQSe2?Lm$CoHT->aa)2iBW z124G!p-Tgw-L|G0H|yKhX#*Xt1pjGgqbQQIQ|ajrV=f!d*j8$)!kiI!pVou;e{krG+=kw$bzvPZT9Hf&qyCQ(Uf(Ns3kUuO{~$(l literal 0 HcmV?d00001 diff --git a/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.vbproj b/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.vbproj new file mode 100644 index 0000000..b1538d6 --- /dev/null +++ b/Code/Chapter 12/RefTypeValTypeParams/RefTypeValTypeParams.vbproj @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {ED4FB1D6-C352-47F5-8E7C-F90AA64B7045} + Exe + RefTypeValTypeParams.Program + RefTypeValTypeParams + RefTypeValTypeParams + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + RefTypeValTypeParams.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + RefTypeValTypeParams.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/ValAndRef/My Project/Application.Designer.vb b/Code/Chapter 12/ValAndRef/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/ValAndRef/My Project/Application.myapp b/Code/Chapter 12/ValAndRef/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/ValAndRef/My Project/AssemblyInfo.vb b/Code/Chapter 12/ValAndRef/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..82ba0ed --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/ValAndRef/My Project/Resources.Designer.vb b/Code/Chapter 12/ValAndRef/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4fa2bcc --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ValAndRef.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/ValAndRef/My Project/Resources.resx b/Code/Chapter 12/ValAndRef/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/ValAndRef/My Project/Settings.Designer.vb b/Code/Chapter 12/ValAndRef/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b762856 --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ValAndRef.My.MySettings + Get + Return Global.ValAndRef.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/ValAndRef/My Project/Settings.settings b/Code/Chapter 12/ValAndRef/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/ValAndRef/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/ValAndRef/MyPoint.vb b/Code/Chapter 12/ValAndRef/MyPoint.vb new file mode 100644 index 0000000..f1673d6 --- /dev/null +++ b/Code/Chapter 12/ValAndRef/MyPoint.vb @@ -0,0 +1,98 @@ +' Change to a Structure to see the change +' in program behavior. +Public Class MyPoint + Implements IComparable + Public x As Integer, y As Integer + + Public Sub New(ByVal xPos As Integer, ByVal yPos As Integer) + x = xPos + y = yPos + End Sub + + Public Overrides Function ToString() As String + Return String.Format("[{0}, {1}]", Me.x, Me.y) + End Function + +#Region "Add/Subtract methods" + ' Adding two MyPoint objects to yeild a new (larger) MyPoint. + Public Shared Function Add(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x + p2.x, p1.y + p2.y) + End Function + + ' Subtracting two MyPoint objects to yeild a new (smaller) MyPoint. + Public Shared Function Subtract(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x - p2.x, p1.y - p2.y) + End Function +#End Region + +#Region "Overloaded + and - Operators" + ' Overloaded operator +. + Public Shared Operator +(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x + p2.x, p1.y + p2.y) + End Operator + + ' Overloaded operator -. + Public Shared Operator -(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As MyPoint + Return New MyPoint(p1.x - p2.x, p1.y - p2.y) + End Operator +#End Region + +#Region "Overridden methods of System.Object" + Public Overrides Function Equals(ByVal o As Object) As Boolean + If TypeOf o Is MyPoint Then + If Me.ToString() = o.ToString() Then + Return True + End If + End If + Return False + End Function + + Public Overrides Function GetHashCode() As Integer + Return Me.ToString().GetHashCode() + End Function +#End Region + +#Region "overload the = and <> operators" + Public Shared Operator =(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return p1.Equals(p2) + End Operator + Public Shared Operator <>(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return Not p1.Equals(p2) + End Operator +#End Region + +#Region "IComparable implementation" + Public Function CompareTo(ByVal obj As Object) As Integer _ + Implements IComparable.CompareTo + If TypeOf obj Is MyPoint Then + Dim p As MyPoint = CType(obj, MyPoint) + If Me.x > p.x AndAlso Me.y > p.y Then + Return 1 + End If + If Me.x < p.x AndAlso Me.y < p.y Then + Return -1 + Else + Return 0 + End If + Else + Throw New ArgumentException() + End If + End Function +#End Region + +#Region "The overloaded comparison ops" + Public Shared Operator <(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) < 0) + End Operator + Public Shared Operator >(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) > 0) + End Operator + Public Shared Operator <=(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) <= 0) + End Operator + Public Shared Operator >=(ByVal p1 As MyPoint, ByVal p2 As MyPoint) As Boolean + Return (p1.CompareTo(p2) >= 0) + End Operator +#End Region + +End Class diff --git a/Code/Chapter 12/ValAndRef/Program.vb b/Code/Chapter 12/ValAndRef/Program.vb new file mode 100644 index 0000000..9f993f9 --- /dev/null +++ b/Code/Chapter 12/ValAndRef/Program.vb @@ -0,0 +1,37 @@ +Option Strict On +Option Explicit On + +Module Program + + Sub Main() + ValueTypesRefTypesAndAssignment() + End Sub + + Sub ValueTypesRefTypesAndAssignment() + Console.WriteLine("***** Value Types and the Assignment Operator *****") + Console.WriteLine("-> Creating p1") + Dim p1 As New MyPoint(100, 100) + + Console.WriteLine("-> Assigning p2 to p1") + Dim p2 As MyPoint = p1 + + ' Here is p1. + Console.WriteLine("p1.x = {0}", p1.x) + Console.WriteLine("p1.y = {0}", p1.y) + + ' Here is p2. + Console.WriteLine("p2.x = {0}", p2.x) + Console.WriteLine("p2.y = {0}", p2.y) + + ' Change p2.x. This will NOT change p1.x. + Console.WriteLine("-> Changing p2.x to 900") + p2.x = 900 + + ' Print again. + Console.WriteLine("-> Here are the X values again...") + Console.WriteLine("p1.x = {0}", p1.x) + Console.WriteLine("p2.x = {0}", p2.x) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 12/ValAndRef/ValAndRef.sln b/Code/Chapter 12/ValAndRef/ValAndRef.sln new file mode 100644 index 0000000..60fa90b --- /dev/null +++ b/Code/Chapter 12/ValAndRef/ValAndRef.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ValAndRef", "ValAndRef.vbproj", "{9DEAD564-C533-4D01-A697-539F74CEAD5B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9DEAD564-C533-4D01-A697-539F74CEAD5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DEAD564-C533-4D01-A697-539F74CEAD5B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DEAD564-C533-4D01-A697-539F74CEAD5B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DEAD564-C533-4D01-A697-539F74CEAD5B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/ValAndRef/ValAndRef.suo b/Code/Chapter 12/ValAndRef/ValAndRef.suo new file mode 100644 index 0000000000000000000000000000000000000000..7d5eaaadb84d7200a013a870848714b061eb9840 GIT binary patch literal 16384 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {9DEAD564-C533-4D01-A697-539F74CEAD5B} + Exe + ValAndRef.Program + ValAndRef + ValAndRef + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + ValAndRef.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ValAndRef.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.Designer.vb b/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.myapp b/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/AssemblyInfo.vb b/Code/Chapter 12/ValTypeContainingRefType/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ce0bb92 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.Designer.vb b/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f3c7000 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ValTypeContainingRefType.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.resx b/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.Designer.vb b/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.Designer.vb new file mode 100644 index 0000000..ec75ff3 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ValTypeContainingRefType.My.MySettings + Get + Return Global.ValTypeContainingRefType.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.settings b/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 12/ValTypeContainingRefType/MyRectangle.vb b/Code/Chapter 12/ValTypeContainingRefType/MyRectangle.vb new file mode 100644 index 0000000..2aa6cba --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/MyRectangle.vb @@ -0,0 +1,12 @@ +Structure MyRectangle + ' The MyRectangle structure contains a reference type member. + Public rectInfo As ShapeInfo + + Public top, left, bottom, right As Integer + + Public Sub New(ByVal info As String) + rectInfo = New ShapeInfo(info) + top = 10 : left = 10 + bottom = 10 : right = 100 + End Sub +End Structure diff --git a/Code/Chapter 12/ValTypeContainingRefType/Program.vb b/Code/Chapter 12/ValTypeContainingRefType/Program.vb new file mode 100644 index 0000000..db71485 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/Program.vb @@ -0,0 +1,29 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Value type containing reference type *****" & vbLf) + + ' Create the first MyRectangle. + Console.WriteLine("-> Creating r1") + Dim r1 As New MyRectangle("This is my first rect") + + ' Now assign a new MyRectangle to r1. + Console.WriteLine("-> Assigning r2 to r1") + Dim r2 As MyRectangle + r2 = r1 + + ' Change values of r2. + Console.WriteLine("-> Changing all values of r2") + r2.rectInfo.infoString = "This is new info!" + r2.bottom = 4444 + + ' Print values + Console.WriteLine("-> Values after change:") + Console.WriteLine("-> r1.rectInfo.infoString: {0}", r1.rectInfo.infoString) + Console.WriteLine("-> r2.rectInfo.infoString: {0}", r2.rectInfo.infoString) + Console.WriteLine("-> r1.bottom: {0}", r1.bottom) + Console.WriteLine("-> r2.bottom: {0}", r2.bottom) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 12/ValTypeContainingRefType/ShapeInfo.vb b/Code/Chapter 12/ValTypeContainingRefType/ShapeInfo.vb new file mode 100644 index 0000000..078b396 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/ShapeInfo.vb @@ -0,0 +1,6 @@ +Class ShapeInfo + Public infoString As String + Public Sub New(ByVal info As String) + infoString = info + End Sub +End Class diff --git a/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.sln b/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.sln new file mode 100644 index 0000000..de0f021 --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ValTypeContainingRefType", "ValTypeContainingRefType.vbproj", "{DDE17907-B771-4436-9E69-A387D1D3F020}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DDE17907-B771-4436-9E69-A387D1D3F020}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDE17907-B771-4436-9E69-A387D1D3F020}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDE17907-B771-4436-9E69-A387D1D3F020}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDE17907-B771-4436-9E69-A387D1D3F020}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.suo b/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.suo new file mode 100644 index 0000000000000000000000000000000000000000..86fb13659c7ab7537cfa1de063126b82923d6ad1 GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.vbproj b/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.vbproj new file mode 100644 index 0000000..c9707bd --- /dev/null +++ b/Code/Chapter 12/ValTypeContainingRefType/ValTypeContainingRefType.vbproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DDE17907-B771-4436-9E69-A387D1D3F020} + Exe + ValTypeContainingRefType.Program + ValTypeContainingRefType + ValTypeContainingRefType + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + ValTypeContainingRefType.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ValTypeContainingRefType.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/AnonymousTypes/AnonymousTypes.sln b/Code/Chapter 13/AnonymousTypes/AnonymousTypes.sln new file mode 100644 index 0000000..318b24b --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/AnonymousTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AnonymousTypes", "AnonymousTypes.vbproj", "{D9F485F5-5057-4F69-B862-21DA064D5457}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D9F485F5-5057-4F69-B862-21DA064D5457}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9F485F5-5057-4F69-B862-21DA064D5457}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9F485F5-5057-4F69-B862-21DA064D5457}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9F485F5-5057-4F69-B862-21DA064D5457}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/AnonymousTypes/AnonymousTypes.suo b/Code/Chapter 13/AnonymousTypes/AnonymousTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..a9f9be52d64ae13ef612033b54b3081c03b0bb20 GIT binary patch literal 18944 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 13/AnonymousTypes/AnonymousTypes.vbproj b/Code/Chapter 13/AnonymousTypes/AnonymousTypes.vbproj new file mode 100644 index 0000000..6093996 --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/AnonymousTypes.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D9F485F5-5057-4F69-B862-21DA064D5457} + Exe + AnonymousTypes.Program + AnonymousTypes + AnonymousTypes + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + AnonymousTypes.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + AnonymousTypes.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Application.Designer.vb b/Code/Chapter 13/AnonymousTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Application.myapp b/Code/Chapter 13/AnonymousTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/AnonymousTypes/My Project/AssemblyInfo.vb b/Code/Chapter 13/AnonymousTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..e9213f2 --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Resources.Designer.vb b/Code/Chapter 13/AnonymousTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8fa8e29 --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AnonymousTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Resources.resx b/Code/Chapter 13/AnonymousTypes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Settings.Designer.vb b/Code/Chapter 13/AnonymousTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b096ec8 --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AnonymousTypes.My.MySettings + Get + Return Global.AnonymousTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/AnonymousTypes/My Project/Settings.settings b/Code/Chapter 13/AnonymousTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/AnonymousTypes/Program.vb b/Code/Chapter 13/AnonymousTypes/Program.vb new file mode 100644 index 0000000..f92e5fc --- /dev/null +++ b/Code/Chapter 13/AnonymousTypes/Program.vb @@ -0,0 +1,76 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Anonymous Types *****") + + ' Make an anonymous type representing a car. + Dim myCar = New With {.Color = "Bright Pink", .Make = "Saab", .CurrentSpeed = 55} + myCar.Color = "Black" + + ' Now show the color and make. + Console.WriteLine("My car is a {0} {1}.", myCar.Color, myCar.Make) + + ' Reflect over what the compiler generated. + ReflectOverAnonymousType(myCar) + Console.WriteLine() + CompositeAnonymousType() + Console.WriteLine() + EqualityTest() + Console.ReadLine() + End Sub + + Sub ReflectOverAnonymousType(ByVal obj As Object) + Console.WriteLine("obj is an instance of: {0}", obj.GetType().Name) + Console.WriteLine("Base class of {0} is {1}", _ + obj.GetType().Name, _ + obj.GetType().BaseType) + Console.WriteLine("obj.ToString() = {0}", obj.ToString()) + Console.WriteLine("obj.GetHashCode() = {0}", obj.GetHashCode()) + Console.WriteLine() + End Sub + +#Region "Test for equality" + Sub EqualityTest() + + ' Make 2 anonymous classes with identical name/value pairs. + Dim firstCar = New With {.Color = "Bright Pink", .Make = "Saab", .CurrentSpeed = 55} + Dim secondCar = New With {.Color = "Bright Pink", .Make = "Saab", .CurrentSpeed = 55} + + ' Are they considered equal when using Equals()? + If (firstCar.Equals(secondCar)) Then + Console.WriteLine("Same anonymous object!") + Else + Console.WriteLine("Not the same anonymous object!") + End If + + ' Error!! No overloaded = operator for anonymous types! + 'If (firstCar = secondCar) Then + 'Console.WriteLine("Same anonymous object!") + 'Else + 'Console.WriteLine("Not the same anonymous object!") + 'End If + + ' Are these objects the same underlying type? + If (firstCar.GetType().Name = secondCar.GetType().Name) Then + Console.WriteLine("We are both the same type!") + Else + Console.WriteLine("We are different types!") + End If + + ' Show all the details. + Console.WriteLine() + ReflectOverAnonymousType(firstCar) + ReflectOverAnonymousType(secondCar) + End Sub +#End Region + + Sub CompositeAnonymousType() + ' Make an anonymous type that is composed of another. + Dim purchaseItem = New With { _ + .TimeBought = DateTime.Now, _ + .ItemBought = New With {.Color = "Red", .Make = "Saab", .CurrentSpeed = 55}, _ + .Price = 34.0} + + ReflectOverAnonymousType(purchaseItem) + End Sub +End Module diff --git a/Code/Chapter 13/ExtensionMethods/ExtensionMethods.sln b/Code/Chapter 13/ExtensionMethods/ExtensionMethods.sln new file mode 100644 index 0000000..92340b1 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/ExtensionMethods.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExtensionMethods", "ExtensionMethods.vbproj", "{2A346F42-B014-4D33-8D13-821149275245}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2A346F42-B014-4D33-8D13-821149275245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A346F42-B014-4D33-8D13-821149275245}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A346F42-B014-4D33-8D13-821149275245}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A346F42-B014-4D33-8D13-821149275245}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/ExtensionMethods/ExtensionMethods.suo b/Code/Chapter 13/ExtensionMethods/ExtensionMethods.suo new file mode 100644 index 0000000000000000000000000000000000000000..3f02252759b216d8dbe801cd92c8d471b81e82ea GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 13/ExtensionMethods/ExtensionMethods.vbproj b/Code/Chapter 13/ExtensionMethods/ExtensionMethods.vbproj new file mode 100644 index 0000000..7184b18 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/ExtensionMethods.vbproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2A346F42-B014-4D33-8D13-821149275245} + Exe + ExtensionMethods.Project + ExtensionMethods + ExtensionMethods + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + ExtensionMethods.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + ExtensionMethods.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Application.Designer.vb b/Code/Chapter 13/ExtensionMethods/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Application.myapp b/Code/Chapter 13/ExtensionMethods/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/ExtensionMethods/My Project/AssemblyInfo.vb b/Code/Chapter 13/ExtensionMethods/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6ebfe20 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Resources.Designer.vb b/Code/Chapter 13/ExtensionMethods/My Project/Resources.Designer.vb new file mode 100644 index 0000000..03a6025 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ExtensionMethods.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Resources.resx b/Code/Chapter 13/ExtensionMethods/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Settings.Designer.vb b/Code/Chapter 13/ExtensionMethods/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c08477b --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ExtensionMethods.My.MySettings + Get + Return Global.ExtensionMethods.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ExtensionMethods/My Project/Settings.settings b/Code/Chapter 13/ExtensionMethods/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/ExtensionMethods/MyExtensions.vb b/Code/Chapter 13/ExtensionMethods/MyExtensions.vb new file mode 100644 index 0000000..4c50c8e --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/MyExtensions.vb @@ -0,0 +1,59 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices + +Namespace MyExtensionMethods + +#Region "MyExtensions module" + Module MyExtensions + + '' This method allows any object to display the assembly + '' it is defined in. + ' _ + 'Public Sub DisplayDefiningAssembly(ByVal obj As Object) + ' Console.WriteLine("{0} lives here: {1}", obj.GetType().Name, _ + ' obj.GetType().Assembly) + ' Console.WriteLine() + 'End Sub + + ' This version takes a booelan argument when calling the method. + _ + Public Sub DisplayDefiningAssembly(ByVal obj As Object, Optional ByVal showDetails As Boolean = False) + Console.WriteLine("Defining Assembly: {0}", obj.GetType().Assembly) + + If showDetails Then + Console.WriteLine("Name of type: {0}", obj.GetType().Name) + Console.WriteLine("Parent of type: {0}", obj.GetType().BaseType) + Console.WriteLine("Is generic?: {0}", obj.GetType().IsGenericType) + End If + End Sub + + + ' This method allows any integer to reverse its digits. + ' For example, 56 would return 65. + _ + Public Function ReverseDigits(ByVal i As Integer) As Integer + ' Translate int into a string, and then + ' get all the characters. + Dim digits() As Char = i.ToString().ToCharArray() + + ' Now reverse items in the array. + Array.Reverse(digits) + + ' Put back into string. + Dim newDigits As String = New String(digits) + + ' Finally, return the modified string back as an int. + Return Integer.Parse(newDigits) + End Function + End Module +#End Region + + Module CarExtensions + _ + Public Function SlowDown(ByVal c As Car) As Integer + c.Speed -= 1 + Return c.Speed + End Function + End Module + +End Namespace diff --git a/Code/Chapter 13/ExtensionMethods/NamespaceTestClass.vb b/Code/Chapter 13/ExtensionMethods/NamespaceTestClass.vb new file mode 100644 index 0000000..aae6202 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/NamespaceTestClass.vb @@ -0,0 +1,18 @@ +' Here is our only imports directive. +Imports System + +' Comment this out to receive a coding error. +Imports ExtensionMethods.MyExtensionMethods + +Namespace MyNewApp + + Class JustATest + Sub SomeMethod() + ' Error! Need to import MyExtensionMethods + ' namespace to extend integer with ReverseDigits()! + Dim i As Integer = 0 + i.ReverseDigits() + End Sub + End Class + +End Namespace diff --git a/Code/Chapter 13/ExtensionMethods/Project.vb b/Code/Chapter 13/ExtensionMethods/Project.vb new file mode 100644 index 0000000..e7e2fc2 --- /dev/null +++ b/Code/Chapter 13/ExtensionMethods/Project.vb @@ -0,0 +1,44 @@ +Imports ExtensionMethods.MyExtensionMethods + +Public Class Car + Public Speed As Integer + Public Function SpeedUp() As Integer + Speed += 1 + Return Speed + End Function +End Class + +Module Project + Sub Main() + Console.WriteLine("***** Fun with Extension Methods *****" + vbLf) + + ' The Integer has assumed a new identity! + Dim myInt As Integer = 12345678 + MyExtensions.DisplayDefiningAssembly(myInt) + + ' So has the DataSet! + Dim d = New System.Data.DataSet() + MyExtensions.DisplayDefiningAssembly(d) + + ' And the SoundPlayer (with details). + Dim sp As New System.Media.SoundPlayer() + MyExtensions.DisplayDefiningAssembly(d, True) + + ' Use new integer functionality. + Console.WriteLine("Value of myInt: {0}", myInt) + Console.WriteLine("Reversed digits of myInt: {0}", _ + MyExtensions.ReverseDigits(myInt)) + + Console.WriteLine() + UseCar() + Console.ReadLine() + End Sub + + Sub UseCar() + Dim c As New Car() + c.Speed = 10 + Console.WriteLine("Speed: {0}", c.SpeedUp()) + Console.WriteLine("Speed: {0}", c.SlowDown()) + End Sub + +End Module diff --git a/Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.sln b/Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.sln new file mode 100644 index 0000000..282b08e --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ImplicitDataTypes", "ImplicitDataTypes.vbproj", "{D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.suo b/Code/Chapter 13/ImplicitDataTypes/ImplicitDataTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..f7cccd950551e7039f7201168620f4ab9b02597c GIT binary patch literal 16384 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 yGU=oK{c#A#Ku+Ke&jE5 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D0E8D0A2-C133-4969-9BEF-7ECA2A016FB2} + Exe + ImplicitDataTypes.Program + ImplicitDataTypes + ImplicitDataTypes + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + ImplicitDataTypes.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + 1 + + + pdbonly + false + true + true + bin\Release\ + ImplicitDataTypes.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + 1 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Application.Designer.vb b/Code/Chapter 13/ImplicitDataTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Application.myapp b/Code/Chapter 13/ImplicitDataTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/AssemblyInfo.vb b/Code/Chapter 13/ImplicitDataTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..af98be8 --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.Designer.vb b/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..505b895 --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ImplicitDataTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.resx b/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.Designer.vb b/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c7367a6 --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ImplicitDataTypes.My.MySettings + Get + Return Global.ImplicitDataTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.settings b/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/ImplicitDataTypes/Program.vb b/Code/Chapter 13/ImplicitDataTypes/Program.vb new file mode 100644 index 0000000..c205788 --- /dev/null +++ b/Code/Chapter 13/ImplicitDataTypes/Program.vb @@ -0,0 +1,96 @@ +' Do not allow VB 6.0 style late binding. +Option Strict On + +' Remember this is the default. +Option Infer On + +#Region "Simple car types for testing purposes." +Public Class Car +End Class +Public Class SportsCar + Inherits Car +End Class +Public Class MiniVan + Inherits Car +End Class +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Impliict Typing *****") + Console.WriteLine() + + ImplicitTyping() + Console.WriteLine() + + ImplicitTypingInForEach() + Console.WriteLine() + + QueryOverInts() + Console.ReadLine() + End Sub + +#Region "Explicit typing example" + Public Sub ExplicitTyping() + ' Local variables are declared as so: + ' Dim variableName As dataType = initialValue + Dim myInt As Integer = 0 + Dim myBool As Boolean = True + Dim myString As String = "Time, marches on..." + End Sub +#End Region + +#Region "Implicit typing examples" + Public Sub ImplicitTyping() + ' Implicitly typed local variables. + Dim myInt = 0 + Dim myBool = True + Dim myString = "Time, marches on..." + + ' Print out the underlying type. + Console.WriteLine("myInt is a: {0}", myInt.GetType().Name) + Console.WriteLine("myBool is a: {0}", myBool.GetType().Name) + Console.WriteLine("myString is a: {0}", myString.GetType().Name) + + ' Assume we have classes of type SportsCar + ' and MiniVan somewhere in the project. + Dim evenNumbers = New Integer() {2, 4, 6, 8} + + Dim myMinivans = New List(Of MiniVan)() + Dim myCar = New SportsCar() + + Console.WriteLine("evenNumbers is a: {0}", evenNumbers.GetType().Name) + Console.WriteLine("myMinivans is a: {0}", myMinivans.GetType().Name) + Console.WriteLine("myCar is a: {0}", myCar.GetType().Name) + End Sub + + Public Sub ImplicitTypingInForEach() + ' Use implicit typing in a standard for each loop. + Dim evenNumbers() = New Integer() {2, 4, 6, 8} + + ' Here, explicitly define the iterator type. + For Each item As Integer In evenNumbers + Console.WriteLine("Item value: {0}", item) + Next + End Sub +#End Region + +#Region "Simple LINQ query w/ implicit typing" + Sub QueryOverInts() + Dim numbers() As Integer = {10, 20, 30, 40, 1, 2, 3, 8} + Dim subset = From i In numbers Where i < 10 Select i + + Console.Write("Values in subset: ") + For Each i In subset + Console.Write("{0} ", i) + Next + Console.WriteLine() + + ' Humm...what type is subset? + Console.WriteLine("subset is a: {0}", subset.GetType().Name) + Console.WriteLine("Namespace of subset is: {0}", subset.GetType().Namespace) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.sln b/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.sln new file mode 100644 index 0000000..b58ba8a --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InterfaceExtensions", "InterfaceExtensions.vbproj", "{40BECDB5-6693-4E5B-A54A-455E51C3457E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {40BECDB5-6693-4E5B-A54A-455E51C3457E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40BECDB5-6693-4E5B-A54A-455E51C3457E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40BECDB5-6693-4E5B-A54A-455E51C3457E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40BECDB5-6693-4E5B-A54A-455E51C3457E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.suo b/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.suo new file mode 100644 index 0000000000000000000000000000000000000000..8e563eec4f667d0de28274ff43cfbe8101c2ac6d GIT binary patch literal 17408 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 CCcgau literal 0 HcmV?d00001 diff --git a/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.vbproj b/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.vbproj new file mode 100644 index 0000000..8894d53 --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/InterfaceExtensions.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {40BECDB5-6693-4E5B-A54A-455E51C3457E} + Exe + InterfaceExtensions.Program + InterfaceExtensions + InterfaceExtensions + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + InterfaceExtensions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + InterfaceExtensions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Application.Designer.vb b/Code/Chapter 13/InterfaceExtensions/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Application.myapp b/Code/Chapter 13/InterfaceExtensions/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/AssemblyInfo.vb b/Code/Chapter 13/InterfaceExtensions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4f7812e --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Resources.Designer.vb b/Code/Chapter 13/InterfaceExtensions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1d835f5 --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("InterfaceExtensions.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Resources.resx b/Code/Chapter 13/InterfaceExtensions/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Settings.Designer.vb b/Code/Chapter 13/InterfaceExtensions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..80ea348 --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.InterfaceExtensions.My.MySettings + Get + Return Global.InterfaceExtensions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/InterfaceExtensions/My Project/Settings.settings b/Code/Chapter 13/InterfaceExtensions/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/InterfaceExtensions/Program.vb b/Code/Chapter 13/InterfaceExtensions/Program.vb new file mode 100644 index 0000000..c10229e --- /dev/null +++ b/Code/Chapter 13/InterfaceExtensions/Program.vb @@ -0,0 +1,37 @@ +Imports System.Runtime.CompilerServices + +Module Program + Sub Main() + Console.WriteLine("***** Extending an interface *****") + + ' Call IBasicMath members from MyCalc object. + Dim c As New MyCalc() + Console.WriteLine("1 + 2 = {0}", c.Add(1, 2)) + Console.WriteLine("1 - 2 = {0}", c.Subtract(1, 2)) + Console.ReadLine() + End Sub +End Module + +' Define a normal CLR interface in VB. +Interface IBasicMath + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer +End Interface + +' Implementation of IBasicMath. +Class MyCalc + Implements IBasicMath + Public Function Add(ByVal x As Integer, _ + ByVal y As Integer) As Integer Implements IBasicMath.Add + Return x + y + End Function +End Class + +Module MathExtensions + ' Extend IBasicMath with this method and this + ' implementation. + _ + Public Function Subtract(ByVal itf As IBasicMath, _ + ByVal x As Integer, ByVal y As Integer) As Integer + Return x - y + End Function +End Module diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.Designer.vb b/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.myapp b/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 13/MyExtensionsLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..432e02d --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.Designer.vb b/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9a80715 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyExtensionsLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.resx b/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.Designer.vb b/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..46a04a0 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyExtensionsLibrary.My.MySettings + Get + Return Global.MyExtensionsLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.settings b/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/MyExtensionsLibrary/MyExtensions.vb b/Code/Chapter 13/MyExtensionsLibrary/MyExtensions.vb new file mode 100644 index 0000000..bc193ba --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/MyExtensions.vb @@ -0,0 +1,45 @@ +Imports System.Runtime.CompilerServices + +#Region "MyExtensions module" +Public Module MyExtensions + + '' This method allows any object to display the assembly + '' it is defined in. + ' _ + 'Public Sub DisplayDefiningAssembly(ByVal obj As Object) + ' Console.WriteLine("{0} lives here: {1}", obj.GetType().Name, _ + ' obj.GetType().Assembly) + ' Console.WriteLine() + 'End Sub + + ' This version takes a booelan argument when calling the method. + _ + Public Sub DisplayDefiningAssembly(ByVal obj As Object, Optional ByVal showDetails As Boolean = False) + Console.WriteLine("Defining Assembly: {0}", obj.GetType().Assembly) + + If showDetails Then + Console.WriteLine("Name of type: {0}", obj.GetType().Name) + Console.WriteLine("Parent of type: {0}", obj.GetType().BaseType) + Console.WriteLine("Is generic?: {0}", obj.GetType().IsGenericType) + End If + End Sub + + ' This method allows any integer to reverse its digits. + ' For example, 56 would return 65. + _ + Public Function ReverseDigits(ByVal i As Integer) As Integer + ' Translate int into a string, and then + ' get all the characters. + Dim digits() As Char = i.ToString().ToCharArray() + + ' Now reverse items in the array. + Array.Reverse(digits) + + ' Put back into string. + Dim newDigits As String = New String(digits) + + ' Finally, return the modified string back as an int. + Return Integer.Parse(newDigits) + End Function +End Module +#End Region diff --git a/Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.sln b/Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.sln new file mode 100644 index 0000000..af028ce --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyExtensionsLibrary", "MyExtensionsLibrary.vbproj", "{02A84287-CCD2-44B5-B9DD-A6E38067B4BA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {02A84287-CCD2-44B5-B9DD-A6E38067B4BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02A84287-CCD2-44B5-B9DD-A6E38067B4BA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02A84287-CCD2-44B5-B9DD-A6E38067B4BA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02A84287-CCD2-44B5-B9DD-A6E38067B4BA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.suo b/Code/Chapter 13/MyExtensionsLibrary/MyExtensionsLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..c98ae12753ec1cc296709278a1360ee9ffb2dd20 GIT binary patch literal 16384 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {02A84287-CCD2-44B5-B9DD-A6E38067B4BA} + Library + MyExtensionsLibrary + MyExtensionsLibrary + 512 + Windows + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + MyExtensionsLibrary.xml + + + true + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + pdbonly + false + true + true + bin\Release\ + MyExtensionsLibrary.xml + + + true + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.Designer.vb b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.myapp b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/AssemblyInfo.vb b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d18638e --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.Designer.vb b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2260a72 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyExtensionsLibraryClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.resx b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.Designer.vb b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9179488 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyExtensionsLibraryClient.My.MySettings + Get + Return Global.MyExtensionsLibraryClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.settings b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.sln b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.sln new file mode 100644 index 0000000..45aa807 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyExtensionsLibraryClient", "MyExtensionsLibraryClient.vbproj", "{092FD18B-9084-4D44-A2A5-E1CD103597DF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {092FD18B-9084-4D44-A2A5-E1CD103597DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {092FD18B-9084-4D44-A2A5-E1CD103597DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {092FD18B-9084-4D44-A2A5-E1CD103597DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {092FD18B-9084-4D44-A2A5-E1CD103597DF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.suo b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..0cdf8784c90a35ea5866573afde383526817a9a4 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj new file mode 100644 index 0000000..a490e86 --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj @@ -0,0 +1,119 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {092FD18B-9084-4D44-A2A5-E1CD103597DF} + Exe + MyExtensionsLibraryClient.Program + MyExtensionsLibraryClient + MyExtensionsLibraryClient + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + MyExtensionsLibraryClient.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + MyExtensionsLibraryClient.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + False + ..\MyExtensionsLibrary\bin\Debug\MyExtensionsLibrary.dll + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj.user b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/MyExtensionsLibraryClient.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 13/MyExtensionsLibraryClient/Program.vb b/Code/Chapter 13/MyExtensionsLibraryClient/Program.vb new file mode 100644 index 0000000..0591f7b --- /dev/null +++ b/Code/Chapter 13/MyExtensionsLibraryClient/Program.vb @@ -0,0 +1,17 @@ +Imports MyExtensionsLibrary + +Module Program + + Sub Main() + Console.WriteLine("***** Using Library with Extensions *****") + ' This time, these extension methods + ' have been defined within an external + ' .NET class library. + Dim myInt As Integer = 987 + myInt.DisplayDefiningAssembly() + Console.WriteLine("{0} is reversed to {1}", _ + myInt, myInt.ReverseDigits()) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Application.Designer.vb b/Code/Chapter 13/ObjectInitializers/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Application.myapp b/Code/Chapter 13/ObjectInitializers/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 13/ObjectInitializers/My Project/AssemblyInfo.vb b/Code/Chapter 13/ObjectInitializers/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d992cd3 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Resources.Designer.vb b/Code/Chapter 13/ObjectInitializers/My Project/Resources.Designer.vb new file mode 100644 index 0000000..240f3f4 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ObjectInitializers.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Resources.resx b/Code/Chapter 13/ObjectInitializers/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Settings.Designer.vb b/Code/Chapter 13/ObjectInitializers/My Project/Settings.Designer.vb new file mode 100644 index 0000000..537b407 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ObjectInitializers.My.MySettings + Get + Return Global.ObjectInitializers.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 13/ObjectInitializers/My Project/Settings.settings b/Code/Chapter 13/ObjectInitializers/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 13/ObjectInitializers/ObjectInitializers.sln b/Code/Chapter 13/ObjectInitializers/ObjectInitializers.sln new file mode 100644 index 0000000..5e30fcb --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/ObjectInitializers.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ObjectInitializers", "ObjectInitializers.vbproj", "{97579564-C908-4396-B117-D9B5B2E1CDE1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {97579564-C908-4396-B117-D9B5B2E1CDE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97579564-C908-4396-B117-D9B5B2E1CDE1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97579564-C908-4396-B117-D9B5B2E1CDE1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97579564-C908-4396-B117-D9B5B2E1CDE1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 13/ObjectInitializers/ObjectInitializers.suo b/Code/Chapter 13/ObjectInitializers/ObjectInitializers.suo new file mode 100644 index 0000000000000000000000000000000000000000..2282214b1645e8829aeca2d9bfc17f62b416347f GIT binary patch literal 19456 zcmeI3-)~$;700g=QW_fQkCgNWC2W&4^hdhbN!r9s39;8s>ePwdtm6dO(yn*cj^iI2 zb~hm|RDwS6hTw&k7ep%+2^Cb)3Q&O;h$@syp!5L=!4r8yNGSaWn(+C~-0|Msy?6K8 ziM(s*tj?Xgb7${4bLPzXHM8$uy8WN8y>;(pudeL()_Pa3t@myUw0ChYFy%JSTf>dM zU%htinr-wvZa*rkhyx!&>&N^#)LgFvJ`UUrtOq^;d=j_?*Z|xLdY0-J%)0SVxKU<;uB+x&VJv2WFrddw^GsW2CV-aK{5 zTVNLAmrY2FW5U`NKl{PY$DY5^cd<+T4oDa%qhKt0r@bMtPjWZtowpBSUN@nI9Dda? ze`aJ?eS5sez1?0vbvM^u?@_Khx$ow#htB|a&n;3p2DN9sGJJC732#l8@MVoVc-aG6c_m`7RO*S$k%dHmu{cxCjQ1z9 z^Z7*OR3VW(IyjaX&CXUPi>0~5u2McRn9rn&`9dajDto3B;%Cv$GN-Z~v>hvi7d(D$6#^3YCT! zVSWnC^%&PV?u+P-EHKSHF7R}c&n(~Oc|KrPb=K1gRFSonKF*tdTJ_tUrw!G|xfa0Y+RH6oz774OQOggI47TWQ9*buA7b;Hw7gzxm_)q}9s;2UFZip<3X*Ym7ojsF}}5Txni3 z|Iz^R@8aTLM_*?_(_qf|QXrlSe+i9RfD=!1ZRL#!ztoLzt8m-0NcXx-t4cloenzjAK4Ub7v_qvS9S<^oy>BBB7r)ltF8~#- z#aDq8Rx*QiTksOtL#>Ay@Mc&a{j_9_E=oX)_>#Z^A4NZnaVN>0rCq*T30Y2HiA&6) z{K-7OcQU2BQ}mT&Ylah8?p-_|f%~Uv(dw5EI88lm-Z|~PV0wy*=;GEmdJ}L-+ViZTJHeW&aG$5G$g^I!)y?n5d3VPA zvO-%izCk zm3&o|cFUlZ%=WAUNm`Ei)mkl>wP<;=)T=K_H9xzawwf2U_~JY4|B_9|3E8>s@LEzf z*RDOh#;A6+?tS+6l6X@R8Qrg0{En7Bk8Y4go;TX7s_AMyGwE^JB6+kyi$wgnWcybu z|3&8DEHZE39F+M{aLOBO<_mSR{-sZ}_Er3GHm&5Z$!4kyfFlaO^M##vZhujGO)g{n zck>Eox1{GJfo_bJ&y$RLidNYl_oNoD`^Nh3QY?N45O@6d(D$4#puYTkx9gi2sy&3y zd#E2XNs&h}SiP98y#(F6G1k4bDm|jK$R6$nXz7<9eFRG7156vsrx-`}@64iauc&)1 zd{Pv?o9i-BL6&kegP>1=T=k3C);!wL=0zM{>pxqppaZKoRNJRky4Ck)Z~G0VZJ)_5 z+}P2|GnOZ!7_;Dg3k>tdXG_8D<8WgV9yt%TpPqTfB<`#1Gg*%tOHb8)E|nH#mit(H zlACjkB?axudT1sT%|yR>UqH6f-nLsl?0e*Ue|+k#f4p&N<4;fAI_#C+JKXosk4``R zv%kIionu$ud4rcx(%#<5J1<#0IXs9k?^!Xw{Khjz=Z1OD1!hj(qK(LO7v?<|1KzW&S(NwOWjLTrS^er!9P&$e z-yZMZSs%r@Hr|#0qbNh;mbYEIPLoK=1QaXc{6pKQ9>Q9kVQnc65XY6z83UB>$&*Qu zMNw2V&b4Glam0*ATC#v-xlu?Xwww1h{yM_SE5XlN8$WI`s1VttkpJkCJu}8Prv2SY zf8|J3Qt(8&tZZVa0=m4O3fnL0s`y{HWz$qg^$WHK{SPN!l0?m^Ja2hJ)>_ElX0N7Ccyu@P~U*I&gV{#(rUT743I7aadnNO0cZo@dOn zP;(G!WH-cxSojym9(Vjf{3FKqv3XEwu&Ds&2cWH04iNq?8UKT@X1fALipzD(nYB6- zz;2(ny50x>rCnvs;*S4o^c4*%F3;-nuW6(Ew7nI^W#s->S`U*&C;A*FpD%w$ZK3TBEfqo4or3QZ7reV6@>hD^D?&vwijB zkZ;u4{12BKMLd6M8~+=5U+-xgWeyaDmW@}Y9N3uoRxz_;ZIqKGt)A87e^{$hFG-3D ze$%!Yv36cLRCz^xaNYS-)tI-3RS+&s(z(BD8||&7DQdkt2~z&yS8by|Ue-NaYP8eP z>6C}d%x!Iz_aURzlwwQL;Si)#bN^uL9-V8>9Vg4G~D0 zywEsl*KU(3&{d_%k818-?I$mZKOVcaE`kaFz3CKk$^Y=gE5WlnT}wQ_vwBy=;rCPB z^5b0e9KxIxXlj%QmpfdUo%d$(cTddxkK5EuU> zec$z8+Z=zd-z&Njew}G{k`&#u`s6gX7pq^d`);ZH4QAS1_OM-< z;dmZuoL<%fp26?ZIpcS?-tzMLo{J`DavA zmVj(*;q0|`T>IH$)H9up-$8!l7;$@wcGvQpIYH)fae7B>l&|-UlJn~0w+Er~82#1D z?qb?K%q>vTSj2;I{$cBSj`_Tkx#ByY-r(enD7seto}RZ}ID` ze!b1FAMoq#e%V6g zvp=9X*6#c#=_4NQVuw+FsCFVJ;dz-kIMhEpB#YPC+CmYEPBU67VWTL?i*}}TB5MLE zT3Gy-inS>knPzh}j!dVVD}1cvmzh;rzu?*H>KLo%A}yEPo{1!AWxUi@=R>1rFD$3n zY^0rUx5G!OxL=u6cappLeCmHGoh`FE`6bD$_UaRjwvtUVd6w@B-k0G+JVN%2|@s=cjnyVJ_vq|v^zCep=8xM}z4b^2?TkGunc zXw^TwEVr-U+U*2aH}DwOJ=nHAXuMiV?Eg2y=*TY8(HT5*UXS#je4{KQkqrpXc{cKO zU~xPv!B<%$dmcmQuzL*CrVP@a9>`#P(r zmS(40l+UbPQ;y48&5C>KpX&c1`iGcK2g`%WQLC^12NdSf20eJ4j+B>^GrwrW?WhgM zExjXsWBn2L4=wdo+*M0wc;6)PlcZT%(ovzkz~FE7KJ8Tn+mig7RB?CGoEQ*49sfFA zH#hRwX>Vz46^-|QL0js7khOE>Bsq@G4RWKsTCH)$+&F?Xc8)#J-c~)|8?8r>_IBv% z`c)pJr=32F_BCs{XEjZbzSUw|T5C-=DrwIuq*H_B!C}PzU1=3r*GFRfb7gL + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {97579564-C908-4396-B117-D9B5B2E1CDE1} + Exe + ObjectInitializers.Program + ObjectInitializers + ObjectInitializers + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + ObjectInitializers.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + ObjectInitializers.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 13/ObjectInitializers/Point.vb b/Code/Chapter 13/ObjectInitializers/Point.vb new file mode 100644 index 0000000..201135c --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/Point.vb @@ -0,0 +1,45 @@ +Public Enum PointColor + LightBlue + BloodRed + Gold +End Enum + +Public Class Point + Public xPos, yPos As Integer + Private c As PointColor + + Public Sub New(ByVal color As PointColor) + xPos = 0 + yPos = 0 + c = color + End Sub + Public Sub New() + End Sub + + Public Sub New(ByVal x As Integer, ByVal y As Integer) + xPos = x + yPos = y + c = PointColor.Gold + End Sub + + Public Property X() As Integer + Get + Return xPos + End Get + Set(ByVal value As Integer) + xPos = value + End Set + End Property + Public Property Y() As Integer + Get + Return yPos + End Get + Set(ByVal value As Integer) + yPos = value + End Set + End Property + + Public Overrides Function ToString() As String + Return String.Format("[{0}, {1}, {2}]", xPos, yPos, c) + End Function +End Class diff --git a/Code/Chapter 13/ObjectInitializers/Program.vb b/Code/Chapter 13/ObjectInitializers/Program.vb new file mode 100644 index 0000000..9d7b602 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/Program.vb @@ -0,0 +1,41 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Object Init Syntax *****") + ' Make a Point by setting each property manually... + Dim firstPoint As New Point() + firstPoint.X = 10 + firstPoint.Y = 10 + Console.WriteLine(firstPoint.ToString()) + + ' ...or make a Point via a custom constructor... + Dim anotherPoint As New Point(20, 20) + Console.WriteLine(anotherPoint.ToString()) + + ' ...or make a Point types using the new object init syntax. + Dim finalPoint As New Point() With {.X = 30, .Y = 30} + Console.WriteLine(finalPoint.ToString()) + + Dim p As New Point With {.xPos = 2, .yPos = 3, .X = 900} + Console.WriteLine(p.ToString()) + + ' Calling a custom constructor. + Dim pt As New Point(10, 16) With {.X = 100, .Y = 100} + Console.WriteLine(pt.ToString()) + + ' Calling a more interesting custom constructor with init syntax. + Dim goldPoint As New Point(PointColor.Gold) With {.X = 90, .Y = 20} + Console.WriteLine("Value of Point is: {0}", goldPoint) + + + ' Create and initialize a Rectangle. + Dim myRect As New Rectangle() With _ + { _ + .TopLeft = New Point() With {.X = 10, .Y = 10}, _ + .BottomRight = New Point() With {.X = 200, .Y = 200} _ + } + Console.WriteLine(myRect) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 13/ObjectInitializers/Rectangle.vb b/Code/Chapter 13/ObjectInitializers/Rectangle.vb new file mode 100644 index 0000000..0fdeac6 --- /dev/null +++ b/Code/Chapter 13/ObjectInitializers/Rectangle.vb @@ -0,0 +1,26 @@ +Public Class Rectangle + Private m_topLeft As New Point() + Private m_bottomRight As New Point() + + Public Property TopLeft() As Point + Get + Return m_topLeft + End Get + Set(ByVal value As Point) + m_topLeft = value + End Set + End Property + Public Property BottomRight() As Point + Get + Return m_bottomRight + End Get + Set(ByVal value As Point) + m_bottomRight = value + End Set + End Property + + Public Overrides Function ToString() As String + Return String.Format("[TopLeft: {0}, {1}, BottomRight: {2}, {3}]", _ + m_topLeft.X, m_topLeft.Y, m_bottomRight.X, m_bottomRight.Y) + End Function +End Class diff --git a/Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.sln b/Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.sln new file mode 100644 index 0000000..5b45e3c --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithLinqExpressions", "FunWithLinqExpressions.vbproj", "{158B95C7-4186-4C5C-A301-596B68FF5801}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {158B95C7-4186-4C5C-A301-596B68FF5801}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {158B95C7-4186-4C5C-A301-596B68FF5801}.Debug|Any CPU.Build.0 = Debug|Any CPU + {158B95C7-4186-4C5C-A301-596B68FF5801}.Release|Any CPU.ActiveCfg = Release|Any CPU + {158B95C7-4186-4C5C-A301-596B68FF5801}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.suo b/Code/Chapter 14/FunWithLinqExpressions/FunWithLinqExpressions.suo new file mode 100644 index 0000000000000000000000000000000000000000..9ad28349dbaad760aa4b1c2a71e49262af804b11 GIT binary patch literal 17920 zcmeI3+i%=Q6~}*0Xh>-xZPErPA>Fu1Xlb(8iE|I3_S(*+cIxcs%LhDETIn-P~0(=zM3_J>a4EQ+k81Oi-1^5K;6o3eLPXb$kZNSrj zWI^yr?mq>58h8fy46pz^<=~wSGZKTn!Bp{T2FlM}K-dV7Zao6R|*$*MF+tES}zv_@bGqS6;t=?g; z&Fi3U;d;#5&-DQJE!?&8*U8=M1u6%jcE-!WCs&Sp8=8byYauNDpuTJje;mxiK+>W2 z9DeEIu=uyrcC#)Nw_aU6z&q&y_w00ldzLQH`j;LkU;okxYNxJM5Bhbz_22Bb+wIqT zsXyo6zd-$Y;6-2`upfv5UjSNwR^R||5NHDq0f&Jjz)|2Ba2z-RoCLlIoC3ZCyacoZ z9Y74|1iFB3;52XsI18KuUIu!AUf?{?2RNRnj{DCSslNjyN%Veh_2eYG* zuF*s+Gn!1qt`1Mis>)U?y8&(dm`e#*=J@@tS@bKWFWPZ+8%a!rEGz0Z{+EPLLK z{*$jDpFzT0_POGtXx493oc>RGBaE^W+&L&2H(bfuCN-}S@Jqi)_k_hST`9jsWe9wO z%uR;5xWaYLi<|M!Ld6Jo^-8mEe^Rzi__^sKmiC!+dM3G44nG+WG?GO6{Wg7hd^yVe!ky%=_KO!93zifp{+bS#N;r zI6603*BcRjxe~HRVev~J`{<3tU4aARhVxnUwpQYZcNN_Ac&|Q?KZ94eRb0QdYONK? ztBNE(h`+;M>61odNIT?f((ydw*L+&+;qYti{Zz;)T8r-hF|1?)>o(7bI*@}5(wO7T z5Kj?!B3%@L7V#y51wM~{8sturo8rBEw=A+8!4hXp+b*t&f=ub|Ds3g%n&AkRyN&PN z@IDRKCrsbcLTT^1@dBp}Cvs5XR)Xwjd2#Eg{C%U(>PPy<^1*7Qao$MhMxat!TM{82 zNi)c6%>iT39f3>Io->9Q5!O_m`%y!81P>&Nry@?qxayaA>Kye5wdZ~90brF(rx?kY z!Rc`8xm^C_e@hpH)j)ffA^);&PXCwV7pEm_LA^xtss;Q_ic95_hFyPZzgZhBq-+)!FK#fZU2l)R zwoBfDDUpQkHx!fVT)C<<@m z`UXEgM90dvsM8|`L0wd|Kg_SX`O~jO#7%7LDB98HMI2u1KU=IC(h1`ombNLCZnfR) zDeth7w4E^7g_Z0vYCL0kB8u9Q-VHFMjn5W?+ZW-+7+i85YzMP4%9zA`l@liGv9k0O z?PsI3D6`zo+LPSOGL{&$kMmA5A^lXn=Mw?hihH{s`>_4RZ~pqsyMMlYciRsyZRzo{ zzdhIf!uPJd{LUY5eSKizXSeB$68DadJ@x*=`#XEy{{HBXzq|9^v1%=qS(0ppnZFAW z`OhQ9d!8~gA)mo{&$D3fczl`$yyo_(bkSUrlH&cS=<{ks^@#sWjoZ?mCC3#-{i>iRC)wDOa1E6N;Rp)XnzMkkK*@_-xX zyyZ$SD^J`iweds9Nxee;qsiH`u=eLUIvw&mjv+tNWjPZ=C6VQFDr!^U@(;3UVetq3 z4`&Ay_e?{JqFBYJ)>_Elsa=F$NmJogsomOs-9z=B-|!;qS6GKxOIq`e9w(>u`V;>p zyUMwT#UC918Fa^}!JTHzDX8g&8rcnTp<2{Yq{`*L%-}*DW~%Hx!4-gd?y?{&VAS*~U=lnuMRYMQq?-PP!oAG=;G zMP(Z;@9Mo(=eVLPyW+LeVIx3E%oVhOqVdYKYn|O$^Ry2c?Ky93nf87(qB-vZqm)*i zFL)iw+^j{}ciO1jOOn=Di}WUZyXi8v&L>jbv-TyuvOlLRg$94 z%KVpC*SJ6ZAnj>ox~*d)&3c`fN0D`wID4rzw!hxJ!~@C^mktpDD+boiMJs&ps_q6| zzAKHa-RkA-24y3yZHexg^reaX)t-s;^{%<;Y%-Ud$fR@HkMGZBt|dqEiGgG;Gm{-j z=AwL^6T(d=(=(}*j&e|@3K~_jwv6(frj<;K+`x$rxvjO@o$rjMF7^oPe>c!|sHW=~f7qSZ%DU$EOzMnwp5zlN3Y9M}{Ug6dUZ%23E;C+bc5?pG zokm6JAm9xGA0?yKdNR$@Tk3G!fciH`n8l3Rw5e?!Bvgu9Z;M9?_mf&V%A13{ld5e8 zVx+@$77g~W5MKpGb!1{(x+)~3E zW=^)=F)_SjHav+bn^rvotu`Xq3xyEa8+n>$pB-sM3ga zQgi)Mue_A@IvbJHXB%uEEsMOm49EI7AJom++0*RiGzVm;nKQhd_=+9uRq2});yygb z0Tf`2_wLQ>ME~==pC@)snm%k+SSM~2ORJxLGE42W>Bh?)puI5J-7vcs)(j;}i+ED4 z=*+I2ZMX9)-J;zznWiL|wda=RT|0D5GZK9p=6QhcIw@rH8OmLhpApjepW+!IWtZIv zp#-Yloe+wb<$o=nlOnaxS~HH+bkvWuHAdFC;AXLpdJ zW-lwv*8^}{?tF6!KBUV0teOQ#r60FnFdH$@Xt3A8x$9mdz zTI$SqcJ-XqitH=QSZS-$Q=yW3X)5g=>QtFd$(FA63EoxKmGyLF98Dn&D7_Iydh8yh zPQIl0lSLDVR{eL&N@?f=#wtlmx0vwd2->=o5_@*N5*@<@I@SiyoTZj7vNqewv37m! znYQ97<4WV{ER5&=Enj`UN_*J7Xq`c|=i(|+wUYKY3{{qMl_=4FSv@$pTPpYQ0{*oj zZ*FC{-NkaAIo+Zhf9aZX@~PFV%u4y!3FKG*9ix+x(!wLuYODSKrCw*W#Ou__Fv8Mb~DEM3T_e9ydDE~>PSTbt% zl9ktX{9Eg~c`1*b_Ljz0(RlwCwB=655}e1PrY+u8*SSG%tgcpDI%94{25DS7_F!uT zzAv>NLE2YCSC_ByAU&(;vnWqpDz#SA1nFBZwxzz-bfc2?EJ8fiMGhE7JS_i*9QY4` Cl)A + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {158B95C7-4186-4C5C-A301-596B68FF5801} + Exe + FunWithLinqExpressions.Program + FunWithLinqExpressions + FunWithLinqExpressions + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + FunWithLinqExpressions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + FunWithLinqExpressions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.Designer.vb b/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.myapp b/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/AssemblyInfo.vb b/Code/Chapter 14/FunWithLinqExpressions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..507b1b0 --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.Designer.vb b/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9f30219 --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithLinqExpressions.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.resx b/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.Designer.vb b/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6159ca6 --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithLinqExpressions.My.MySettings + Get + Return Global.FunWithLinqExpressions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.settings b/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/FunWithLinqExpressions/Program.vb b/Code/Chapter 14/FunWithLinqExpressions/Program.vb new file mode 100644 index 0000000..d0ac894 --- /dev/null +++ b/Code/Chapter 14/FunWithLinqExpressions/Program.vb @@ -0,0 +1,179 @@ + +#Region "Car class for testing purposes" +Public Class Car + Public PetName As String = String.Empty + Public Color As String = String.Empty + Public Speed As Integer + Public Make As String = String.Empty + + Public Overloads Overrides Function ToString() As String + Return String.Format("Make={0}, Color={1}, Speed={2}, PetName={3}", Make, Color, Speed, PetName) + End Function +End Class +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Query Expressions *****") + + ' This array will be the basis of our testing... + Dim myCars As Car() = {New Car With _ + {.PetName = "Henry", .Color = "Silver", _ + .Speed = 100, .Make = "BMW"}, _ + New Car With {.PetName = "Daisy", .Color = "Tan", .Speed = 90, .Make = "BMW"}, _ + New Car With {.PetName = "Mary", .Color = "Black", .Speed = 55, .Make = "VW"}, _ + New Car With {.PetName = "Clunker", _ + .Color = "Rust", .Speed = 5, .Make = "Yugo"}, _ + New Car With {.PetName = "Hank", .Color = "Tan", .Speed = 0, .Make = "Ford"}, _ + New Car With {.PetName = "Sven", .Color = "White", .Speed = 90, .Make = "Ford"}, _ + New Car With {.PetName = "Mary", .Color = "Black", .Speed = 55, .Make = "VW"}, _ + New Car With {.PetName = "Zippy", .Color = "Yellow", .Speed = 55, .Make = "VW"}, _ + New Car With {.PetName = "Melvin", .Color = "White", _ + .Speed = 43, .Make = "Ford"}} + + ' Comment / uncomment to test. + 'BasicSelections(myCars) + 'GetSubsets(myCars) + 'GetProjection(myCars) + 'ReversedSelection(myCars) + 'OrderedResults(myCars) + GetDiff() + + Console.ReadLine() + End Sub + + +#Region "Select everything" + Sub BasicSelections(ByVal myCars As Car()) + + ' Get all cars. Similar to Select * in SQL. + Console.WriteLine(vbLf + "All Cars:") + Dim allCars = From c In myCars Select c + For Each c In allCars + Console.WriteLine("Car: {0}", c) + Next + Console.WriteLine() + + ' Get only the pet names. + Console.WriteLine(vbLf + "All Pet Names:") + Dim allNames = From c In myCars Select c.PetName + For Each n In allNames + Console.WriteLine("Pet Name: {0}", n) + Next + Console.WriteLine() + + ' Now get only distinct makes. + Console.WriteLine(vbLf + "All Distinct Makes:") + Dim makes = From c In myCars Select c.Make Distinct + For Each m In makes + Console.WriteLine("Make: {0}", m) + Next + Console.WriteLine() + + End Sub +#End Region + +#Region "Get subsets" + Sub GetSubsets(ByVal myCars As Car()) + ' Now get only the BMWs. + Console.WriteLine("Only BMWs:") + Dim onlyBMWs = From c In myCars Where c.Make = "BMW" Select c + + For Each n In onlyBMWs + Console.WriteLine("Name: {0}", n) + Next + + ' Get BMWs going at least 100 mph. + Dim onlyFastBMWs = From c In myCars _ + Where c.Make = "BMW" And c.Speed >= 100 _ + Select c + + For Each c As Car In onlyFastBMWs + Console.WriteLine("{0} is going {1} MPH", c.PetName, c.Speed) + Next + End Sub +#End Region + +#Region "Get count" + Sub GetCount() + Dim currentVideoGames() As String = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + ' Get count from the query. + Dim numb As Integer = (From g In currentVideoGames _ + Where g.Length > 6 _ + Order By g _ + Select g).Count() + + ' numb is the value 5. + Console.WriteLine("{0} items honor the LINQ query.", numb) + End Sub +#End Region + +#Region "Get projection" + Sub GetProjection(ByVal myCars As Car()) + ' Now get structured data which only accounts for the + ' Make and Color of each item. + Console.WriteLine(vbLf + "Makes and Color:") + + Dim makesColors = From c In myCars Select New With {c.Make, c.Color} + + For Each n In makesColors + Console.WriteLine("Name: {0}", n) + Next + End Sub +#End Region + +#Region "Reverse selections" + Sub ReversedSelection(ByVal myCars As Car()) + ' Get everything in reverse. + Console.WriteLine("All cars in reverse:") + Dim subset = (From c In myCars Select c).Reverse() + For Each c As Car In subset + Console.WriteLine("{0} is going {1} MPH", c.PetName, c.Speed) + Next + End Sub +#End Region + +#Region "Ordering results" + Sub OrderedResults(ByVal myCars As Car()) + ' Order all the cars by PetName. + Dim subset = From c In myCars Order By c.PetName Select c + + Console.WriteLine("Ordered by PetName:") + For Each c As Car In subset + Console.WriteLine("Car {0}", c) + Next + + ' Now find the cars that are going less than 55 mph, + ' and order by descending PetName + subset = From c In myCars _ + Where c.Speed > 55 Order By c.PetName Descending Select c + Console.WriteLine(vbLf + "Cars going faster than 55, ordered by PetName:") + For Each c As Car In subset + Console.WriteLine("Car {0}", c) + Next + End Sub +#End Region + +#Region "Get differences" + Sub GetDiff() + ' Two lists of strings. + Dim myCars As String() = {"Yugo", "Aztec", "BMW"} + Dim yourCars As String() = {"BMW", "Saab", "Aztec"} + + ' Find the differences. + Dim carDiff = (From c In myCars Select c) _ + .Except(From c2 In yourCars Select c2) + + Console.WriteLine(vbLf + "Here is what you don't have, but I do:") + For Each s As String In carDiff + ' Prints Yugo. + Console.WriteLine(s) + Next + End Sub +#End Region + +End Module diff --git a/Code/Chapter 14/LinqOverArray/LinqOverArray.sln b/Code/Chapter 14/LinqOverArray/LinqOverArray.sln new file mode 100644 index 0000000..8108b04 --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/LinqOverArray.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqOverArray", "LinqOverArray.vbproj", "{E7B51EFA-66CF-43D4-85CF-95301EF2C2A9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E7B51EFA-66CF-43D4-85CF-95301EF2C2A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E7B51EFA-66CF-43D4-85CF-95301EF2C2A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E7B51EFA-66CF-43D4-85CF-95301EF2C2A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E7B51EFA-66CF-43D4-85CF-95301EF2C2A9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/LinqOverArray/LinqOverArray.suo b/Code/Chapter 14/LinqOverArray/LinqOverArray.suo new file mode 100644 index 0000000000000000000000000000000000000000..a91dc81f88ba714216b46e0a828f1d78a6cc8e12 GIT binary patch literal 15360 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E7B51EFA-66CF-43D4-85CF-95301EF2C2A9} + Exe + LinqOverArray.Program + LinqOverArray + LinqOverArray + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqOverArray.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqOverArray.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverArray/My Project/Application.Designer.vb b/Code/Chapter 14/LinqOverArray/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/LinqOverArray/My Project/Application.myapp b/Code/Chapter 14/LinqOverArray/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/LinqOverArray/My Project/AssemblyInfo.vb b/Code/Chapter 14/LinqOverArray/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3262b7e --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/LinqOverArray/My Project/Resources.Designer.vb b/Code/Chapter 14/LinqOverArray/My Project/Resources.Designer.vb new file mode 100644 index 0000000..0e4d7a7 --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqOverArray.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverArray/My Project/Resources.resx b/Code/Chapter 14/LinqOverArray/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverArray/My Project/Settings.Designer.vb b/Code/Chapter 14/LinqOverArray/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a4287e3 --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqOverArray.My.MySettings + Get + Return Global.LinqOverArray.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverArray/My Project/Settings.settings b/Code/Chapter 14/LinqOverArray/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/LinqOverArray/Program.vb b/Code/Chapter 14/LinqOverArray/Program.vb new file mode 100644 index 0000000..44df0f2 --- /dev/null +++ b/Code/Chapter 14/LinqOverArray/Program.vb @@ -0,0 +1,79 @@ +Option Explicit On +Option Strict On + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with LINQ *****") + 'QueryOverStrings() + Console.WriteLine() + QueryOverInts() + Console.ReadLine() + End Sub + +#Region "Simple query over strings and integers" + Sub QueryOverStrings() + ' Assume we have an array of strings. + ' that have more than 6 letters. + Dim currentVideoGames As String() = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + Dim subset As IEnumerable(Of String) = From game In currentVideoGames _ + Where game.Length > 6 Order By game Select game + ReflectOverQueryResults(subset) + + ' Print out the results. + For Each s As String In subset + Console.WriteLine("Item: {0}", s) + Next + Console.WriteLine() + End Sub + + Sub QueryOverInts() + Dim numbers() As Integer = {10, 20, 30, 40, 1, 2, 3, 8} + + ' Only print items less than 10. + ' (note use of implicit typing) + Dim subset = From i In numbers Where i < 10 Select i + + ' LINQ statment evaluated here! + For Each i In subset + Console.WriteLine("{0} < 10", i) + Next + + ' Change some data in the array. + numbers(0) = 4 + Console.WriteLine() + + ' Evaluate again. + For Each i In subset + Console.WriteLine("{0} < 10", i) + Next + ReflectOverQueryResults(subset) + End Sub + +#End Region + +#Region "Immediate execution" + Sub ImmediateExecution() + Dim numbers() As Integer = {10, 20, 30, 40, 1, 2, 3, 8} + + ' Get data RIGHT NOW as Integer(). + Dim subsetAsIntArray() As Integer = _ + (From i In numbers Where i < 10 Select i).ToArray() + + ' Get data RIGHT NOW as List(Of Integer). + Dim subsetAsListOfInts As List(Of Integer) = _ + (From i In numbers Where i < 10 Select i).ToList() + End Sub +#End Region + + Sub ReflectOverQueryResults(ByVal resultSet As Object) + Console.WriteLine("***** Info about your query *****") + Console.WriteLine("resultSet is of type: {0}", resultSet.GetType().Name) + Console.WriteLine("resultSet location: {0}", resultSet.GetType().Assembly) + Console.WriteLine() + End Sub + +End Module diff --git a/Code/Chapter 14/LinqOverArrayList/Car.vb b/Code/Chapter 14/LinqOverArrayList/Car.vb new file mode 100644 index 0000000..610f10a --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/Car.vb @@ -0,0 +1,6 @@ +Public Class Car + Public PetName As String = String.Empty + Public Color As String = String.Empty + Public Speed As Integer + Public Make As String = String.Empty +End Class diff --git a/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.sln b/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.sln new file mode 100644 index 0000000..0dd293a --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqOverArrayList", "LinqOverArrayList.vbproj", "{F9E03354-E667-40C4-8869-8AD9084DB16A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F9E03354-E667-40C4-8869-8AD9084DB16A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9E03354-E667-40C4-8869-8AD9084DB16A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9E03354-E667-40C4-8869-8AD9084DB16A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9E03354-E667-40C4-8869-8AD9084DB16A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.suo b/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.suo new file mode 100644 index 0000000000000000000000000000000000000000..4f7955b0f5b12feeaca5243e391f57edb16f576a GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.vbproj b/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.vbproj new file mode 100644 index 0000000..843d0ab --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/LinqOverArrayList.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F9E03354-E667-40C4-8869-8AD9084DB16A} + Exe + LinqOverArrayList.Program + LinqOverArrayList + LinqOverArrayList + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + LinqOverArrayList.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + pdbonly + false + true + true + bin\Release\ + LinqOverArrayList.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Application.Designer.vb b/Code/Chapter 14/LinqOverArrayList/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Application.myapp b/Code/Chapter 14/LinqOverArrayList/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/AssemblyInfo.vb b/Code/Chapter 14/LinqOverArrayList/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..0c80e61 --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Resources.Designer.vb b/Code/Chapter 14/LinqOverArrayList/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f4d9bb7 --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqOverArrayList.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Resources.resx b/Code/Chapter 14/LinqOverArrayList/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Settings.Designer.vb b/Code/Chapter 14/LinqOverArrayList/My Project/Settings.Designer.vb new file mode 100644 index 0000000..bf77ad8 --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqOverArrayList.My.MySettings + Get + Return Global.LinqOverArrayList.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverArrayList/My Project/Settings.settings b/Code/Chapter 14/LinqOverArrayList/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/LinqOverArrayList/Program.vb b/Code/Chapter 14/LinqOverArrayList/Program.vb new file mode 100644 index 0000000..895911f --- /dev/null +++ b/Code/Chapter 14/LinqOverArrayList/Program.vb @@ -0,0 +1,44 @@ +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** LINQ over ArrayList *****") + + Dim myCars As New ArrayList() + myCars.Add(New Car With {.PetName = "Henry", .Color = "Silver", _ + .Speed = 100, .Make = "BMW"}) + myCars.Add(New Car With {.PetName = "Daisy", .Color = "Tan", _ + .Speed = 90, .Make = "BMW"}) + myCars.Add(New Car With {.PetName = "Mary", .Color = "Black", _ + .Speed = 55, .Make = "VW"}) + myCars.Add(New Car With {.PetName = "Clunker", .Color = "Rust", _ + .Speed = 5, .Make = "Yugo"}) + myCars.Add(New Car With {.PetName = "Melvin", .Color = "White", _ + .Speed = 43, .Make = "Ford"}) + + ' Transform ArrayList into an IEnumerable-compatible type. + ' Could also use implicit typing here. + Dim myCarsEnum As IEnumerable(Of Car) = myCars.OfType(Of Car)() + + ' Create a query expression. + Dim fastCars = From c In myCarsEnum Where c.Speed > 55 Select c + + For Each car In fastCars + Console.WriteLine("{0} is going too fast!", car.PetName) + Next + + ExtractNumericalData() + End Sub + + Sub ExtractNumericalData() + ' Extract the ints from the ArrayList. + Dim myStuff As New ArrayList() + myStuff.AddRange(New Object() {10, 400, 8, False, New Car(), "string data"}) + Dim myInts As IEnumerable(Of Integer) = myStuff.OfType(Of Integer)() + + ' Prints out 10, 400, and 8. + For Each i As Integer In myInts + Console.WriteLine("Int value: {0}", i) + Next + End Sub +End Module diff --git a/Code/Chapter 14/LinqOverCustomObjects/Car.vb b/Code/Chapter 14/LinqOverCustomObjects/Car.vb new file mode 100644 index 0000000..610f10a --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/Car.vb @@ -0,0 +1,6 @@ +Public Class Car + Public PetName As String = String.Empty + Public Color As String = String.Empty + Public Speed As Integer + Public Make As String = String.Empty +End Class diff --git a/Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.sln b/Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.sln new file mode 100644 index 0000000..dbaf08d --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqOverCustomObjects", "LinqOverCustomObjects.vbproj", "{47B8A7A5-0D48-4909-908E-D38895D575B4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {47B8A7A5-0D48-4909-908E-D38895D575B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47B8A7A5-0D48-4909-908E-D38895D575B4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47B8A7A5-0D48-4909-908E-D38895D575B4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47B8A7A5-0D48-4909-908E-D38895D575B4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.suo b/Code/Chapter 14/LinqOverCustomObjects/LinqOverCustomObjects.suo new file mode 100644 index 0000000000000000000000000000000000000000..5147cff0e8c8f0fb982be89e5b2a31d2c91ba8e5 GIT binary patch literal 17408 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 e=J~K~+tz + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {47B8A7A5-0D48-4909-908E-D38895D575B4} + Exe + LinqOverCustomObjects.Program + LinqOverCustomObjects + LinqOverCustomObjects + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqOverCustomObjects.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqOverCustomObjects.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.Designer.vb b/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.myapp b/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/AssemblyInfo.vb b/Code/Chapter 14/LinqOverCustomObjects/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..40c14f6 --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.Designer.vb b/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.Designer.vb new file mode 100644 index 0000000..0cbfc7b --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqOverCustomObjects.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.resx b/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.Designer.vb b/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.Designer.vb new file mode 100644 index 0000000..712e8be --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqOverCustomObjects.My.MySettings + Get + Return Global.LinqOverCustomObjects.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.settings b/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/LinqOverCustomObjects/Program.vb b/Code/Chapter 14/LinqOverCustomObjects/Program.vb new file mode 100644 index 0000000..793a4c3 --- /dev/null +++ b/Code/Chapter 14/LinqOverCustomObjects/Program.vb @@ -0,0 +1,44 @@ +Module Program + + Sub Main() + Console.WriteLine("***** More fun with LINQ Expressions *****") + + ' Make a List of Car objects. + Dim myCars As New List(Of Car)() + myCars.Add(New Car With {.PetName = "Henry", .Color = "Silver", _ + .Speed = 100, .Make = "BMW"}) + myCars.Add(New Car With {.PetName = "Daisy", .Color = "Tan", _ + .Speed = 90, .Make = "BMW"}) + myCars.Add(New Car With {.PetName = "Mary", .Color = "Black", _ + .Speed = 55, .Make = "VW"}) + myCars.Add(New Car With {.PetName = "Clunker", .Color = "Rust", _ + .Speed = 5, .Make = "Yugo"}) + myCars.Add(New Car With {.PetName = "Melvin", .Color = "White", _ + .Speed = 43, .Make = "Ford"}) + + GetFastCars(myCars) + Console.WriteLine() + + GetFastBMWs(myCars) + End Sub + + Sub GetFastCars(ByVal myCars As List(Of Car)) + ' Create a query expression. + Dim fastCars = From c In myCars Where c.Speed > 55 Select c + + For Each car In fastCars + Console.WriteLine("{0} is going too fast!", car.PetName) + Next + + End Sub + + Sub GetFastBMWs(ByVal myCars As List(Of Car)) + ' Create a query expression. + Dim fastCars = From c In myCars Where _ + c.Speed > 90 And c.Make = "BMW" Select c + For Each car In fastCars + Console.WriteLine("{0} is going too fast!", car.PetName) + Next + End Sub + +End Module diff --git a/Code/Chapter 14/LinqRetValues/LinqRetValues.sln b/Code/Chapter 14/LinqRetValues/LinqRetValues.sln new file mode 100644 index 0000000..f43f227 --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/LinqRetValues.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqRetValues", "LinqRetValues.vbproj", "{AFCF0443-659B-4B27-A597-D2E31243DC53}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AFCF0443-659B-4B27-A597-D2E31243DC53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFCF0443-659B-4B27-A597-D2E31243DC53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFCF0443-659B-4B27-A597-D2E31243DC53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFCF0443-659B-4B27-A597-D2E31243DC53}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/LinqRetValues/LinqRetValues.suo b/Code/Chapter 14/LinqRetValues/LinqRetValues.suo new file mode 100644 index 0000000000000000000000000000000000000000..6b96fc9089e084b9b16854e4a173af8eebcd1faa GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 14/LinqRetValues/LinqRetValues.vbproj b/Code/Chapter 14/LinqRetValues/LinqRetValues.vbproj new file mode 100644 index 0000000..f1fb3cb --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/LinqRetValues.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {AFCF0443-659B-4B27-A597-D2E31243DC53} + Exe + LinqRetValues.Program + LinqRetValues + LinqRetValues + 512 + Console + v3.5 + On + Binary + On + On + + + true + full + true + true + bin\Debug\ + LinqRetValues.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + pdbonly + false + true + true + bin\Release\ + LinqRetValues.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + true + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqRetValues/My Project/Application.Designer.vb b/Code/Chapter 14/LinqRetValues/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/LinqRetValues/My Project/Application.myapp b/Code/Chapter 14/LinqRetValues/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/LinqRetValues/My Project/AssemblyInfo.vb b/Code/Chapter 14/LinqRetValues/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1e12d41 --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/LinqRetValues/My Project/Resources.Designer.vb b/Code/Chapter 14/LinqRetValues/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2b53089 --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqRetValues.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqRetValues/My Project/Resources.resx b/Code/Chapter 14/LinqRetValues/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqRetValues/My Project/Settings.Designer.vb b/Code/Chapter 14/LinqRetValues/My Project/Settings.Designer.vb new file mode 100644 index 0000000..312d514 --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqRetValues.My.MySettings + Get + Return Global.LinqRetValues.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqRetValues/My Project/Settings.settings b/Code/Chapter 14/LinqRetValues/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/LinqRetValues/Program.vb b/Code/Chapter 14/LinqRetValues/Program.vb new file mode 100644 index 0000000..612368d --- /dev/null +++ b/Code/Chapter 14/LinqRetValues/Program.vb @@ -0,0 +1,60 @@ +#Region "Car class for testing" +Public Class Car + Public PetName As String = String.Empty + Public Color As String = String.Empty + Public Speed As Integer + Public Make As String = String.Empty + + Public Overloads Overrides Function ToString() As String + Return String.Format("Make={0}, Color={1}, Speed={2}, PetName={3}", _ + Make, Color, Speed, PetName) + End Function +End Class +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** LINQ Transformations *****" + vbLf) + Dim subset As IEnumerable(Of String) = GetStringSubset() + For Each item As String In subset + Console.WriteLine(item) + Next + + Dim objs As Array = GetProjectedSubset() + For Each o As Object In objs + Console.WriteLine(o) ' Calls ToString() on each anonymous object. + Next + + Console.ReadLine() + End Sub + + Function GetStringSubset() As IEnumerable(Of String) + Dim currentVideoGames() As String = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + ' Note subset is an IEnumerable(OfString) compatable object. + Dim subset As IEnumerable(Of String) = _ + From g In currentVideoGames Where g.Length > 6 Order By g Select g + Return subset + End Function + + ' Return value is now an Array. + Public Function GetProjectedSubset() As Array + ' This array will be the basis of our testing... + Dim myCars As Car() = {New Car With _ + {.PetName = "Henry", .Color = "Silver", _ + .Speed = 100, .Make = "BMW"}, _ + New Car With {.PetName = "Daisy", .Color = "Tan", .Speed = 90, .Make = "BMW"}, _ + New Car With {.PetName = "Zippy", .Color = "Yellow", .Speed = 55, .Make = "VW"}} + + Dim makesColors = From c In myCars Select New With {c.Make, c.Color} + + ' Map set of anonymous objects to an Array object. + ' Here were are relying on type inference of the generic + ' type parameter, as we don't know the type of type! + Return makesColors.ToArray() + End Function + +End Module diff --git a/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.sln b/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.sln new file mode 100644 index 0000000..3b4945c --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqUsingEnumerable", "LinqUsingEnumerable.vbproj", "{47A99220-B2FC-4C96-B60C-26156B6F0F9A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {47A99220-B2FC-4C96-B60C-26156B6F0F9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47A99220-B2FC-4C96-B60C-26156B6F0F9A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {47A99220-B2FC-4C96-B60C-26156B6F0F9A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47A99220-B2FC-4C96-B60C-26156B6F0F9A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.suo b/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.suo new file mode 100644 index 0000000000000000000000000000000000000000..6b6f9390379e651c285e95ded787d4677428a0db GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.vbproj b/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.vbproj new file mode 100644 index 0000000..3e0bd83 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/LinqUsingEnumerable.vbproj @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {47A99220-B2FC-4C96-B60C-26156B6F0F9A} + Exe + LinqUsingEnumerable.Program + LinqUsingEnumerable + LinqUsingEnumerable + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqUsingEnumerable.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqUsingEnumerable.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.Designer.vb b/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.myapp b/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/AssemblyInfo.vb b/Code/Chapter 14/LinqUsingEnumerable/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..17fe2be --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.Designer.vb b/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1d5cc60 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqUsingEnumerable.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.resx b/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.Designer.vb b/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.Designer.vb new file mode 100644 index 0000000..47b9461 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqUsingEnumerable.My.MySettings + Get + Return Global.LinqUsingEnumerable.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.settings b/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 14/LinqUsingEnumerable/Program.vb b/Code/Chapter 14/LinqUsingEnumerable/Program.vb new file mode 100644 index 0000000..925ab87 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/Program.vb @@ -0,0 +1,58 @@ +Module Program + + ' Comment / uncomment to see results. + Sub Main() + Console.WriteLine("***** Fun with LINQ *****") + QueryStringArrayWithOperators() + QueryStringsWithEnumerableAndLambdas() + VeryComplexQueryExpression.QueryStringsWithRawDelegates() + + Console.ReadLine() + End Sub + +#Region "LINQ query with operators" + Sub QueryStringArrayWithOperators() + Console.WriteLine("***** Using LINQ Query Operators *****") + + Dim currentVideoGames As String() = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + ' Build a LINQ query with VB LINQ operators. + Dim subset = From g In currentVideoGames _ + Where g.Length > 6 Order By g Select g + + For Each s As String In subset + Console.WriteLine("Item: {0}", s) + Next + Console.WriteLine() + End Sub +#End Region + +#Region "LINQ query with Enumerable / Lambdas" + Sub QueryStringsWithEnumerableAndLambdas() + + Console.WriteLine("***** Using Enumerable / Lambda Expressions *****") + + Dim currentVideoGames() As String = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + ' Build a query expression using extension methods + ' granted to the Array via the Enumerable type. + 'Dim subset = currentVideoGames.Where(Function(game) game.Length > 6). _ + 'OrderBy(Function(game) game).Select(Function(game) game) + + Dim subset = Enumerable.Where(currentVideoGames, Function(game) game.Length > 6). _ + OrderBy(Function(game) game).Select(Function(game) game) + + ' Print out the results. + For Each game In subset + Console.WriteLine("Item: {0}", game) + Next + Console.WriteLine() + End Sub + +#End Region + +End Module diff --git a/Code/Chapter 14/LinqUsingEnumerable/VeryComplexQuery.vb b/Code/Chapter 14/LinqUsingEnumerable/VeryComplexQuery.vb new file mode 100644 index 0000000..b2beee7 --- /dev/null +++ b/Code/Chapter 14/LinqUsingEnumerable/VeryComplexQuery.vb @@ -0,0 +1,30 @@ +Class VeryComplexQueryExpression + Public Shared Sub QueryStringsWithRawDelegates() + Console.WriteLine("***** Using Raw Delegates *****") + + Dim currentVideoGames As String() = {"Morrowind", "BioShock", _ + "Half Life 2: Episode 1", "The Darkness", _ + "Daxter", "System Shock 2"} + + ' Build the necessary Func<> delegates using anonymous methods. + Dim searchFilter As New Func(Of String, Boolean)(AddressOf Filter) + Dim itemToProcess As New Func(Of String, String)(AddressOf ProcessItem) + + ' Pass the delegates into the methods of Enumerable. + Dim subset = currentVideoGames.Where(searchFilter).OrderBy(itemToProcess).Select(itemToProcess) + + ' Print out the results. + For Each game In subset + Console.WriteLine("Item: {0}", game) + Next + Console.WriteLine() + End Sub + + ' Delegate targets. + Public Shared Function Filter(ByVal str As String) As Boolean + Return str.Length > 6 + End Function + Public Shared Function ProcessItem(ByVal str As String) As String + Return str + End Function +End Class diff --git a/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.sln b/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.sln new file mode 100644 index 0000000..8663614 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AppConfigReaderApp", "AppConfigReaderApp.vbproj", "{5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.suo b/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..a9790bc37bbb65b9066b551ef182e79d239e9d4d GIT binary patch literal 15872 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 x + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {5F0F8BAA-372D-42B8-8201-D9FC7C1CAA1A} + Exe + AppConfigReaderApp.Program + AppConfigReaderApp + AppConfigReaderApp + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + AppConfigReaderApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AppConfigReaderApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.vbproj.user b/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/AppConfigReaderApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Application.Designer.vb b/Code/Chapter 15/AppConfigReaderApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Application.myapp b/Code/Chapter 15/AppConfigReaderApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/AssemblyInfo.vb b/Code/Chapter 15/AppConfigReaderApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d8ae170 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.Designer.vb b/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..abf2ae7 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AppConfigReaderApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.resx b/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.Designer.vb b/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..0550c64 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AppConfigReaderApp.My.MySettings + Get + Return Global.AppConfigReaderApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.settings b/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/AppConfigReaderApp/Program.vb b/Code/Chapter 15/AppConfigReaderApp/Program.vb new file mode 100644 index 0000000..427c0b6 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/Program.vb @@ -0,0 +1,18 @@ +Option Explicit On +Option Strict On + +Imports System.Configuration + +Module Program + Sub Main() + Dim ar As New AppSettingsReader() + Console.WriteLine(ar.GetValue("appConStr", GetType(String))) + Dim numbOfTimes As Integer = CType(ar.GetValue("timesToSayHello", _ + GetType(Integer)), Integer) + + For i As Integer = 0 To numbOfTimes + Console.WriteLine("Yo!") + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 15/AppConfigReaderApp/app.config b/Code/Chapter 15/AppConfigReaderApp/app.config new file mode 100644 index 0000000..1412ee5 --- /dev/null +++ b/Code/Chapter 15/AppConfigReaderApp/app.config @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj new file mode 100644 index 0000000..0a98dfa --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj @@ -0,0 +1,93 @@ + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {CB5C8E4D-2CA5-4D81-B508-03A715EB41F7} + Exe + Properties + CSharpCarClient + CSharpCarClient + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + ..\CarLibrary\bin\Debug\CarLibrary.dll + + + + 3.5 + + + + + + + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj.user b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.csproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 15/CSharpCarClient/CSharpCarClient.sln b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.sln new file mode 100644 index 0000000..d9a8fc7 --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpCarClient", "CSharpCarClient.csproj", "{CB5C8E4D-2CA5-4D81-B508-03A715EB41F7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CB5C8E4D-2CA5-4D81-B508-03A715EB41F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB5C8E4D-2CA5-4D81-B508-03A715EB41F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB5C8E4D-2CA5-4D81-B508-03A715EB41F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB5C8E4D-2CA5-4D81-B508-03A715EB41F7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/CSharpCarClient/CSharpCarClient.suo b/Code/Chapter 15/CSharpCarClient/CSharpCarClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..606ed1bbbf914e1431eb18678c5aba90ecef2b27 GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/CSharpCarClient/PerformanceCar.cs b/Code/Chapter 15/CSharpCarClient/PerformanceCar.cs new file mode 100644 index 0000000..3eaaea6 --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/PerformanceCar.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using CarLibrary; + +namespace CSharpCarClient +{ + public class PerformanceCar : SportsCar + { + // This C# type is deriving from the VB 2005 SportsCar. + public override void TurboBoost() + { + Console.WriteLine("Zero to 60 in a cool 4.8 seconds..."); + } + } +} diff --git a/Code/Chapter 15/CSharpCarClient/Program.cs b/Code/Chapter 15/CSharpCarClient/Program.cs new file mode 100644 index 0000000..5bdcb0d --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/Program.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Text; +using CarLibrary; + +namespace CSharpCarClient +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("***** Fun with C# *****"); + + // Make a sports car. + SportsCar viper = new SportsCar("Viper", 240, 40); + viper.TurboBoost(); + + // Make a mini van. + MiniVan mv = new MiniVan(); + mv.TurboBoost(); + + // Make a performance car. + PerformanceCar dreamCar = new PerformanceCar(); + // Inherited property. + dreamCar.PetName = "Hank"; + dreamCar.TurboBoost(); + Console.ReadLine(); + } + } +} diff --git a/Code/Chapter 15/CSharpCarClient/Properties/AssemblyInfo.cs b/Code/Chapter 15/CSharpCarClient/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..ce012b9 --- /dev/null +++ b/Code/Chapter 15/CSharpCarClient/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CSharpCarClient")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CSharpCarClient")] +[assembly: AssemblyCopyright("Copyright © 2005")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("63a00b4b-bc35-4865-ad30-8e790538454c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Code/Chapter 15/CarLibrary/Car.vb b/Code/Chapter 15/CarLibrary/Car.vb new file mode 100644 index 0000000..fd2a3f4 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/Car.vb @@ -0,0 +1,77 @@ +Option Explicit On +Option Strict On + +Imports System.Windows.Forms + +' Represents the state of the engine. +Public Enum EngineState + engineAlive + engineDead +End Enum + +' Holds source of music. +Public Enum MusicMedia + musicCd + musicTape + musicRadio + musicMp3 +End Enum + +#Region "Car base class" +' The abstract base class in the hierarchy. +Public MustInherit Class Car + Protected name As String + Protected speed As Short + Protected max_speed As Short + Protected egnState As EngineState = EngineState.engineAlive + + Public MustOverride Sub TurboBoost() + Public Sub TurnOnRadio(ByVal musicOn As Boolean, ByVal mm As MusicMedia) + If musicOn Then + MessageBox.Show(String.Format("Jamming {0} ", mm)) + Else + MessageBox.Show("Quiet time...") + End If + End Sub + Public Sub New() + MessageBox.Show("Car 2.0.0.0") + End Sub + + Public Sub New(ByVal carName As String, ByVal max As Short, ByVal curr As Short) + MessageBox.Show("Car 2.0.0.0") + name = carName + max_speed = max + speed = curr + End Sub + + Public Property PetName() As String + Get + Return name + End Get + Set(ByVal value As String) + name = value + End Set + End Property + + Public Property CurrSpeed() As Short + Get + Return speed + End Get + Set(ByVal value As Short) + speed = value + End Set + End Property + + Public ReadOnly Property MaxSpeed() As Short + Get + Return max_speed + End Get + End Property + + Public ReadOnly Property EngineState() As EngineState + Get + Return egnState + End Get + End Property +End Class +#End Region diff --git a/Code/Chapter 15/CarLibrary/CarLibrary.sln b/Code/Chapter 15/CarLibrary/CarLibrary.sln new file mode 100644 index 0000000..0a29138 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/CarLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarLibrary", "CarLibrary.vbproj", "{F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/CarLibrary/CarLibrary.suo b/Code/Chapter 15/CarLibrary/CarLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..f734125a2fd44128a09b5472095dff5ba33fd912 GIT binary patch literal 22016 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 E0cDCc?EnA( literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/CarLibrary/CarLibrary.vbproj b/Code/Chapter 15/CarLibrary/CarLibrary.vbproj new file mode 100644 index 0000000..b0f782b --- /dev/null +++ b/Code/Chapter 15/CarLibrary/CarLibrary.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F4997D6A-53FC-4763-B8B6-DBFE6CB15AD8} + Library + CarLibrary + CarLibrary + Windows + true + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + MyTestKeyPair.snk + + + true + full + true + true + bin\Debug\ + CarLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/CarLibrary/CarLibrary.vbproj.user b/Code/Chapter 15/CarLibrary/CarLibrary.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/CarLibrary.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 15/CarLibrary/DerivedCars.vb b/Code/Chapter 15/CarLibrary/DerivedCars.vb new file mode 100644 index 0000000..293d9c2 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/DerivedCars.vb @@ -0,0 +1,40 @@ +Option Explicit On +Option Strict On + +Imports System.Windows.Forms + +#Region "SportsCar" +Public Class SportsCar + Inherits Car + + Public Sub New() + End Sub + + Public Sub New(ByVal carName As String, ByVal max As Short, ByVal curr As Short) + MyBase.New(carName, max, curr) + End Sub + + Public Overrides Sub TurboBoost() + MessageBox.Show("Ramming speed!", "Faster is better...") + End Sub +End Class +#End Region + +#Region "MiniVan" +Public Class MiniVan + Inherits Car + + Public Sub New() + End Sub + + Public Sub New(ByVal carName As String, ByVal max As Short, ByVal curr As Short) + MyBase.New(carName, max, curr) + End Sub + + ' Minivans have poor turbo capabilities! + Public Overrides Sub TurboBoost() + egnState = EngineState.engineDead + MessageBox.Show("Time to call AAA", "Your car is dead") + End Sub +End Class +#End Region diff --git a/Code/Chapter 15/CarLibrary/My Project/Application.Designer.vb b/Code/Chapter 15/CarLibrary/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/CarLibrary/My Project/Application.myapp b/Code/Chapter 15/CarLibrary/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 15/CarLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 15/CarLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b4c6536 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,36 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + +' \ No newline at end of file diff --git a/Code/Chapter 15/CarLibrary/My Project/Resources.Designer.vb b/Code/Chapter 15/CarLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7df1826 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/CarLibrary/My Project/Resources.resx b/Code/Chapter 15/CarLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/CarLibrary/My Project/Settings.Designer.vb b/Code/Chapter 15/CarLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..e650364 --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarLibrary.My.MySettings + Get + Return Global.CarLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/CarLibrary/My Project/Settings.settings b/Code/Chapter 15/CarLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/CarLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/CarLibrary/MyTestKeyPair.snk b/Code/Chapter 15/CarLibrary/MyTestKeyPair.snk new file mode 100644 index 0000000000000000000000000000000000000000..858ea69aa9f7406a1dfa346eab6162f8bbbe4a1d GIT binary patch literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098+{Zz7(J!K1c!jnNI^_wY3k*%<6=V2L@ zgE^u2Wg9mm_pnDh{ag8J%so-lY_n?e`SSK#Q{iUC32xe$hRZP^6`&UyeKar(2~GJf zU(`+BoL>!l?!X>N1(Dnhr)&1h!~;ZHLF7f`dks3=rJebN`GI%#N%MIXETQOJqp`iO z7_TgLlb>5kV_12}li%0ZZSIH!`RDDDydK;rf4 zH&aI$Dma##@%T{k`_Yi+dTK4Ot<6YO&8vCHgt5p#sxlR?BSJl{OHOIf z+ZDL#%bDpeu=(pl+tnDzThAT$@i-8ZaWbhP1Hr$gO#%wHJQ%?B>&x7n!7u5goE{MX z0)=hWs9I716L?#U#`(z+Zq^z{Xmq z>fG(q{!G_1P#$EBDf~KZE=75PjaP7vW&^1VG9!@<-e7PeY!tqc(<~KvXB7U~(Wt_|q{(rqilp`zv literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/CarLibrary/Version 1.0.0.0/CarLibrary.dll b/Code/Chapter 15/CarLibrary/Version 1.0.0.0/CarLibrary.dll new file mode 100644 index 0000000000000000000000000000000000000000..02336cfb5b4f9d2f2326da1b7b7527da2ea3d93c GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj b/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj new file mode 100644 index 0000000..c8c9871 --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {C2C73A88-BFE2-4326-8E04-C1BD13028BF9} + Exe + CodeBaseClient.Program + CodeBaseClient + CodeBaseClient + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CodeBaseClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CodeBaseClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\CarLibrary\bin\Debug\CarLibrary.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj.user b/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/CodeBaseClient.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Application.Designer.vb b/Code/Chapter 15/CodeBaseClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Application.myapp b/Code/Chapter 15/CodeBaseClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 15/CodeBaseClient/My Project/AssemblyInfo.vb b/Code/Chapter 15/CodeBaseClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5fbacba --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Resources.Designer.vb b/Code/Chapter 15/CodeBaseClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..339adbe --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CodeBaseClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Resources.resx b/Code/Chapter 15/CodeBaseClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Settings.Designer.vb b/Code/Chapter 15/CodeBaseClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c633fe8 --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CodeBaseClient.My.MySettings + Get + Return Global.CodeBaseClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/CodeBaseClient/My Project/Settings.settings b/Code/Chapter 15/CodeBaseClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/CodeBaseClient/Program.vb b/Code/Chapter 15/CodeBaseClient/Program.vb new file mode 100644 index 0000000..ff9d43a --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/Program.vb @@ -0,0 +1,13 @@ +Option Explicit On +Option Strict On + +Imports CarLibrary + +Module Program + Sub Main() + Console.WriteLine("***** Fun with CodeBases *****") + Dim c As New SportsCar() + Console.WriteLine("Sports car has been allocated.") + Console.ReadLine() + End Sub +End Module \ No newline at end of file diff --git a/Code/Chapter 15/CodeBaseClient/app.config b/Code/Chapter 15/CodeBaseClient/app.config new file mode 100644 index 0000000..c1e185e --- /dev/null +++ b/Code/Chapter 15/CodeBaseClient/app.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/MultifileAssembly/Client.vb b/Code/Chapter 15/MultifileAssembly/Client.vb new file mode 100644 index 0000000..cc3fe1f --- /dev/null +++ b/Code/Chapter 15/MultifileAssembly/Client.vb @@ -0,0 +1,13 @@ +Imports AirVehicles + +Module Module1 + Sub Main() + Dim h As New AirVehicles.Helicopter() + h.TakeOff() + + ' This will load the *.netmodule on demand. + Dim u As New UFO() + u.AbductHuman() + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 15/MultifileAssembly/helicopter.vb b/Code/Chapter 15/MultifileAssembly/helicopter.vb new file mode 100644 index 0000000..8cfa3ef --- /dev/null +++ b/Code/Chapter 15/MultifileAssembly/helicopter.vb @@ -0,0 +1,11 @@ +' This type will be in the +' primary module of the multifile +' assembly, therefore this assembly +' will contain the assembly manifest. +Namespace AirVehicles + Public Class Helicopter + Public Sub TakeOff() + Console.WriteLine("Helicopter taking off!") + End Sub + End Class +End Namespace diff --git a/Code/Chapter 15/MultifileAssembly/ufo.vb b/Code/Chapter 15/MultifileAssembly/ufo.vb new file mode 100644 index 0000000..c08d94d --- /dev/null +++ b/Code/Chapter 15/MultifileAssembly/ufo.vb @@ -0,0 +1,11 @@ +' This type will be placed +' within a *.netmodule binary, +' and it thus part of a multifile +' Assembly. +Namespace AirVehicles + Public Class Ufo + Public Sub AbductHuman() + Console.WriteLine("Resistance is futile") + End Sub + End Class +End Namespace diff --git a/Code/Chapter 15/MyCodeLibrary/Class1.vb b/Code/Chapter 15/MyCodeLibrary/Class1.vb new file mode 100644 index 0000000..028a462 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/Class1.vb @@ -0,0 +1,26 @@ +Option Explicit On +Option Strict On + +' This type is in the root namespace, +' which is (by default) the same name +' as the initial project. +Public Class SomeClass +End Class + +' This namespace is nested within the +' root. Therefore the fully qualified +' name of this class is MyCodeLibrary.MyTypes.SomeClass +Namespace MyTypes + Public Class SomeClass + End Class + + ' It is possible to nest namespaces within other + ' namespaces to gain a greater level of structure. + ' Thus, the fully qualified name of this enum is: + ' MyCodeLibrary.MyTypes.MyEnums.TestEnum + Namespace MyEnums + Public Enum TestEnum + TestValue + End Enum + End Namespace +End Namespace diff --git a/Code/Chapter 15/MyCodeLibrary/Class2.vb b/Code/Chapter 15/MyCodeLibrary/Class2.vb new file mode 100644 index 0000000..72bbb15 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/Class2.vb @@ -0,0 +1,20 @@ +Option Explicit On +Option Strict On + +Imports MyCodeLibrary.MyTypes.MyEnums + +' A type alias! +Imports TypeIWant = MyCodeLibrary.MyTypes.SomeClass + +Public Class Class2 + Public Sub MySub() + Dim e As TestEnum + + ' 's' is now of type MyCodeLibrary.MyTypes.SomeClass + Dim s As New TypeIWant + + ' Use the object test bench to invoke this member + ' to verify. + MsgBox(s.GetType().FullName) + End Sub +End Class diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Application.Designer.vb b/Code/Chapter 15/MyCodeLibrary/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Application.myapp b/Code/Chapter 15/MyCodeLibrary/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 15/MyCodeLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7824322 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Resources.Designer.vb b/Code/Chapter 15/MyCodeLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2fff729 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyCodeLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Resources.resx b/Code/Chapter 15/MyCodeLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Settings.Designer.vb b/Code/Chapter 15/MyCodeLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1ff0413 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyCodeLibrary.My.MySettings + Get + Return Global.MyCodeLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/MyCodeLibrary/My Project/Settings.settings b/Code/Chapter 15/MyCodeLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.sln b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.sln new file mode 100644 index 0000000..82c98cb --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyCodeLibrary", "MyCodeLibrary.vbproj", "{EC1245F3-AB3E-491D-9995-A60C29E95CA4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EC1245F3-AB3E-491D-9995-A60C29E95CA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC1245F3-AB3E-491D-9995-A60C29E95CA4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC1245F3-AB3E-491D-9995-A60C29E95CA4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC1245F3-AB3E-491D-9995-A60C29E95CA4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.suo b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..a03bf43bec87546de11553c5c78e03dfb691a032 GIT binary patch literal 18432 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 JZpCYD`TrcGa=icm literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj new file mode 100644 index 0000000..ac10e3e --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj @@ -0,0 +1,133 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {EC1245F3-AB3E-491D-9995-A60C29E95CA4} + Library + MyCodeLibrary + MyCodeLibrary + Windows + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyCodeLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyCodeLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj.user b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 15/MyCodeLibrary/MyCodeLibrary.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Application.Designer.vb b/Code/Chapter 15/SharedCarLibClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Application.myapp b/Code/Chapter 15/SharedCarLibClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/AssemblyInfo.vb b/Code/Chapter 15/SharedCarLibClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2569007 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Resources.Designer.vb b/Code/Chapter 15/SharedCarLibClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..3fa0364 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SharedCarLibClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Resources.resx b/Code/Chapter 15/SharedCarLibClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Settings.Designer.vb b/Code/Chapter 15/SharedCarLibClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6785ed3 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SharedCarLibClient.My.MySettings + Get + Return Global.SharedCarLibClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/SharedCarLibClient/My Project/Settings.settings b/Code/Chapter 15/SharedCarLibClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/SharedCarLibClient/Program.vb b/Code/Chapter 15/SharedCarLibClient/Program.vb new file mode 100644 index 0000000..432695d --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/Program.vb @@ -0,0 +1,13 @@ +Option Explicit On +Option Strict On + +Imports CarLibrary + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Shared Assemblies *****") + Dim mycar As New SportsCar() + mycar.TurboBoost() + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.sln b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.sln new file mode 100644 index 0000000..bdb4176 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharedCarLibClient", "SharedCarLibClient.vbproj", "{34359BD7-A953-468F-95CA-3885502040D7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {34359BD7-A953-468F-95CA-3885502040D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {34359BD7-A953-468F-95CA-3885502040D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {34359BD7-A953-468F-95CA-3885502040D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {34359BD7-A953-468F-95CA-3885502040D7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.suo b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..5acbc5a3c684acc73dbe0ca41e6c8d8f4d0d402b GIT binary patch literal 23552 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 MSM9pg+>@U7f8d@0WB>pF literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj new file mode 100644 index 0000000..2a90ce4 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {34359BD7-A953-468F-95CA-3885502040D7} + Exe + SharedCarLibClient.Program + SharedCarLibClient + SharedCarLibClient + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SharedCarLibClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SharedCarLibClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + ..\CarLibrary\Version 1.0.0.0\CarLibrary.dll + False + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj.user b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/SharedCarLibClient.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 15/SharedCarLibClient/app.config b/Code/Chapter 15/SharedCarLibClient/app.config new file mode 100644 index 0000000..0a09f5b --- /dev/null +++ b/Code/Chapter 15/SharedCarLibClient/app.config @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Application.Designer.vb b/Code/Chapter 15/Vb2008CarClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Application.myapp b/Code/Chapter 15/Vb2008CarClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/AssemblyInfo.vb b/Code/Chapter 15/Vb2008CarClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..64a03f1 --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Resources.Designer.vb b/Code/Chapter 15/Vb2008CarClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9944d2e --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Vb2008CarClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Resources.resx b/Code/Chapter 15/Vb2008CarClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Settings.Designer.vb b/Code/Chapter 15/Vb2008CarClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..da8efb0 --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Vb2008CarClient.My.MySettings + Get + Return Global.Vb2008CarClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 15/Vb2008CarClient/My Project/Settings.settings b/Code/Chapter 15/Vb2008CarClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 15/Vb2008CarClient/Program.vb b/Code/Chapter 15/Vb2008CarClient/Program.vb new file mode 100644 index 0000000..09044cb --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/Program.vb @@ -0,0 +1,17 @@ +Option Explicit On +Option Strict On + +' Import the CarLibrary namespace +' defined in the CarLibrary.dll assembly. +Imports CarLibrary + +Module Program + Sub Main() + Console.WriteLine("***** Visual Basic 2008 Client *****") + Dim myMiniVan As New MiniVan() + myMiniVan.TurboBoost() + + Dim mySportsCar As New SportsCar() + mySportsCar.TurboBoost() + End Sub +End Module diff --git a/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.sln b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.sln new file mode 100644 index 0000000..cb98bee --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Vb2008CarClient", "Vb2008CarClient.vbproj", "{8A1C896A-82AB-4011-9590-412B080E8AC0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8A1C896A-82AB-4011-9590-412B080E8AC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A1C896A-82AB-4011-9590-412B080E8AC0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A1C896A-82AB-4011-9590-412B080E8AC0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A1C896A-82AB-4011-9590-412B080E8AC0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.suo b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..ecd2365b4192481792feb330face55ad41646730 GIT binary patch literal 22528 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj new file mode 100644 index 0000000..2920fcb --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {8A1C896A-82AB-4011-9590-412B080E8AC0} + Exe + Vb2008CarClient.Program + Vb2008CarClient + Vb2008CarClient + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Vb2008CarClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Vb2008CarClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\CarLibrary\bin\Debug\CarLibrary.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj.user b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 15/Vb2008CarClient/Vb2008CarClient.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.sln b/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.sln new file mode 100644 index 0000000..dbf1adc --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AttributedCarLibrary", "AttributedCarLibrary.vbproj", "{4B3406BF-CB6A-4620-AC1A-CADC0F9324AE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4B3406BF-CB6A-4620-AC1A-CADC0F9324AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B3406BF-CB6A-4620-AC1A-CADC0F9324AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B3406BF-CB6A-4620-AC1A-CADC0F9324AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B3406BF-CB6A-4620-AC1A-CADC0F9324AE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.suo b/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..75da030d9b295d17a06d60deb64e8b7bf2bef2a5 GIT binary patch literal 20992 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4B3406BF-CB6A-4620-AC1A-CADC0F9324AE} + Library + + + AttributedCarLibrary + AttributedCarLibrary + Windows + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AttributedCarLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AttributedCarLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.vbproj.user b/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/AttributedCarLibrary.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Application.Designer.vb b/Code/Chapter 16/AttributedCarLibrary/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Application.myapp b/Code/Chapter 16/AttributedCarLibrary/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 16/AttributedCarLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..455f7c8 --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.Designer.vb b/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..044a24e --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AttributedCarLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.resx b/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.Designer.vb b/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..97c4941 --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AttributedCarLibrary.My.MySettings + Get + Return Global.AttributedCarLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.settings b/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/AttributedCarLibrary/MyTypes.vb b/Code/Chapter 16/AttributedCarLibrary/MyTypes.vb new file mode 100644 index 0000000..abb8804 --- /dev/null +++ b/Code/Chapter 16/AttributedCarLibrary/MyTypes.vb @@ -0,0 +1,55 @@ +Option Explicit On +Option Strict On + +' Enforce CLS compliance for all public types in this assembly. + + +#Region "Our custom attribute" + _ +Public NotInheritable Class VehicleDescriptionAttribute + Inherits System.Attribute + Private msgData As String + + Public Sub New(ByVal description As String) + msgData = description + End Sub + + Public Sub New() + End Sub + + Public Property Description() As String + Get + Return msgData + End Get + Set(ByVal value As String) + msgData = value + End Set + End Property +End Class +#End Region + + _ +Public Class Motorcycle + ' However this field will not be persisted. + _ + Private weightOfCurrentPassengers As Single + + ' These fields are still serializable. + Private hasRadioSystem As Boolean + Private hasHeadSet As Boolean + Private hasSissyBar As Boolean +End Class + + _ + _ +Public Class HorseAndBuggy +End Class + + _ +Public Class Winnebago + ' This will generate a warning, as UInt64 is not + ' CLS compilant, and we have specified the attribute! + ' Public notCompliant As UInt64 +End Class \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/AssemblyInfo.cs b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/AssemblyInfo.cs new file mode 100644 index 0000000..9f89a32 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.cs b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.cs new file mode 100644 index 0000000..57a2e07 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.cs @@ -0,0 +1,16 @@ +using System; +using CommonSnappableTypes; +using System.Windows.Forms; + +namespace CSharpSnapIn +{ + [CompanyInfo(Name = "Intertech Training", + Url = "www.intertechtraining.com")] + public class CSharpSnapInModule : IAppFunctionality + { + void IAppFunctionality.DoIt() + { + MessageBox.Show("You have just used the C# snap in!"); + } + } +} diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj new file mode 100644 index 0000000..55d1529 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj @@ -0,0 +1,143 @@ + + + Local + 9.0.21022 + 2.0 + {40969DAE-5043-465B-8554-47C67FECA5E8} + Debug + AnyCPU + + + + + CSharpSnapIn + + + JScript + Grid + IE50 + false + Library + CSharpSnapIn + OnBuildSuccess + + + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + bin\Debug\ + false + 285212672 + false + + + DEBUG;TRACE + + + true + 4096 + false + + + false + false + false + false + 4 + + + bin\Release\ + false + 285212672 + false + + + TRACE + + + false + 4096 + false + + + true + false + false + false + 4 + + + + CommonSnappableTypes + ..\CommonSnappableTypes\bin\Debug\CommonSnappableTypes.dll + + + System + + + 3.5 + + + System.Data + + + System.Windows.Forms + + + System.XML + + + + + Code + + + Code + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj.user b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj.user new file mode 100644 index 0000000..045cd5a --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.csproj.user @@ -0,0 +1,69 @@ + + + 7.10.3077 + Debug + AnyCPU + C:\Documents and Settings\Andrew Troelsen\Desktop\MyBooks\C# Book Second Edition\Code\Chapter 11\CommonSnappableTypes\bin\Debug\;C:\Books\C# Book Second Edition\Code\Done\SOLID and DONE\Chapter 11\CommonSnappableTypes\bin\Debug\;C:\Books\C# Book Second Edition\Code\Done\Chapter 11\CommonSnappableTypes\bin\Debug\ + + + + + 0 + ProjectFiles + 0 + + + + + + + + + + + en-US + false + + + false + false + false + false + false + + + Project + + + + + + + + + + + true + + + false + false + false + false + false + + + Project + + + + + + + + + + + true + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.sln b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.sln new file mode 100644 index 0000000..73dcdfd --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpSnapIn", "CSharpSnapIn.csproj", "{40969DAE-5043-465B-8554-47C67FECA5E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {40969DAE-5043-465B-8554-47C67FECA5E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40969DAE-5043-465B-8554-47C67FECA5E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40969DAE-5043-465B-8554-47C67FECA5E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40969DAE-5043-465B-8554-47C67FECA5E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.suo b/Code/Chapter 16/Extendable App Example/CSharpSnapIn/CSharpSnapIn.suo new file mode 100644 index 0000000000000000000000000000000000000000..4887759669262b7fdebfd4797e4e6ee3de78e730 GIT binary patch literal 35328 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 Wz0up@Z~v=zta^jV*gxr^9{4}xbNej- literal 0 HcmV?d00001 diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj new file mode 100644 index 0000000..69443fc --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4A364B7C-B298-4438-B3FF-ACB7CDF5340C} + Library + CommonSnappableTypes + CommonSnappableTypes + Windows + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CommonSnappableTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CommonSnappableTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj.user b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/CommonSnappableTypes.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.Designer.vb b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.myapp b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/AssemblyInfo.vb b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b13d873 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.Designer.vb b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e7f4d2f --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CommonSnappableTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.resx b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.Designer.vb b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..0309b08 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CommonSnappableTypes.My.MySettings + Get + Return Global.CommonSnappableTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.settings b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/MyTypes.vb b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/MyTypes.vb new file mode 100644 index 0000000..647d061 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/CommonSnappableTypes/MyTypes.vb @@ -0,0 +1,34 @@ +Option Explicit On +Option Strict On + +Public Interface IAppFunctionality + Sub DoIt() +End Interface + + _ +Public NotInheritable Class CompanyInfoAttribute + Inherits System.Attribute + Private companyName As String + Private companyUrl As String + + Public Sub New() + End Sub + + Public Property Name() As String + Get + Return companyName + End Get + Set(ByVal value As String) + companyName = value + End Set + End Property + + Public Property Url() As String + Get + Return companyUrl + End Get + Set(ByVal value As String) + companyUrl = value + End Set + End Property +End Class \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.Designer.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.Designer.vb new file mode 100644 index 0000000..3bc2920 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.Designer.vb @@ -0,0 +1,92 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip + Me.ToolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.SnapInModuleToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.label1 = New System.Windows.Forms.Label + Me.lstLoadedSnapIns = New System.Windows.Forms.ListBox + Me.MenuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolsToolStripMenuItem}) + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.Size = New System.Drawing.Size(383, 24) + Me.MenuStrip1.TabIndex = 0 + Me.MenuStrip1.Text = "MenuStrip1" + ' + 'ToolsToolStripMenuItem + ' + Me.ToolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.SnapInModuleToolStripMenuItem}) + Me.ToolsToolStripMenuItem.Name = "ToolsToolStripMenuItem" + Me.ToolsToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.ToolsToolStripMenuItem.Text = "Tools" + ' + 'SnapInModuleToolStripMenuItem + ' + Me.SnapInModuleToolStripMenuItem.Name = "SnapInModuleToolStripMenuItem" + Me.SnapInModuleToolStripMenuItem.Size = New System.Drawing.Size(159, 22) + Me.SnapInModuleToolStripMenuItem.Text = "Snap In Module" + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(12, 83) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(146, 13) + Me.label1.TabIndex = 7 + Me.label1.Text = "Here are the loaded Snap Ins" + ' + 'lstLoadedSnapIns + ' + Me.lstLoadedSnapIns.FormattingEnabled = True + Me.lstLoadedSnapIns.Location = New System.Drawing.Point(12, 104) + Me.lstLoadedSnapIns.Name = "lstLoadedSnapIns" + Me.lstLoadedSnapIns.Size = New System.Drawing.Size(335, 56) + Me.lstLoadedSnapIns.TabIndex = 6 + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(383, 182) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.lstLoadedSnapIns) + Me.Controls.Add(Me.MenuStrip1) + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "MainForm" + Me.Text = "My Extendable App!" + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents MenuStrip1 As System.Windows.Forms.MenuStrip + Friend WithEvents ToolsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents SnapInModuleToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents lstLoadedSnapIns As System.Windows.Forms.ListBox + +End Class diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.resx b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.resx new file mode 100644 index 0000000..812f765 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.vb new file mode 100644 index 0000000..70f0861 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MainForm.vb @@ -0,0 +1,74 @@ +Option Explicit On + +Imports System.Windows.Forms +Imports CommonSnappableTypes +Imports System.Reflection + +Public Class MainForm + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + End Sub + + Private Sub SnapInModuleToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles SnapInModuleToolStripMenuItem.Click + ' Allow user to select an assembly to load. + Dim dlg As OpenFileDialog = New OpenFileDialog() + + If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then + If dlg.FileName.Contains("CommonSnappableTypes") Then + MessageBox.Show("CommonSnappableTypes has no snap-ins!") + ElseIf LoadExternalModule(dlg.FileName) = False Then + MessageBox.Show("Nothing implements IAppFunctionality!") + End If + End If + End Sub + + Private Function LoadExternalModule(ByVal path As String) As Boolean + Dim foundSnapIn As Boolean = False + Dim itfAppFx As IAppFunctionality + Dim theSnapInAsm As Assembly = Nothing + + ' Try to dynamically load the selected assembly. + Try + theSnapInAsm = Assembly.LoadFrom(path) + Catch ex As Exception + MessageBox.Show(ex.Message) + Return foundSnapIn + End Try + + ' Get all IAppFunctionality compatible classes in assembly, + ' using a LINQ query and implicitly typed data. + Dim classTypes = From t In theSnapInAsm.GetTypes() Where _ + t.IsClass And (t.GetInterface("IAppFunctionality") _ + IsNot Nothing) Select t + + For Each c As Object In classTypes + foundSnapIn = True + + ' Use late binding to create the type. + Dim o As Object = theSnapInAsm.CreateInstance(c.FullName) + + ' Call DoIt() off the interface. + itfAppFx = CType(o, IAppFunctionality) + itfAppFx.DoIt() + lstLoadedSnapIns.Items.Add(c.FullName) + + ' Show company info. + DisplayCompanyData(c) + Next + Return foundSnapIn + End Function + + Private Sub DisplayCompanyData(ByVal t As Type) + ' Get data. + Dim customAtts As Object() = t.GetCustomAttributes(False) + For Each c As CompanyInfoAttribute In customAtts + ' Show data. + MessageBox.Show(c.Url, String.Format("More info about {0} can be found at", c.Name)) + Next + End Sub +End Class diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.Designer.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..88d3d0c --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.26 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.MyExtendableApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.myapp b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/AssemblyInfo.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..451a23a --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.Designer.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4803293 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyExtendableApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.resx b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.Designer.vb b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8bbe81d --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyExtendableApp.My.MySettings + Get + Return Global.MyExtendableApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.settings b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.sln b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.sln new file mode 100644 index 0000000..7b44181 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyExtendableApp", "MyExtendableApp.vbproj", "{75596EED-261F-4F8F-9605-B3BF6FB02C58}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {75596EED-261F-4F8F-9605-B3BF6FB02C58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75596EED-261F-4F8F-9605-B3BF6FB02C58}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75596EED-261F-4F8F-9605-B3BF6FB02C58}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75596EED-261F-4F8F-9605-B3BF6FB02C58}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.suo b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..0f965cd2b9ffb98bfbbe4be0242d2dbb6f1e8e63 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj new file mode 100644 index 0000000..d72a6f4 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj @@ -0,0 +1,151 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {75596EED-261F-4F8F-9605-B3BF6FB02C58} + WinExe + MyExtendableApp.My.MyApplication + MyExtendableApp + MyExtendableApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyExtendableApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyExtendableApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\CommonSnappableTypes\bin\Debug\CommonSnappableTypes.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj.user b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj.user new file mode 100644 index 0000000..55af084 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/MyExtendableApp/MyExtendableApp.vbproj.user @@ -0,0 +1,16 @@ + + + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/AssemblyInfo.vb b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/AssemblyInfo.vb new file mode 100644 index 0000000..f6e1914 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/AssemblyInfo.vb @@ -0,0 +1,32 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.sln b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.sln new file mode 100644 index 0000000..79cb347 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VbNetSnapIn", "VbNetSnapIn.vbproj", "{50ECB5AF-245D-4267-A00D-4B03D14D8242}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50ECB5AF-245D-4267-A00D-4B03D14D8242}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50ECB5AF-245D-4267-A00D-4B03D14D8242}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50ECB5AF-245D-4267-A00D-4B03D14D8242}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50ECB5AF-245D-4267-A00D-4B03D14D8242}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.suo b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.suo new file mode 100644 index 0000000000000000000000000000000000000000..d21946e72c9f675c3902a51bc72b439e2ee4cecb GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vb b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vb new file mode 100644 index 0000000..1868a50 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vb @@ -0,0 +1,14 @@ +Option Explicit On +Option Strict On + +Imports System.Windows.Forms +Imports CommonSnappableTypes + + _ +Public Class VbNetSnapInModule + Implements IAppFunctionality + + Public Sub DoIt() Implements CommonSnappableTypes.IAppFunctionality.DoIt + MessageBox.Show("You have just used the VB 2008 snap in!") + End Sub +End Class diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj new file mode 100644 index 0000000..e246ae5 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj @@ -0,0 +1,149 @@ + + + Local + 9.0.21022 + 2.0 + {50ECB5AF-245D-4267-A00D-4B03D14D8242} + Debug + AnyCPU + + + + + VbNetSnapIn + + + None + JScript + Grid + IE50 + false + Library + Binary + On + Off + VbNetSnapIn + + + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + bin\ + 285212672 + + + + + true + true + true + false + false + false + false + 1 + 42016,42017,42018,42019,42032 + + + bin\ + 285212672 + + + + + false + true + false + true + false + false + false + 1 + 42016,42017,42018,42019,42032 + + + + CommonSnappableTypes + ..\CommonSnappableTypes\bin\Debug\CommonSnappableTypes.dll + + + System + + + 3.5 + + + System.Data + + + System.Windows.Forms + + + System.XML + + + + + + + + + + + + + Code + + + Code + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj.user b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj.user new file mode 100644 index 0000000..4d26db8 --- /dev/null +++ b/Code/Chapter 16/Extendable App Example/VbNetSnapIn/VbNetSnapIn.vbproj.user @@ -0,0 +1,71 @@ + + + 7.10.3077 + Debug + AnyCPU + C:\Documents and Settings\Andrew Troelsen\Desktop\MyBooks\C# Book Second Edition\Code\Chapter 11\CommonSnappableTypes\bin\Debug\;C:\Books\C# Book Second Edition\Code\Done\SOLID and DONE\Chapter 11\CommonSnappableTypes\bin\Debug\;C:\Books\C# Book Second Edition\Code\Done\Chapter 11\CommonSnappableTypes\bin\Debug\ + + + + + 0 + ProjectFiles + 0 + + + + + + + + + + + en-US + false + + + false + false + false + false + false + + + Project + + + + + + + + + + + true + 42016,42017,42018,42019,42032 + + + false + false + false + false + false + + + Project + + + + + + + + + + + true + 42016,42017,42018,42019,42032 + + \ No newline at end of file diff --git a/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.sln b/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.sln new file mode 100644 index 0000000..b1e14f2 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExternalAssemblyReflector", "ExternalAssemblyReflector.vbproj", "{8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.suo b/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.suo new file mode 100644 index 0000000000000000000000000000000000000000..3f171717b901a7351ca832b03c267b5a52698d0f GIT binary patch literal 17408 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 k;ImnLseF*h)_)F#zij?>HpPFAeJn-$BK+O + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {8F0FF091-8DCC-4EC8-8AA1-6B312EC11BD3} + Exe + ExternalAssemblyReflector.Program + ExternalAssemblyReflector + ExternalAssemblyReflector + Console + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + v3.5 + + + true + full + true + true + bin\Debug\ + ExternalAssemblyReflector.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ExternalAssemblyReflector.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + Settings.settings + True + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.vbproj.user b/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/ExternalAssemblyReflector.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.Designer.vb b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.myapp b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/ExternalAssemblyReflector/My Project/AssemblyInfo.vb b/Code/Chapter 16/ExternalAssemblyReflector/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..bfa2576 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.Designer.vb b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.Designer.vb new file mode 100644 index 0000000..53660f2 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ExternalAssemblyReflector.My.MySettings + Get + Return Global.ExternalAssemblyReflector.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.settings b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/ExternalAssemblyReflector/Program.vb b/Code/Chapter 16/ExternalAssemblyReflector/Program.vb new file mode 100644 index 0000000..9146ac2 --- /dev/null +++ b/Code/Chapter 16/ExternalAssemblyReflector/Program.vb @@ -0,0 +1,43 @@ +Option Explicit On +Option Strict On + +Imports System.Reflection + +Module Program + Sub Main() + Console.WriteLine("***** External Assembly Viewer *****") + Dim asmName As String = String.Empty + Dim asm As Assembly = Nothing + Do + Console.WriteLine() + Console.WriteLine("Enter an assembly to evaluate") + Console.Write("or enter Q to quit: ") + + ' Get name of assembly. + asmName = Console.ReadLine() + + ' Does user want to quit? + If asmName.ToUpper = "Q" Then + Exit Do + End If + + Try ' Try to load assembly. + asm = Assembly.Load(asmName) + DisplayTypesInAsm(asm) + Catch + Console.WriteLine("Sorry, can't find assembly named {0}.", asmName) + End Try + Loop + End Sub + + Sub DisplayTypesInAsm(ByVal asm As Assembly) + Console.WriteLine() + Console.WriteLine("***** Types in Assembly *****") + Console.WriteLine("->{0}", asm.FullName) + Dim types As Type() = asm.GetTypes() + For Each t As Type In types + Console.WriteLine("Type: {0}", t) + Next + Console.WriteLine() + End Sub +End Module diff --git a/Code/Chapter 16/LateBinding/LateBinding.sln b/Code/Chapter 16/LateBinding/LateBinding.sln new file mode 100644 index 0000000..fe9d436 --- /dev/null +++ b/Code/Chapter 16/LateBinding/LateBinding.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LateBinding", "LateBinding.vbproj", "{939DD842-C38C-471D-A392-3ADA952916C1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {939DD842-C38C-471D-A392-3ADA952916C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {939DD842-C38C-471D-A392-3ADA952916C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {939DD842-C38C-471D-A392-3ADA952916C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {939DD842-C38C-471D-A392-3ADA952916C1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/LateBinding/LateBinding.suo b/Code/Chapter 16/LateBinding/LateBinding.suo new file mode 100644 index 0000000000000000000000000000000000000000..561a3ddf9244d0abe16955248e41ce5ef7b0de9f GIT binary patch literal 18944 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {939DD842-C38C-471D-A392-3ADA952916C1} + Exe + LateBinding.Program + LateBinding + LateBinding + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + LateBinding.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LateBinding.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/LateBinding/LateBinding.vbproj.user b/Code/Chapter 16/LateBinding/LateBinding.vbproj.user new file mode 100644 index 0000000..55af084 --- /dev/null +++ b/Code/Chapter 16/LateBinding/LateBinding.vbproj.user @@ -0,0 +1,16 @@ + + + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/LateBinding/My Project/Application.Designer.vb b/Code/Chapter 16/LateBinding/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/LateBinding/My Project/Application.myapp b/Code/Chapter 16/LateBinding/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/LateBinding/My Project/AssemblyInfo.vb b/Code/Chapter 16/LateBinding/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9152f30 --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/LateBinding/My Project/Resources.Designer.vb b/Code/Chapter 16/LateBinding/My Project/Resources.Designer.vb new file mode 100644 index 0000000..cd79d5d --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LateBinding.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/LateBinding/My Project/Resources.resx b/Code/Chapter 16/LateBinding/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/LateBinding/My Project/Settings.Designer.vb b/Code/Chapter 16/LateBinding/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3915942 --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LateBinding.My.MySettings + Get + Return Global.LateBinding.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/LateBinding/My Project/Settings.settings b/Code/Chapter 16/LateBinding/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/LateBinding/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/LateBinding/Program.vb b/Code/Chapter 16/LateBinding/Program.vb new file mode 100644 index 0000000..622d77f --- /dev/null +++ b/Code/Chapter 16/LateBinding/Program.vb @@ -0,0 +1,72 @@ +Option Explicit On + +' If you disable Option Strict, you are able to +' Simplify your late biniding, as shown in the +' commented out EasyMain() method below. +Option Strict On + +Imports System.Reflection +Imports System.IO + +Module Program + +#Region "This logic will when Option Strict is On or Off" + Sub Main() + Console.WriteLine("***** Fun with Late Binding *****") + + ' Try to load a local copy of CarLibrary. + Dim a As Assembly = Nothing + Try + a = Assembly.Load("CarLibrary") + Catch e As FileNotFoundException + Console.WriteLine(e.Message) + Return + End Try + + ' If we found it, get type information about + ' the minivan and create an instance. + Dim miniVan As Type = a.GetType("CarLibrary.MiniVan") + Dim obj As Object = Activator.CreateInstance(miniVan) + + ' Get info for TurboBoost. + Dim mi As MethodInfo = miniVan.GetMethod("TurboBoost") + + ' Invoke method ('Nothing' for no parameters). + mi.Invoke(obj, Nothing) + + '' Bind late to a method taking params. + '' If you updated MiniVan with a TellChildToBeQuiet() method + '' (see Ch. 14) you can test with the following. + 'Dim args(1) As Object + 'args(0) = "Fred" + 'args(1) = 4 + 'mi = miniVan.GetMethod("TellChildToBeQuiet") + 'mi.Invoke(obj, args) + + Console.ReadLine() + End Sub +#End Region + +#Region "This logic will ONLY work if Option Strict is Off" + 'Sub EasyMain() + ' Console.WriteLine("You must disable Option Strict for this to work!") + + ' ' Try to load a local copy of CarLibrary. + ' Dim a As Assembly = Nothing + ' Try + ' a = Assembly.Load("CarLibrary") + ' Catch e As FileNotFoundException + ' Console.WriteLine(e.Message) + ' Return + ' End Try + + ' ' If we found it, get type information about + ' ' the minivan and create an instance. + ' Dim miniVan As Type = a.GetType("CarLibrary.MiniVan") + ' Dim obj As Object = Activator.CreateInstance(miniVan) + ' obj.TurboBoost() + ' obj.TellChildToBeQuiet("Fred", 4) + 'End Sub +#End Region + +End Module diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Application.Designer.vb b/Code/Chapter 16/MyTypeViewer/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Application.myapp b/Code/Chapter 16/MyTypeViewer/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/MyTypeViewer/My Project/AssemblyInfo.vb b/Code/Chapter 16/MyTypeViewer/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..37718e8 --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Resources.Designer.vb b/Code/Chapter 16/MyTypeViewer/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f7fbe0e --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyTypeViewer.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Resources.resx b/Code/Chapter 16/MyTypeViewer/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Settings.Designer.vb b/Code/Chapter 16/MyTypeViewer/My Project/Settings.Designer.vb new file mode 100644 index 0000000..045707d --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyTypeViewer.My.MySettings + Get + Return Global.MyTypeViewer.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/MyTypeViewer/My Project/Settings.settings b/Code/Chapter 16/MyTypeViewer/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/MyTypeViewer/MyTypeViewer.sln b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.sln new file mode 100644 index 0000000..379d18d --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyTypeViewer", "MyTypeViewer.vbproj", "{04CD22D3-4134-4D9D-A245-0EA1ED9B4480}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {04CD22D3-4134-4D9D-A245-0EA1ED9B4480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {04CD22D3-4134-4D9D-A245-0EA1ED9B4480}.Debug|Any CPU.Build.0 = Debug|Any CPU + {04CD22D3-4134-4D9D-A245-0EA1ED9B4480}.Release|Any CPU.ActiveCfg = Release|Any CPU + {04CD22D3-4134-4D9D-A245-0EA1ED9B4480}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/MyTypeViewer/MyTypeViewer.suo b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.suo new file mode 100644 index 0000000000000000000000000000000000000000..de22bfce174895bd9bcbb58aeb5aa02a51748ded GIT binary patch literal 15872 zcmeHOO>7&-6&~7-D>rG}*sj~8uCq}T$4P8fmS|hHQ`h{H?L>-HQI>;(fkBZgSrWxn zNcu;p3$(``dMla~MF2Z>fFJ>a`j!H@)F{yO5V$}OEs7r6OPWjLo^p%S@0%a)a=9c| z^pB*%L(I-{cR26On>XLQ_h$I#TaW$o+KngvC4A|)*eI5kw}{Q2=Mmg9%k*_2HsFTe zmzI~8)k7h0`yj0&3494&H|a6tSU-f^h5QxdEyxcee--%==v1*$I?!eb3*e^!=bN@o4!p?q5QF8F|R_obUc0(!tW=wHw7x6Cb^K zxNp}N@Ba{8Tv7UOk{TjJEdJK;+v!KI{pZ)IpCt6$UQt6GR*v9z#GT3H(d_V|m2jN7 zN_HY)0wY#lg+AC50B*b_7M zCA-X4M$68uov&uc?22=toVP2{vR#q5wE4x-g<_Ekg!HQjh^CzUg?YPFtw@p?yIP$o zO;@tk$wm8QY5b$jK_1%wLO>!4w^(-q^v0#UieeJwWs#AT zFM^9a?%JhpXdf|;Dj$|U^_5u5^s1N_MMxnBYIC?wgXV}>fGlRfO$pq!PLx0GE81pZ z>2v+v%RxY*#3!+)O-ssUaTYvO!3*`I9c}&|@~@43So*XxX)7}M=_fGiHh7qW3>?US zHc2Z!_JTfbRMKXWjkdYaw!NzB`03OB;JAk!fju4cpZ2uTe?R>}+2;bZ(7~vb+v*_b zM~rzZE;Dy&uaN9loXl1{vn-Fc%{*wNbq*9_pyP5tbo0~FWMn%fd{H>4P-Pl? z=478J)gmYo5r=V~#~TOV9B@S2mz-B1Z_2`g?5nsh;F*JO1NhAZ+Re&eRZ&*(>pV&! zuH0jalvxoyn3D7iUGsgl=qs-7fB%UFdB}rfLydG(R<9!~A91#!r-Iwu9X@k4rhfc_ z_}?rd5s>?gn2d$wZ<|IoVmdD`f3TqzY8iO#3tHYXSy|q1sC}358QFrVf%230W7}>o zecphDLH%rwKa0>iu82iX%Z<04;2&*m(~_V5Fh+JBROyGF#SEm~;s8^ctpWRhf3!g9 zhlIsHu07+L0ph(vw33|tE>hH6CPX2wMYeB6g8x-pd&1JM@4o|`zJNZfmc4x*1x;E* zt!#l_ZU0bz!qTU$#5I74avKJHt^qR=`Ermw@o%AKo6&2M`YDb9k%jmXJg*oKF$K@7 z57&NpWig<2Kd!t>!Rt!lE{?Y`aS(UCur}kUk(Tcgcp3w)_KF|F5-nhKm0xSD(wip#-7-z0Tw7PAqA93gtZT2LjeFoB)f^|yNpaqsd z%>sJvO8@(JUHb0)TPZKJI^y7ydUFwdNrLxj$!(XkMw_>M3?pwo8PW6bm+=>V{`*rm z{{G&r?eCo3IwZ<}dMWK9b5YFJv54x5d%{@ZZ6&2J#_u8!Uu2czI~)w zO(6zlBxe8;9K>h8*199mKz;`Cd;q!_gZ}-%qW_ea-qXAs31Xh{o-P6bgS;ntC$t+D zBxZQ+8e=`#7&%%D#(Ls-Hd;@lSVgAwM32L3J#krJYEAzk)OZ)N@67ufg=CuJkMRXl zQX_Mc8~-H={GmO~85$OU7#lWrAMISO=mz5y&Q3uV(|Ahz&AjnbR^NgDE5={Or7!Bm za0DYf3k0O);K%q089@rBYo5aYi|oP|`ZQtt-;KHxx`8BmPb{d^tY<$Lx?+=p{vYX5 zreW!O*PnZ3{nuOIQE2xhIOM4Bj3{mOYhJ~p>GTe&a^y=G8Cvbc$pXfRGlWqK+V4bC zqG$>4Rpg_wP4&hf5pm-m%_Ad?K1-kEfsyh~y%l;+LCvf_w@J=FMOj_l zH_h+7`hN;YQ;@Vv=yMU=41yc3yOcsG`nA4??Z21)h{V1kxG2dy?U8&6Puj)6ApaH9 ze-@(ItO0ltYoWW|Fc5 z+24FdyUJjjRI-4}o!EX{`_1e(+8-A84J*5Vzg)Q(&kT!y^dY&o$7J>y%>F|Lb~4u> zdO)-a+aYi#_;(O=P5iYL{&HWjU1I#3_9WpnZ2ymED#a zKeqk*k>8;=7_B5vnlz8CsCZs83E8mnX=SfPnK;rD&wBc%e7E4SzKlszlu_KZH@ZPR zVZ3>LaLR>&yUESw8F#yzy^Cu9&FsUZWv@qI8xP`y*GWV&yFKIEjT1d7c+&|)KKYI( zuJ&O}$KdTJ@!UK)S4WR+s2B87Q>@85Ccj-tEcNSn*-H)avJ zq}Rb38J{<-=+IZpOIqrLKvaHr!0n0JmJy5+ndqBX*VX-2T|TADZe2dD%U)f^blIcJ zXLPwom#Q^&ib~1HyJw-i7=M3_|B}V{s6AQ6acJkwp{EzIa}dQoK~{R*Q|O!8kBFiU zW!R5>1lp(ckf$)-70BykV(4@MtgO8`#koOmh+gL`xMhT#@hisoxVJS4on5S*cT@%e zdo#O^dc$1|&OUQOp@Q+_n&dsZM=kJNqTgW9H|%sgG7cD#eQ;sMM1 zCmpkL2XVsl!}pJqdOb0E&C?$B<7qgiCT$ORJA>7dXDE4ofcs~8l&s60|HkuA(K>5{ z`_IJjy!=HYZANNJ;&u79kv1(e>bhF@%o#?~<_YlnUIf>T!WN`vaE2N#7zy+K)<|Zp z&-g~^vCqT=;s6sRv%1>e$fMCNFOO>nClH*d(*?Cc`%%Tq`)bT#zs7p`SxxNcxgYOL z3Oc(Gv{TS{cA=RM=s%06>_GSnpFVq?F*P@$&D}zO>?wl(4>11Z$Q^llQRer*+_B|s zV@&S&RWymTyu|BnSMn8$HZq6jrhz}B@9?XB`skXPZ)Ed5C=6|dG2kz6fOWgn9%Fc60VfR0HitQua zFwg%OFOq9x0rQNd`Y$4FiPnkd4>;=|M-EFriMmzYYzB5tUVH02fkpadc}i~@|M{|k f6s;5K??4q7)mqo*TkrmV``Ybm7}{a`?``paD$|87 literal 0 HcmV?d00001 diff --git a/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj new file mode 100644 index 0000000..2578977 --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {04CD22D3-4134-4D9D-A245-0EA1ED9B4480} + Exe + MyTypeViewer.Program + MyTypeViewer + MyTypeViewer + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyTypeViewer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyTypeViewer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj.user b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/MyTypeViewer.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/MyTypeViewer/Program.vb b/Code/Chapter 16/MyTypeViewer/Program.vb new file mode 100644 index 0000000..15a61f9 --- /dev/null +++ b/Code/Chapter 16/MyTypeViewer/Program.vb @@ -0,0 +1,98 @@ +Option Explicit On +Option Strict On + +Imports System.Reflection + +Module Program + Sub Main() + Console.WriteLine("***** Welcome to MyTypeViewer *****") + Dim typeName As String = String.Empty + + Do + Console.WriteLine() + Console.WriteLine("Enter a type name to evaluate") + Console.Write("or enter Q to quit: ") + + ' Get name of type. + typeName = Console.ReadLine() + + ' Does user want to quit? + If typeName.ToUpper() = "Q" Then + Exit Do + End If + + ' Try to display type + Try + Dim t As Type = Type.GetType(typeName) + Console.WriteLine() + ListVariousStats(t) + ListFields(t) + ListProps(t) + ListMethods(t) + ListInterfaces(t) + Catch + Console.WriteLine("Sorry, can't find {0}.", typeName) + End Try + Loop + End Sub + +#Region "Helper methods" + ' Display method names of type. + Public Sub ListMethods(ByVal t As Type) + Console.WriteLine("***** Methods *****") + Dim mi As MethodInfo() = t.GetMethods() + For Each m As MethodInfo In mi + Dim retVal As String = m.ReturnType.FullName() + Dim paramInfo As String = "( " + For Each pi As ParameterInfo In m.GetParameters() + paramInfo &= String.Format("{0} {1} ", pi.ParameterType, pi.Name) + Next + paramInfo &= ")" + Console.WriteLine("->{0} {1} {2}", retVal, m.Name, paramInfo) + Next + Console.WriteLine() + End Sub + + ' Display field names of type. + Public Sub ListFields(ByVal t As Type) + Console.WriteLine("***** Fields *****") + Dim fi As FieldInfo() = t.GetFields() + For Each field As FieldInfo In fi + Console.WriteLine("->{0} ", field.Name) + Next + Console.WriteLine() + End Sub + + ' Display property names of type. + Public Sub ListProps(ByVal t As Type) + Console.WriteLine("***** Properties *****") + Dim pi As PropertyInfo() = t.GetProperties() + For Each prop As PropertyInfo In pi + Console.WriteLine("->{0} ", prop.Name) + Next + Console.WriteLine() + End Sub + + ' Display implemented interfaces. + Public Sub ListInterfaces(ByVal t As Type) + Console.WriteLine("***** Interfaces *****") + Dim ifaces As Type() = t.GetInterfaces() + For Each i As Type In ifaces + Console.WriteLine("->{0} ", i.Name) + Next + Console.WriteLine() + End Sub + + ' Just for good measure. + Public Sub ListVariousStats(ByVal t As Type) + Console.WriteLine("***** Various Statistics *****") + Console.WriteLine("Base class is: {0} ", t.BaseType) + Console.WriteLine("Is type abstract? {0} ", t.IsAbstract) + Console.WriteLine("Is type sealed? {0} ", t.IsSealed) + Console.WriteLine("Is type generic? {0} ", t.IsGenericTypeDefinition) + Console.WriteLine("Is type a class type? {0} ", t.IsClass) + Console.WriteLine() + End Sub +#End Region + +End Module diff --git a/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.Designer.vb b/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.myapp b/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/SharedAssemblyReflector/My Project/AssemblyInfo.vb b/Code/Chapter 16/SharedAssemblyReflector/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2f80dd1 --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.Designer.vb b/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.Designer.vb new file mode 100644 index 0000000..29d4f45 --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SharedAssemblyReflector.My.MySettings + Get + Return Global.SharedAssemblyReflector.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.settings b/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/SharedAssemblyReflector/Program.vb b/Code/Chapter 16/SharedAssemblyReflector/Program.vb new file mode 100644 index 0000000..e6161ce --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/Program.vb @@ -0,0 +1,34 @@ +Option Explicit On +Option Strict On + +Imports System.Reflection + +Module Program + Sub Main() + Console.WriteLine("***** The Shared Asm Reflector App *****") + Console.WriteLine() + Dim displayName As String = Nothing + displayName = "System.Windows.Forms, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, Culture=neutral" + Dim asm As Assembly = Assembly.Load(displayName) + DisplayInfo(asm) + Console.ReadLine() + End Sub + + Sub DisplayInfo(ByVal a As Assembly) + Console.WriteLine("***** Info about Assembly *****") + Console.WriteLine("Loaded from GAC? {0} ", a.GlobalAssemblyCache()) + Console.WriteLine("Asm Name: {0} ", a.GetName().Name) + Console.WriteLine("Asm Version: {0} ", a.GetName().Version) + Console.WriteLine("Asm Culture: {0} ", a.GetName().CultureInfo.DisplayName) + Dim types As Type() = a.GetTypes() + + ' Just print out the first 20 types. + For i As Integer = 0 To 19 + Try + Console.WriteLine("Type: {0}", types(i)) + Catch ex As Exception + Console.WriteLine(ex.Message) + End Try + Next + End Sub +End Module diff --git a/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.sln b/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.sln new file mode 100644 index 0000000..2ed8fc8 --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharedAssemblyReflector", "SharedAssemblyReflector.vbproj", "{D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.suo b/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.suo new file mode 100644 index 0000000000000000000000000000000000000000..5abc3c8d0db574691f638020b1c3eeee3ae8c10b GIT binary patch literal 17408 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D5CB3179-8DD5-4A2A-A5B6-D5B33BF28199} + Exe + SharedAssemblyReflector.Program + SharedAssemblyReflector + SharedAssemblyReflector + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SharedAssemblyReflector.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SharedAssemblyReflector.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + Settings.settings + True + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.vbproj.user b/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/SharedAssemblyReflector/SharedAssemblyReflector.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.Designer.vb b/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.myapp b/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/AssemblyInfo.vb b/Code/Chapter 16/VehicleDescriptionReader/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..261c0ff --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.Designer.vb b/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1db8b4e --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VehicleDescriptionReader.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.resx b/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.Designer.vb b/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f7a676e --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VehicleDescriptionReader.My.MySettings + Get + Return Global.VehicleDescriptionReader.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.settings b/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/VehicleDescriptionReader/Program.vb b/Code/Chapter 16/VehicleDescriptionReader/Program.vb new file mode 100644 index 0000000..31697b0 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/Program.vb @@ -0,0 +1,23 @@ +Option Explicit On +Option Strict On + +Imports AttributedCarLibrary + +' Reflecting on custom attributes using early binding. +Module Program + Sub Main() + ' Get a Type representing the Winnebago. + Dim t As Type = GetType(Winnebago) + + ' Get all attributes on the Winnebago. + Dim customAtts As Object() = t.GetCustomAttributes(False) + + ' Print the description. + Console.WriteLine("***** Value of VehicleDescriptionAttribute *****") + For Each v As VehicleDescriptionAttribute In customAtts + Console.WriteLine() + Console.WriteLine("->{0}", v.Description) + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.sln b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.sln new file mode 100644 index 0000000..0742676 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VehicleDescriptionReader", "VehicleDescriptionReader.vbproj", "{5217D13D-B4AE-4C73-8566-D132C60009C5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5217D13D-B4AE-4C73-8566-D132C60009C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5217D13D-B4AE-4C73-8566-D132C60009C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5217D13D-B4AE-4C73-8566-D132C60009C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5217D13D-B4AE-4C73-8566-D132C60009C5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.suo b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.suo new file mode 100644 index 0000000000000000000000000000000000000000..ba21a203967d320429251c41444d15f86c99762d GIT binary patch literal 25088 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 PEt&h2OQCbzL_P3-Bw>ie literal 0 HcmV?d00001 diff --git a/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj new file mode 100644 index 0000000..8818e88 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5217D13D-B4AE-4C73-8566-D132C60009C5} + Exe + VehicleDescriptionReader.Program + VehicleDescriptionReader + VehicleDescriptionReader + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + VehicleDescriptionReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VehicleDescriptionReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\AttributedCarLibrary\bin\Debug\AttributedCarLibrary.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj.user b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReader/VehicleDescriptionReader.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.Designer.vb b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.myapp b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/AssemblyInfo.vb b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..f283cdf --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.Designer.vb b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.Designer.vb new file mode 100644 index 0000000..fed0ac1 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VehicleDescriptionReaderLB.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.resx b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.Designer.vb b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4940945 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VehicleDescriptionReaderLB.My.MySettings + Get + Return Global.VehicleDescriptionReaderLB.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.settings b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/Project.vb b/Code/Chapter 16/VehicleDescriptionReaderLB/Project.vb new file mode 100644 index 0000000..028da6f --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/Project.vb @@ -0,0 +1,34 @@ +Option Explicit On +Option Strict On + +Imports System.Reflection + +Module Project + + Sub Main() + Console.WriteLine("***** Descriptions of Your Vehicles *****") + Console.WriteLine() + + ' the local copy of AttributedCarLibrary. + Dim asm As Assembly = Assembly.Load("AttributedCarLibrary") + + ' Get type info of VehicleDescriptionAttribute. + Dim vehicleDesc As Type = asm.GetType("AttributedCarLibrary.VehicleDescriptionAttribute") + + ' Get type info of the Description property. + Dim propDesc As PropertyInfo = vehicleDesc.GetProperty("Description") + + ' Get all types in the assembly. + Dim types As Type() = asm.GetTypes() + + ' Iterate over each attribute. + For Each t As Type In types + Dim objs As Object() = t.GetCustomAttributes(vehicleDesc, False) + For Each o As Object In objs + Console.WriteLine("-> {0} : {1}", t.Name, propDesc.GetValue(o, Nothing)) + Next + Next + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.sln b/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.sln new file mode 100644 index 0000000..5d7dbb2 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VehicleDescriptionReaderLB", "VehicleDescriptionReaderLB.vbproj", "{CC9CA480-8A47-446E-81B9-3F458A1F1B41}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CC9CA480-8A47-446E-81B9-3F458A1F1B41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC9CA480-8A47-446E-81B9-3F458A1F1B41}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC9CA480-8A47-446E-81B9-3F458A1F1B41}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC9CA480-8A47-446E-81B9-3F458A1F1B41}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.suo b/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.suo new file mode 100644 index 0000000000000000000000000000000000000000..be1c7e6390920444a475c11531edb1e5cb84dfb1 GIT binary patch literal 24576 zcmeHPUu;`f89#1E>FA(rErqS!>Sb+dS!eRE>A$VR|I&6#+F+;YG%Qt)eUrFx>~QU* z4KTF5fHVp5$dEuzQ*;VP%ZW^wz@gJO&0ehAmBvV2j9O}Jpa zedo>{byEmjc1s6Q;8WoG02c2nsGmXoEGpN0E9&P^A4J`T`gzocP``kRr5D>#A3=Q> zbua2;s5?==gt`m$%czf{k~el+?H;s`qdsAM=QCEX@>TRXhYfo&@(AYXic#M%K9(6z%?2od7@c)d-o4-eDw0o&}Mcbqo9ldVp&`k zX90Z*S4nYIJ@EOtOKb`eKKYle&!0&iX5T(BBnCwcZ7)8LgTG>;AJ@IO>cd|GSC^Kt z90#@wq5?YUa>9boec>0rQ(gvxp9bVCs-eLP4WDw@FZ>!j1akN+okZU0{q?|$;ok6+0|oa!DkYF+*tCx-}e`t?%cwRfLSzP@*N z^g}YjJt`rS@3p2%C!slG$7^l{Yr~<+z0u`JxzH*mTu8qKGti-FIxT^A_uva z0PG4dnT9qX7OhLzlE1V${K7whzLZ-m6M#1^bzo6UqP;5867nLj$l461I`$li) zR{i;$vYN7%HYH%!yny}^Hf6Ej`BVR1p`b@GM+%c> z)?5m}vu~^g&yHlPMyycEV?zf(bsjB=;VYv^<@ePbgU0cL` zQlo-v6L;(tNa1c)j$*=2iQ!kOCARchE2vYLPZ(69^|T;q5ysk8ah=D#GM*iivy9`D^Qxk)pv|Eb;(K=) zB7MaoW-uk;X}J3PTESOX-TV1dnvl=9HsnaVWGp*0_=t8ae!a`G<5L1^(0l1u6NmQpznrerpN}@tnj@ zh?9`WLVOo8IgVIcTtxBxn2fa@lh;QPbsNOr5VXfLc+v-H&zRhR7{=WrxD&;_VR?TL zpRYg@<-r{)E=K7}xXOQWLS?k7wvWb5`JL>$RWRiF3EHz+Q&TB5*{e6xtT#DV*?#CEHUGBzIh zBsfO@rNzE&pGKel(eKW@^S8Hd?YMDq`-m_aTCUmb(3$w=gJ5S{$3& z`Tp(qpBTCR^Zc)W^28^{8}(#VaX|7Pt>4r(5y&6LgeiMiYM*+4JBZubZlj$`jjUyylCx9b ziD}%W{iUCHj|KU^4BIdKLl|n&5^(21k;{-^)ckH4KLL5usv!OoqAf2c?{oeG=s#f% z9LMarmn+hSG$6~|STx6g@i)qF`c!`B@6@?aGoFOgwB|M$NUlHH97d3}#uB3KM z%K5P$HHX?oa|BW|f9k*Ckn*1D=W6f$M)c#jS1{Xl>8E`(+aqh{tJTv_`E_2tTD|`i z1szC<0`?4dEM-(&(v;ETNsGQq%WGe&W63e(bFRjuT!XWqF#W~|6lq{mf{v#~Qu^}l!#^)~l9EG| zMbi$-CxBb4GY}pB*EDEEC+B_Ixj%SB-Em8Qzw55Y+tUX9sa0tMu;_Cpeg2e&JwqO( z1xp#zY6aSv|8c<8@waC5r|s9OQ2&#ZjA#1gztiZOuuQP#@OhHmybwO&GM&ON{89A% z$QstKzV?a=wx@Hb32D~`(LC)*OD)@!EYVu#f7|}>XBvN`77O!<+Sfn7hX(AV$f=tq zv3PpSZG+MNIvq>LnF-WcvulS>)auVe<}eTGUz=})-;3M~eSZVaJpzeK`wY?P50Af0 zDu6rU%=Ss(t~#Z0d-;3uv^}aDus96yYRA#J3`$&vjce0{rzB24oKNcg@D%PkPcb5x zKhOSY`F7SW^P<50F$*eXp3b$ip3Got=XVj8&6||`a2_XY!^l26jp$vEgV%bH1)G3x z8bh>?&zPln7*OBqUi%P0iraev0(wf#pOp;nqF8xhA^t#)QsBW>L* z@}EeKoTY~5I~9tHlnn6B#-aYBMZ;BNK92!Ttvy*N;GVZl)ykGi!(Ohyvg8>>1h}YZ zcmzCB#2+nRR^s~HGOjDPpd_DEFOrRWKA!XK<+v{=E+~ve^{m2QPmN3L|_OP2{ zo%pP!?5F;&rJm9a8b9tVyQbqw#P{pa)4_0#ER@X9mi8@yd96GV3~?{(J(k;{~UI-0|CFh;CsDem%4%b&WKB*MC><+oWJ4xuY`PJF@G)H~;?=UO5Wtf8urhckln((a2Bf`tQzciuGtA z&fx!Fy8n|(&?sT;dA^SQcK!FR|IYlAuK&*eljOC}y8e4Rr&Epi$=lXZ{` + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {CC9CA480-8A47-446E-81B9-3F458A1F1B41} + Exe + VehicleDescriptionReaderLB.Project + VehicleDescriptionReaderLB + VehicleDescriptionReaderLB + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + VehicleDescriptionReaderLB.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VehicleDescriptionReaderLB.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.vbproj.user b/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 16/VehicleDescriptionReaderLB/VehicleDescriptionReaderLB.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.sln b/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.sln new file mode 100644 index 0000000..c318290 --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AppDomainManipulator", "AppDomainManipulator.vbproj", "{523EFF58-9062-44EA-8731-D79C3EA3675C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {523EFF58-9062-44EA-8731-D79C3EA3675C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {523EFF58-9062-44EA-8731-D79C3EA3675C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {523EFF58-9062-44EA-8731-D79C3EA3675C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {523EFF58-9062-44EA-8731-D79C3EA3675C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.suo b/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.suo new file mode 100644 index 0000000000000000000000000000000000000000..1377109f1644d7349356ef28f8189ee4f19c4a9a GIT binary patch literal 17408 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {523EFF58-9062-44EA-8731-D79C3EA3675C} + Exe + AppDomainManipulator.Program + AppDomainManipulator + AppDomainManipulator + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AppDomainManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AppDomainManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\..\..\..\C# and the .NET Platform 4th ed\Code\Chapter 15\CarLibrary\bin\Debug\CarLibrary.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.vbproj.user b/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/AppDomainManipulator.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Application.Designer.vb b/Code/Chapter 17/AppDomainManipulator/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Application.myapp b/Code/Chapter 17/AppDomainManipulator/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/AssemblyInfo.vb b/Code/Chapter 17/AppDomainManipulator/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..290db8a --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Resources.Designer.vb b/Code/Chapter 17/AppDomainManipulator/My Project/Resources.Designer.vb new file mode 100644 index 0000000..69b02f3 --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AppDomainManipulator.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Resources.resx b/Code/Chapter 17/AppDomainManipulator/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Settings.Designer.vb b/Code/Chapter 17/AppDomainManipulator/My Project/Settings.Designer.vb new file mode 100644 index 0000000..34a08fc --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AppDomainManipulator.My.MySettings + Get + Return Global.AppDomainManipulator.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/AppDomainManipulator/My Project/Settings.settings b/Code/Chapter 17/AppDomainManipulator/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 17/AppDomainManipulator/Program.vb b/Code/Chapter 17/AppDomainManipulator/Program.vb new file mode 100644 index 0000000..276dffe --- /dev/null +++ b/Code/Chapter 17/AppDomainManipulator/Program.vb @@ -0,0 +1,57 @@ +Imports System.Reflection +Imports System.Windows.Forms + +Module Program + + Sub Main() + Console.WriteLine("***** The Amazing AppDomain app *****" & vbLf) + + ' Get info for current AppDomain. + Dim defaultAD As AppDomain = AppDomain.CurrentDomain() + MessageBox.Show("Hello") + PrintAllAssembliesInAppDomain(defaultAD) + Console.WriteLine() + + ' Programmatically make a new app domain. + Dim anotherAD As AppDomain = AppDomain.CreateDomain("SecondAppDomain") + ' Load CarLibrary.dll into this new appdomain. + anotherAD.Load("CarLibrary") + PrintAllAssembliesInAppDomain(anotherAD) + + ' Hook into DomainUnload event. + AddHandler anotherAD.DomainUnload, AddressOf anotherAD_DomainUnload + + ' Now unload anotherAD. + AppDomain.Unload(anotherAD) + + ' Hook into ProcessExit. + AddHandler defaultAD.ProcessExit, AddressOf defaultAD_ProcessExit + Console.ReadLine() + End Sub + +#Region "Handler for unloading app domains" + Public Sub anotherAD_DomainUnload(ByVal sender As Object, ByVal e As EventArgs) + Console.WriteLine("***** Unloaded anotherAD! *****") + End Sub + + Private Sub defaultAD_ProcessExit(ByVal sender As Object, ByVal e As EventArgs) + Console.WriteLine("***** Unloaded defaultAD! *****") + End Sub +#End Region + +#Region "PrintAllAssembliesInAppDomain" + Public Sub PrintAllAssembliesInAppDomain(ByVal ad As AppDomain) + Dim loadedAssemblies As Assembly() = ad.GetAssemblies() + Console.WriteLine("***** Here are the assemblies loaded in {0} *****", _ + ad.FriendlyName) + + ' Remember! We need to import System.Reflection to use + ' the Assembly type. + For Each a As Assembly In loadedAssemblies + Console.WriteLine("-> Name: {0}", a.GetName.Name) + Console.WriteLine("-> Version: {0}", a.GetName.Version) + Next + End Sub +#End Region + +End Module diff --git a/Code/Chapter 17/ContextManipulator/ContextManipulator.sln b/Code/Chapter 17/ContextManipulator/ContextManipulator.sln new file mode 100644 index 0000000..ce7ded0 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/ContextManipulator.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ContextManipulator", "ContextManipulator.vbproj", "{A8269A84-8FC8-4225-BDDE-2B21B14F93AA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8269A84-8FC8-4225-BDDE-2B21B14F93AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8269A84-8FC8-4225-BDDE-2B21B14F93AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8269A84-8FC8-4225-BDDE-2B21B14F93AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8269A84-8FC8-4225-BDDE-2B21B14F93AA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 17/ContextManipulator/ContextManipulator.suo b/Code/Chapter 17/ContextManipulator/ContextManipulator.suo new file mode 100644 index 0000000000000000000000000000000000000000..8b3771fd18a0f038f42111275ac46bb97e8eae81 GIT binary patch literal 16384 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A8269A84-8FC8-4225-BDDE-2B21B14F93AA} + Exe + ContextManipulator.Program + ContextManipulator + ContextManipulator + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ContextManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ContextManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 17/ContextManipulator/ContextManipulator.vbproj.user b/Code/Chapter 17/ContextManipulator/ContextManipulator.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/ContextManipulator.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 17/ContextManipulator/My Project/Application.Designer.vb b/Code/Chapter 17/ContextManipulator/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 17/ContextManipulator/My Project/Application.myapp b/Code/Chapter 17/ContextManipulator/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 17/ContextManipulator/My Project/AssemblyInfo.vb b/Code/Chapter 17/ContextManipulator/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6930c95 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 17/ContextManipulator/My Project/Resources.Designer.vb b/Code/Chapter 17/ContextManipulator/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9e3b389 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ContextManipulator.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/ContextManipulator/My Project/Resources.resx b/Code/Chapter 17/ContextManipulator/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 17/ContextManipulator/My Project/Settings.Designer.vb b/Code/Chapter 17/ContextManipulator/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5569ce3 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ContextManipulator.My.MySettings + Get + Return Global.ContextManipulator.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/ContextManipulator/My Project/Settings.settings b/Code/Chapter 17/ContextManipulator/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 17/ContextManipulator/Program.vb b/Code/Chapter 17/ContextManipulator/Program.vb new file mode 100644 index 0000000..ac64183 --- /dev/null +++ b/Code/Chapter 17/ContextManipulator/Program.vb @@ -0,0 +1,53 @@ +Imports System.Runtime.Remoting.Contexts ' For Context type. +Imports System.Threading ' For Thread type. + +#Region "Car types for context testing" +' SportsCar has no special contextual +' needs and will be loaded into the +' default context of the app domain. +Public Class SportsCar + Public Sub New() + ' Get context information and print out context ID. + Dim ctx As Context = Thread.CurrentContext() + Console.WriteLine("{0} object in context {1}", Me.ToString(), ctx.ContextID) + For Each prop As IContextProperty In ctx.ContextProperties + Console.WriteLine("-> Ctx Prop: {0}", prop.Name) + Next + End Sub +End Class + +' SportsCarTS demands to be loaded in +' a synchronization context. + _ +Public Class SportsCarTS + Inherits ContextBoundObject + + Public Sub New() + ' Get context information and print out context ID. + Dim ctx As Context = Thread.CurrentContext() + Console.WriteLine("{0} object in context {1}", Me.ToString(), ctx.ContextID) + For Each prop As IContextProperty In ctx.ContextProperties + Console.WriteLine("-> Ctx Prop: {0}", prop.Name) + Next + End Sub +End Class +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** The Amazing Context Application *****") + Console.WriteLine() + + ' Objects will display contextual info upon creation. + Dim sport As New SportsCar() + Console.WriteLine() + + Dim sport2 As New SportsCar() + Console.WriteLine() + + Dim synchroSport As New SportsCarTS() + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Application.Designer.vb b/Code/Chapter 17/ProcessManipulator/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Application.myapp b/Code/Chapter 17/ProcessManipulator/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 17/ProcessManipulator/My Project/AssemblyInfo.vb b/Code/Chapter 17/ProcessManipulator/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2c73e33 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Resources.Designer.vb b/Code/Chapter 17/ProcessManipulator/My Project/Resources.Designer.vb new file mode 100644 index 0000000..39b615d --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ProcessManipulator.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Resources.resx b/Code/Chapter 17/ProcessManipulator/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Settings.Designer.vb b/Code/Chapter 17/ProcessManipulator/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9947007 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ProcessManipulator.My.MySettings + Get + Return Global.ProcessManipulator.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 17/ProcessManipulator/My Project/Settings.settings b/Code/Chapter 17/ProcessManipulator/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 17/ProcessManipulator/ProcessManipulator.sln b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.sln new file mode 100644 index 0000000..8a86e34 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ProcessManipulator", "ProcessManipulator.vbproj", "{6B2A5C30-A621-4BDF-B78E-8D7461E2B70D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6B2A5C30-A621-4BDF-B78E-8D7461E2B70D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B2A5C30-A621-4BDF-B78E-8D7461E2B70D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B2A5C30-A621-4BDF-B78E-8D7461E2B70D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B2A5C30-A621-4BDF-B78E-8D7461E2B70D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 17/ProcessManipulator/ProcessManipulator.suo b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.suo new file mode 100644 index 0000000000000000000000000000000000000000..2e59d9408e3060df066f2016a8bd2fdde33dcfa1 GIT binary patch literal 15360 zcmeHOU2Ggz6~1mlXz5RAQUZh$Cax3OCSLrP*p5r+{y7b?8{>8C2#u)LyR-gV@0!_l zQVUwaJB0@xii9e;QbAQfl`0_>o>2Q#p3+K{TJb_bzylI$-*~Fc_uZfD?Ck8$_$Q7H zz1E#OJ9ForbMHOpJLjHz{m#t?KYaQ1qkk2?bYAQeYwP!j1D@w?xM!B>^FrK(8~$Ef zUtd=bg~08nX%CISC*XCzoIK}T#j~xNXn1!7C}ilfY^c!W0p*veTbvbr zB7w3C*Fn*VYY*I}nMkiSk2dMww)X#|noKsVW`cEA2VgTDR`pK7wKPv|IWR9;=R-#KDzH`&)G4rxyML^r;n3L z>yQ8XFPGl<=?m5D-`=>ts&za3>#f&lLlcz!=ac8`D;3AB*zr={b*@_zZrLeToRU4d zVkOGug^E3yu(GARRh@OL*wg6=Yb;x=7Rv6T)$8W1bly&u^NyXI%`R0P*Xr)K$J}zx zsZ>U@rMac$Vzyd#*%qG8JGrVo?o`UlE-J)ary?=yz!RnAVv)jyGz)&BP$vIdN&J2l zISDDZ#VF9*0)i3K7l2c?n8Ys&m{AgWlvObc?69CgPXlQua5sT>71SLOa}w9C;OYS7 z%=1bJa~;4x>NfoaDojXq`MM2PVhfW&R!8K(T?(`-;A95;l8f+UVfKv=5|#cFXx516 zBdM2PnG_1#47k3MU4`Aums+VxUb4qZAB`uuF(U3-Key5(^8*G_@Qu6aWw-z zv$9Vd)uQB)7)i~h*I7X>fJX}`N%UJr?IM2B%UVXSsezUlkSLnOm0wj+R#4_p3h~3+ zOp&8fL=Os*o}p`g-zoZvtDWyZ(IAKM;M`CmYpL0c)sJ7Z@3kt_n#0{zp0S~*-#2r( zw)%ZtXIlJdjz24qJ6gnIi?4;)4F1svH;ww~k78yQL6z&!DQF=5ma@1GoeNH8 zYUa@=jy}_n_!h3)%TEe2)=d7)S|BAk%1R#mm)IucpRqw>_vz;l(T$8NJu5&KXYiEv z+r05pR==VDZH!4Uo)cC68JC<^Lkd}&M)YYE)LhI#y^c>pZo?A&f9ezC9#QE(g1VEs z;Us!bS*S=K#DOmOxzH7x6!8DIh(E^v->57qBw(b>``3BvSL-|PH@uI61ncVte+Gda zebAi&AVy@-?6y<&dJsHqSR#COtbpF2I&e~eRFk7zjFz5AMAZQ z(0qEF#``87GSem?~T|%FW;AR-y(C%^+ zZa@9Y()Ja>1vR$>J5(F_6rO~|z!?8IjM1P^8`b_iin>413yfMMaC7?E0WU@29nr^? zQAe()iRs<&XLx05h96gNGI}9^C}EMxVE*=|R=@cCjsLLUoCG2;SAmQOaR!-i8!>Ga z8~n3ZlfGySJPi4xburvW`HB)j8DuhXW)pwTz|Ika=mFC!4Aa2P;7dbl9f35VNe1;_p^y$xXPc16_e$?HsU4m%41i`wu-BH3| z+r9ecZ~nMFx)L;&UH0P(-o2|f>|ecoD5z%ev+dtG3Z~QS>G@UlW_^t%rC{Q>%#3jD)V>Z9&R>BAFTUj{*CCA(2VWp|#EKEA6Dj82>jo`mB7wC24`? z#V_COck9%?7-IG1sn_SZf(R+;|f!t+|QZJ@!nKfWq&gW(9cn{;0 z(FH`)+C8$-j#DKm#3U0~{qh}8{hS77j$;L!#B=lH8M)$}0CEyl*@lYKa1V*`Jhn3i z?2Y5wVW8_c>a&)L@2TisJ2>&2pw#!;5X*P|%M>0ouFV+}^ZV0r@U?`V@Ld+(^f>t9 z-j`Za1nqj!RUN%n6&~s;vj2_K-^pQLCiVoK+IY~?HQpe=)GPr%Rc0yFI zFlf82S5(gq>hicQ+jaSfF1vKur^^mqp3vnfE;9(0jKHj)F;}?y)d}gI%V}8`W zAY&V}iVLWJ4RP!k;@P%b`4!MN6%&u44#%(;F(DIQDPSyUVJ{>`F0#+N+eRw;rZmUQ zqK$cF1d6d$t~o2{J8gv5^Hp|}eRTI|ADhW)^PbM{*`6|jOh0d0dUqEwtK8AA&Ef91 z4@yD}YS%d5{T@fKhHXcLvAE_PXgUF$xq}&}>JGMbwZKqudA01=$gE-;&*PWZEdO0z2&9h1M^JzGyB+>u# zznz2q**OTG?DeYKJe$hyqk*1RPzI@wAn_eAdU3oj^3?6CI z|E%XTxNZ!7Bqf6yYPjHTyZ2i&GP_;l8%K|QCMFoKl_PU!rM;0yBVAq|cMnc5xa5@u z<$3v0#moEc)Ztd~$6jz6mKc9z+|i`4`h3rJKhPDq|8FcLWh)QaVyXTYg}T@}asPv~ z`F{p1Th~@^d5WT{D`tQbIlac=nP1X(v3hcVKbLS_32Bh==cA~@|7(a!-y8o8X+F|x z(lsg42cAlewpL-dAF;ghcqeT?&#u;MkMa!+e?-<=&Lq=_Z+g1>>8)=BXbYWNafAK( zEk`+xH+dN+W^90%&v=4A4I)<1kElrsTHTA-3D1A^>pT8G)fxFLjgw#fs1t{WH;k6g z;x2{L8&OYvFoqC^p3)b%22PUjfM@WGr@nalhkltl#qN)94*41O{od$F=23}Jj14&G QnOddP$8>xIcKOf$0)4NoLI3~& literal 0 HcmV?d00001 diff --git a/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj new file mode 100644 index 0000000..e13aa88 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {6B2A5C30-A621-4BDF-B78E-8D7461E2B70D} + Exe + ProcessManipulator.Program + ProcessManipulator + ProcessManipulator + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ProcessManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ProcessManipulator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj.user b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/ProcessManipulator.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 17/ProcessManipulator/Program.vb b/Code/Chapter 17/ProcessManipulator/Program.vb new file mode 100644 index 0000000..48fdbf7 --- /dev/null +++ b/Code/Chapter 17/ProcessManipulator/Program.vb @@ -0,0 +1,114 @@ +Imports System.Diagnostics + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Processes *****" & vbLf) + ListAllRunningProcesses() + + ' Prompt user for a PID and print out the set of active threads. + Console.WriteLine("***** Enter PID of process to investigate *****") + Console.Write("PID: ") + Dim pID As String = Console.ReadLine() + Try + Dim theProcID As Integer = Integer.Parse(pID) + EnumThreadsForPid(theProcID) + EnumModsForPid(theProcID) + Catch ex As Exception + Console.WriteLine(ex.Message) + End Try + + ' Launch IE. + StartAndKillProcess() + Console.ReadLine() + End Sub + + +#Region "ListAllRunningProcesses" + Public Sub ListAllRunningProcesses() + ' Get all the processes on the local machine. + Dim runningProcs As Process() = Process.GetProcesses(".") + + ' Print out PID and name of each process. + For Each p As Process In runningProcs + Dim info As String = String.Format("-> PID: {0}" & _ + Chr(9) & "Name: {1}", p.Id, p.ProcessName) + Console.WriteLine(info) + Next + Console.WriteLine("************************************") + Console.WriteLine() + End Sub +#End Region + +#Region "EnumThreadsForPid" + Public Sub EnumThreadsForPid(ByVal pID As Integer) + Dim theProc As Process + Try + theProc = Process.GetProcessById(pID) + Catch + Console.WriteLine("-> Sorry...bad PID!") + Console.WriteLine("************************************") + Console.WriteLine() + Return + End Try + Console.WriteLine("Here are the threads used by: {0}", theProc.ProcessName) + + ' List out stats for each thread in the specified process. + Dim theThreads As ProcessThreadCollection = theProc.Threads + For Each pt As ProcessThread In theThreads + Dim info As String = String.Format("-> Thread ID: {0}" _ + & Chr(9) & "Start Time {1}" & _ + Chr(9) & "Priority {2}", _ + pt.Id, pt.StartTime.ToShortTimeString(), pt.PriorityLevel) + Console.WriteLine(info) + Next + Console.WriteLine("************************************") + Console.WriteLine() + End Sub +#End Region + +#Region "EnumModsForPid" + Public Sub EnumModsForPid(ByVal pID As Integer) + Dim theProc As Process + Try + theProc = Process.GetProcessById(pID) + Catch + Console.WriteLine("-> Sorry...bad PID!") + Console.WriteLine("************************************") + Console.WriteLine() + Return + End Try + Console.WriteLine("Here are the loaded modules for: {0}", theProc.ProcessName) + Try + Dim theMods As ProcessModuleCollection = theProc.Modules + For Each pm As ProcessModule In theMods + Dim info As String = String.Format("-> Mod Name: {0}", pm.ModuleName) + Console.WriteLine(info) + Next + Console.WriteLine("************************************") + Console.WriteLine() + Catch + Console.WriteLine("No mods!") + End Try + End Sub +#End Region + +#Region "StartAndKillProcess" + Public Sub StartAndKillProcess() + ' Launch Internet Explorer. + Console.Write("--> Hit a key to launch IE") + Console.ReadLine() + Dim ieProc As Process = Process.Start("IExplore.exe", _ + "www.intertech.com") + Console.Write("--> Hit a key to kill {0}...", ieProc.ProcessName) + Console.ReadLine() + + ' Kill the iexplorer.exe process. + Try + ieProc.Kill() + Catch ' In case the user already killed it... + End Try + End Sub +#End Region + +End Module diff --git a/Code/Chapter 18/AddWithThreads/AddWithThreads.sln b/Code/Chapter 18/AddWithThreads/AddWithThreads.sln new file mode 100644 index 0000000..9fd9a82 --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/AddWithThreads.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AddWithThreads", "AddWithThreads.vbproj", "{D1D92285-9417-4CC0-9633-2D4076226635}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1D92285-9417-4CC0-9633-2D4076226635}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1D92285-9417-4CC0-9633-2D4076226635}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1D92285-9417-4CC0-9633-2D4076226635}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1D92285-9417-4CC0-9633-2D4076226635}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/AddWithThreads/AddWithThreads.suo b/Code/Chapter 18/AddWithThreads/AddWithThreads.suo new file mode 100644 index 0000000000000000000000000000000000000000..0a32d1cde8d76b5e46bd7fedb135980cf1a1fa58 GIT binary patch literal 19968 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D1D92285-9417-4CC0-9633-2D4076226635} + Exe + AddWithThreads.Program + AddWithThreads + AddWithThreads + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AddWithThreads.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AddWithThreads.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/AddWithThreads/AddWithThreads.vbproj.user b/Code/Chapter 18/AddWithThreads/AddWithThreads.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/AddWithThreads.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/AddWithThreads/My Project/AssemblyInfo.vb b/Code/Chapter 18/AddWithThreads/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..16adffc --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/AddWithThreads/My Project/Resources.Designer.vb b/Code/Chapter 18/AddWithThreads/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7b5f3e2 --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AddWithThreads.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/AddWithThreads/My Project/Resources.resx b/Code/Chapter 18/AddWithThreads/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/AddWithThreads/Program.vb b/Code/Chapter 18/AddWithThreads/Program.vb new file mode 100644 index 0000000..17dc322 --- /dev/null +++ b/Code/Chapter 18/AddWithThreads/Program.vb @@ -0,0 +1,36 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +#Region "AddParams helper class" +Class AddParams + Public a As Integer + Public b As Integer + Public Sub New(ByVal numb1 As Integer, ByVal numb2 As Integer) + a = numb1 + b = numb2 + End Sub +End Class +#End Region + +Module Program + Sub Main(ByVal args As String()) + Console.WriteLine("***** Adding with Thread objects *****") + Console.WriteLine() + + Console.WriteLine("ID of thread in Main(): {0}", Thread.CurrentThread.ManagedThreadId) + Dim ap As AddParams = New AddParams(10, 10) + Dim t As Thread = New Thread(AddressOf Add) + t.Start(ap) + Console.ReadLine() + End Sub + + Public Sub Add(ByVal data As Object) + If TypeOf data Is AddParams Then + Console.WriteLine("ID of thread in Add(): {0}", Thread.CurrentThread.ManagedThreadId) + Dim ap As AddParams = CType(data, AddParams) + Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b) + End If + End Sub +End Module diff --git a/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.sln b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.sln new file mode 100644 index 0000000..79d10d1 --- /dev/null +++ b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AsyncCallbackDelegate", "AsyncCallbackDelegate.vbproj", "{B0358504-04B2-4CA5-93B6-B43E22323E85}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B0358504-04B2-4CA5-93B6-B43E22323E85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0358504-04B2-4CA5-93B6-B43E22323E85}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0358504-04B2-4CA5-93B6-B43E22323E85}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0358504-04B2-4CA5-93B6-B43E22323E85}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.suo b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..994b2495b009f5b69b97ccb101616ac20436115e GIT binary patch literal 17408 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 Xr*}tRASJDYr0(YF literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj new file mode 100644 index 0000000..af5f3c3 --- /dev/null +++ b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B0358504-04B2-4CA5-93B6-B43E22323E85} + Exe + AsyncCallbackDelegate.Program + AsyncCallbackDelegate + AsyncCallbackDelegate + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AsyncCallbackDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AsyncCallbackDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj.user b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/AsyncCallbackDelegate/AsyncCallbackDelegate.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/AsyncCallbackDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 18/AsyncCallbackDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..09d0116 --- /dev/null +++ b/Code/Chapter 18/AsyncCallbackDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/AsyncCallbackDelegate/Program.vb b/Code/Chapter 18/AsyncCallbackDelegate/Program.vb new file mode 100644 index 0000000..e653e9c --- /dev/null +++ b/Code/Chapter 18/AsyncCallbackDelegate/Program.vb @@ -0,0 +1,54 @@ +Option Explicit On +Option Strict On + +Imports System.Threading +Imports System.Runtime.Remoting.Messaging + +' Our delegate. +Public Delegate Function BinaryOp(ByVal x As Integer, _ +ByVal y As Integer) As Integer + +Module Program + Sub Main() + Console.WriteLine("***** AsyncCallbackDelegate Example *****") + Console.WriteLine() + + Console.WriteLine("Main() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + Dim b As BinaryOp = New BinaryOp(AddressOf Add) + + Dim itfAR As IAsyncResult = _ + b.BeginInvoke(10, 10, New AsyncCallback(AddressOf AddComplete), _ + "Main() thanks you for adding these numbers.") + + ' Other work performed here... + + Console.ReadLine() + End Sub + +#Region "Target for AsynchCallback delegate" + ' Don't forget to add a 'imports' directive for + ' System.Runtime.Remoting.Messaging! + Sub AddComplete(ByVal itfAR As IAsyncResult) + Console.WriteLine("AddComplete() invoked on thread {0}.", _ + Thread.CurrentThread.GetHashCode) + Console.WriteLine("Your addition is complete") + + ' Now get the result. + Dim ar As AsyncResult = CType(itfAR, AsyncResult) + Dim b As BinaryOp = CType(ar.AsyncDelegate, BinaryOp) + Console.WriteLine("10 + 10 is {0}.", b.EndInvoke(itfAR)) + + ' Retrieve the informational object and cast it to string + Dim msg As String = CType(itfAR.AsyncState, String) + Console.WriteLine(msg) + End Sub +#End Region + + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Console.WriteLine("Add() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + Thread.Sleep(5000) + Return x + y + End Function +End Module diff --git a/Code/Chapter 18/AsyncDelegate/AsyncDelegate.sln b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.sln new file mode 100644 index 0000000..523250f --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AsyncDelegate", "AsyncDelegate.vbproj", "{79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/AsyncDelegate/AsyncDelegate.suo b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..ac9517598b8177ff0f71adfe366014a941c606f8 GIT binary patch literal 16384 zcmeHOUu;`f89#2<(sh4I_oqNtS}#pYx3(t9nl$M@7TZaaHEFWgX(#Q9;@UTE68{Od z6Bey|;Efm9%LF`tw4s4ek;eAMBq%U}C=aLzA&_`sJfI;YC_>_K3BTVt_t@9h*Voss zX&kW=efM17d+zzZ^PTT}|IW#8Z|{Epjd%9`ML5biu~n?C-!Hb?o(FJGkmch-Y{3nG zudT1ItA|41_M@_iIPf88z0aD%ZKyfl9|PP4su0!HDu6?-g!Cf!@qPV*vG?j5syDW;}lP;&kmH_c{U9i^Ay=uF@Yz}`6 zm=gfA+`Yz6UF;YC9<=?M#Q?o#SyK<#b%1`y^-n#Ze{-x{|LlS~K(Bw!Kc|)Lxc+r} z*3R{R0Pll0?-c_1Zdnt zxIYCr4LAcB2Al(Y4)831?ZT)dfGA)DFbd%FG1TMMJ%3MF_ZLx50j2@ZThC&sbJ>G<;Zp?@UbIQ0AIyLTRZ^%WyzH}@Dt8GzK=tn6vd*L5c5*6&Ejf8%jxGuIllUrZs#{*Pb$lvnCnmKQ`;WWa?4ur1=62F@w51YXR8njEO}F62M^ z;*#@=pZ0evCjrH()Q=Xf{Qm2J2(+vrCgD8J&uRM$;6)Icydc|-;A)`XJZe+kT|--PhLRD4<{!kf?S71+{J@(SXzLgP3L)1m4Ln9&nD(fD<_^ZdChfFPF%&KSmn5Ti0-jJ6s(1Y<4FKxPC{LITx zXR>S;fdHz%@p}Ys4{tlO73u_eoGoS7U~uvvHHIv~33*@sE%QaP2fU^a#Q5zuKREHo zowa|i8y{%vD&BtagZpmbH*r-7C+BSvEw!mpnje(IYG7ry_;*S|co_M;o<6eT7G=N@}+?Y;dI zZ+<)V);IRw8LHP(fOCFj^Z6kC=cM$WvvMY=bG7%p0uAiuJu^C@-?$`omYer%V&>>E zYVVozS?fI~upa8`9~}!ur9>no7o3+6^bfTGSBPKz!+23^2KqU)s9MJLtrl9?oTy!t8PKbg~J;>7RxyU~_8B9;h7 z&$U>TF@OnOZmLPt#K72q#*1Gv}Xi50ejQe%l{ZOO-kaG_s9ib_?y;0cKlOP_hmpuPD0wo`6!+= z%7KCZP2+zG+*#YESj1IG*>GPQ)M__7YIS?%X57a>OLM~-LuciuNN+cM1!eEESOW!_ zHDf-A{z)%1BCjlZo+i;c1(~6)=KB|J(+^^4O$+CxqGATZk{=J@U~Na%RcB|`U%WuQ3vx`qcVU7N32GA zpF!_G#9-ZNgBXF(D{Q2JThV_ffm`R_y!0>k6B`xeKLd=Xo3TG<(f)T<$6olkm)WQg zKmFNe@K2(Bh?9mgd$a2+I(OiA{?wQ1s`DXgWoT)tWd2+8Zu;aZYEPwviFQ%(y?X39xzkj-F-#ZRq|G0q7ES-_SzI}CI zqRiBiRLl$F`nlJY9ImgirWZN^TUmtWU>1kc8OJq?dukP0SnkBE;_V#%l;33{a^but z%26q^VhAn2^>IQ^qT$Rzks%-GX5ky9c86>=0L@r%+jXC1za1Q#v^{sd%yVY@h9WX zX7!(4fBx^YHeU8`+Tx-p1lpOFW-3}I#-d=4Ju&96KbSnGzBVFtt0|<&*eNt%>?peW z_<^GMI+Fb_W4k0GLrQLfoW$Mna3nVEw86B$=fknc6>wMO#X2i)_B%O8-|Bw> zd#P+_2xH+XDxSUUM0s@^&1RyNrkc`LU!J(5UjJ>#kzE{-^E8EA|0pv4=dr)oWt-_P zob!#s`wnA1`HttXkHL$d0fq>k>nB&_X|p&iB>jB$q3kwKRZ$(XpJ_w`!}xX-{{9Tw zvz6NMRQsJ>prrZ?9LH+8Ci0#0av2YljOpDm_q`0t>k|HSWMKe5v)oxL%gcC~Ck&~m zNiolX@w8m!92lbxeG1ILPBwFaY!S1#xqvZp_fz3vB$Jd;j5;?MlE3qy_SwpKxYdEe zjA779!0)o^C#|~6st;Oqk5!+r>Tat(WYveQT6T=fIe_Ai{Un3?xi_5~Ffc#rq#Uzu zjMEk|(iNNp3}Lt4kUr5I#->gQgwTdw%QG-$%$YK8J_lYf<~tvr81K}T<(7#cy^JY4 zQEMriuc+3trlq=8+Ni1RCwG<8!SR`!Y<%2{Wyattw8(1t|5DU=q9YUI91~Cft2wKl z)gUCfa?+DtJSCI41D+h?$yaL0O8@hC=Ds!>tqJaOQsPNz2(+kuJDz6A;7@BY(#mXO zyH;eM)Iwa9J#ZiU00#7tof37P*^Q3qJ*9*4sP;2?j!orH+^A}&zG}=JZ4KNg;eV>! zyLqaX6D`*~nOZ%cnqo>4&v!ZB&O-z9v_7pEPiiDlvn@S>S_>DdvT!_UM4ge8U)18} zoGTy}%RQ|Vv^PV} zY^=1`(x|1&PGjfj3C2)%SqMol)u~nNv~R>3c1o9h)E?t&^vapL(cEqHoqqpc D`~su| literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj new file mode 100644 index 0000000..46a3b74 --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {79BFF25E-C540-4E0D-B915-8F0ABD5CC7B0} + Exe + AsyncDelegate.Program + AsyncDelegate + AsyncDelegate + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AsyncDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AsyncDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj.user b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/AsyncDelegate.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/AsyncDelegate/My Project/Application.Designer.vb b/Code/Chapter 18/AsyncDelegate/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 18/AsyncDelegate/My Project/Application.myapp b/Code/Chapter 18/AsyncDelegate/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 18/AsyncDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 18/AsyncDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4b4fb78 --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/AsyncDelegate/Program.vb b/Code/Chapter 18/AsyncDelegate/Program.vb new file mode 100644 index 0000000..df65be3 --- /dev/null +++ b/Code/Chapter 18/AsyncDelegate/Program.vb @@ -0,0 +1,45 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +' Our custom delegate. +Public Delegate Function BinaryOp(ByVal x As Integer, _ +ByVal y As Integer) As Integer + +Module Program + Sub Main() + Console.WriteLine("***** Async Delegate Invocation *****") + Console.WriteLine() + + ' Print out the ID of the executing thread. + Console.WriteLine("Main() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + + ' Invoke Add() on a secondary thread. + Dim b As BinaryOp = New BinaryOp(AddressOf Add) + Dim itfAR As IAsyncResult = b.BeginInvoke(10, 10, Nothing, Nothing) + + While Not itfAR.AsyncWaitHandle.WaitOne(2000, True) + ' Do other work on primary thread... + Console.WriteLine("Doing more work in Main()!") + Thread.Sleep(1000) + End While + + ' Obtain the result of the Add() + ' method when ready. + Dim answer As Integer = b.EndInvoke(itfAR) + Console.WriteLine("10 + 10 is {0} .", answer) + Console.ReadLine() + End Sub + + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + ' Print out the ID of the executing thread. + Console.WriteLine("Add() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + + ' Pause to simulate a lengthy operation. + Thread.Sleep(5000) + Return x + y + End Function +End Module diff --git a/Code/Chapter 18/BackgroundThread/BackgroundThread.sln b/Code/Chapter 18/BackgroundThread/BackgroundThread.sln new file mode 100644 index 0000000..d615153 --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/BackgroundThread.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BackgroundThread", "BackgroundThread.vbproj", "{D74DB6EB-B064-4D2D-95C0-5534505AEBFD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D74DB6EB-B064-4D2D-95C0-5534505AEBFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D74DB6EB-B064-4D2D-95C0-5534505AEBFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D74DB6EB-B064-4D2D-95C0-5534505AEBFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D74DB6EB-B064-4D2D-95C0-5534505AEBFD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/BackgroundThread/BackgroundThread.suo b/Code/Chapter 18/BackgroundThread/BackgroundThread.suo new file mode 100644 index 0000000000000000000000000000000000000000..41b036a1891bde62bc5f86d52b8e8ef7f70b87a7 GIT binary patch literal 20992 zcmeI4ZH!!18OQGyC{z&SML?`&C+gThJv(=1@66npF5O+z zvw7~hbMCq4dCob{>pAD{?_a<8&1YY_>Tga%y2ClkIXSz^Ss5tr;a=dS4>-;WZUiT1 zXJ<{J<8XT>Eu#^57h2C|^40<80Otal^YeiB0jq%XfeV250~Z1p0Urcl0q0`i65vwc zGT?IHTHp#`E$|`WD&WJwYTzTl8sKUm28eeA*Kz+*|M&Ie*ZB9#XegH@sl!f*zbbQ) za*E_-=NKa&JzWmh*p7=YTBV_1yjGcf@YSBPsC1VYjx+?uk~859fPIv^lylTPhE^Nr-2{QF+=Ex=Y_ z8?YVN0o(%I3fuRx9?irx^&O>u zCsuj&^DnL+{KhN$dWRl(>)oe)-s-5KE-Ux&p7^woxFwS;7W1*RTdj^4 z$10g@wOn!w6}K24xOXHqJd#T6&LrK+WVJM%NgU2jSKV@KS#mF1~7&)}j9-!Lr=Uybc3jPwK5M}(;mVC3Q_+@`r`2;lZzu~)dHCwH8 zz%l!bfJW*3qwYFd}_Mj4$c&+ z<7OuMrl&jLg;A(LarT!=laUE;yB> z_rDD!u<{wK^D!reJ(oOBB0Cx6yPuLQl9VT}VpCo6I5s?m+{Zl0D^M=qvy3dpoXzB_ zo8p?G-4eO$-5sVKNv8Be4Bv1&rTxC-j!{;^Hx!-`u#~Bl^;$5!EAT6bMOr4u8&(el zF-2`NIBsf3et{VWqg6#y*6Y(wv`GPs8j(Ryvx(XYAdPzny2m`tQ^s!*ojGru+UXwQ zNB_?0{;2v#x>~-XQX~F;f8-_^=@OJGCTT^-4d9n=D%?t5qirtI)zABN8u2Usklv4~ zfv@kP|B8|2vnVy<*G!3r()50Yv1n(5z~3YPT=99-{wp?LDI-K0Wqe~uiLCz&b6?<> zqKp}6kOhi)T)rQ^%0Nq*CmCvrE_t)^C_Cl2PB4lW3vlqLhtJ}*zZVO?q3ZPaU!0L+ zJTy1bNVU{##_Gqf+50{#)SBb&RLay))c039Jv~(ayL=LY$G&qW&Vrq1XKz|Dx74`( zq4VV3cqx|A{ffEY#Hu}}1zUssx8Lu*cD9dRcH-oTHG7`>PX34AT=UM3W;M0yrS;1`w3IZ? zdbHF=^v!1OrT(<8xgC0?f0FQ6Gybz{0ZDI0vWAR?YaIU5`o4Hiso`(8u{8#%Vv?wld3S|e0S(0j>3#q+^jG+iSVre3qF)?b8MKArMr^@8O={c~ST@l(!=o~ArWl+L%& z(-B4|EPB%FjQqxFXb+E`TqIW>qm7;vQOu8?4pF9ck6`qq7%dn*`HHFu|0|Ywg)vj~ z*T~D20PTvmsva*D!KOG!oTVs8`bfH{i1ryEE*!xo413oEE5K@1anmHVOY~Q9T4PVP zdZo6fee^u<*)H`Y7z>){OZDV$xJY3f&2fkxD1!OvqV&RAIoZK!sFLMXd~3Xo;7$W1 zh9vQy7LCPwN+DI|6>XrzS8C||qK8$nvUtYQWBi(CR=?Jyzs< z^Ph&2B6?C9NhM|GyC}IH z7rM5ZQP0I`bb+D`ald$V%##;I9cG5?+Jfa^snee<3I{jqK~VB6H%kJ;=~q1d%OypB z`&FRuo?J*zezT-{l7^3`JniBJVy)o(^zl@>br9K`uN~#zFSoe~?}>!&XG>~s`p|Km zNxD`Vmy^W}mlCa)EuWbP=O)E`%T?0DXGJm9i@tm;#kKr!ski+mXWTPJ3MKDOPXneVHcC-e7iYI`-Uc5xc_S2lT6gzw@U z#Pi+?ZHlzy=SA7Y37>hb%Po%I-puQ1?ze@{v!biz;kSj;zmD}H6R%Fe>1A)%Px~2K zUr~IetCESc<{xjl|8?mchxb~)?^O!9oT^{4*!sJ1^sJ}c{^WxhjMc7GdG#b&VS=hCgZeylDY+ZA%=vEXP zopuf3xxnhK?Bx9Qr*^h6>|{fC*3q6mkfnaFZKQT5malgd&gaICWLRNeY;X0g9}T_{ zJbT&0`O6awx$&Nxd0911>QAJH8r#tOyZX}!=?UWjE=6CwovfRcscFyuoN(SQUNQZH z_^Uk=|3`g_VT07|B;t(PW3eIYUzA-`;l{54c5BfQl9@3J)FRI zul2RPA0MY*I&Z0y*-MwR!+N&-D3({K$haN1>GW{BI`M{8+mttdd)cko$)3$F_FUHn z_+Tx&f=Ta;#Xj$uzT~(WPjeW3ouK@7c0^Tj(9@D5tba|z?P|m9z3E(>*1Xlu5GSMi zcy}kB+A#H1%j{X39qYAF68I|4zgORzC4CuSc+c*yhVMqnx@c9@?!IQgU&33S^7jek zE$EE0J;|qYRXXojJIN(q-k#&iu=A^ENHx;_Xim^a?Oz)_+Jnf^zTIz)d%yLa!CiAl zaXbf!62(lh=eUqA^7Cu_e662f>*pK%yw}gy`T2Eze!ZWY*38!#W_*HYAe`YmUQ?|TfsuASV~9E(r2L#w?xon)?Wf1I*#Nogk`S~n8^ zi_*BK2Zcqa)3kaheI^jC`hseq5wd${c)X( zGiSBJsL}^Pr*CwuZ3v@e$7!Xco=+@aYnP>dJ}t%Kq)S7dj-!wD^^Z=z$r9zrRaa+h z=G(h?oxPJ6A$^zg-k6VD-#8WdVlEuFY`=Kj*hKsFjq2*#<@#QP*Nx+Ch%+RimI|#8 z1mCqIv(zPi{^+UC(h1hL(a0<=x6h~1a#xVXrK2ZwRw>8}#zHr0l_2elA;XOv8>DA3 zb-&I?)sLRB4VFGhRt?gL6e}C2HsU%Bmc;Kr0NyZfyPfyh-ntpB8Fj?p3wj6(^hvNY zds5dmz#dPFR=rc`(q<#byiRXO`nAI%f8-cXNBJ}7mfX1*CL#JiyeSdqh?#l0;7-+jU@mNon$KqS> zKk2_Iv`*T8l7AEfv~$wBwt4y)vhBXwZjFCy+ve>4mo!&Y{9mAMZzTNNqTrv~F^YXrB7mGa7)=B4Yb(UT>Br5)+)UEo>K0*FD;Pb$fz!!lp0bd5b z0_d#j*Zf@VD?QEcr~EQKKa-a42!ww4b3DR=tPWI6W7hT0dyW%w=>Yx|jzNs_rSt)T zp|SqB@^L7Bgyjal13a^LYrazN*7nqYyAeFo+svLFz4Jd$&9`Uo#h3TteX{ti%%aFn zC2eH!D#5~)KC@CTuB!d(sP%k8q))9jQ>G(HeLw=ATc2R*cQ5~QX6}E`Y|os+KY;17 z4{1a<=X)OdpC__EWp6ckjQ@G$BG9dq?2q;oI~mR3_YbXGkM`8!Rvzt*g{`%m@&6A- Cb))|P literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj b/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj new file mode 100644 index 0000000..926c22d --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D74DB6EB-B064-4D2D-95C0-5534505AEBFD} + Exe + BackgroundThread.Program + BackgroundThread + BackgroundThread + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BackgroundThread.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BackgroundThread.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj.user b/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/BackgroundThread.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/BackgroundThread/My Project/AssemblyInfo.vb b/Code/Chapter 18/BackgroundThread/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..abdbb15 --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/BackgroundThread/My Project/Resources.Designer.vb b/Code/Chapter 18/BackgroundThread/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9b9fd44 --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BackgroundThread.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/BackgroundThread/My Project/Resources.resx b/Code/Chapter 18/BackgroundThread/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/BackgroundThread/Program.vb b/Code/Chapter 18/BackgroundThread/Program.vb new file mode 100644 index 0000000..b2cfcee --- /dev/null +++ b/Code/Chapter 18/BackgroundThread/Program.vb @@ -0,0 +1,38 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +#Region "Printer class" +Public Class Printer + Public Sub PrintNumbers() + ' Display Thread info. + Console.WriteLine("-> {0} is executing PrintNumbers()", _ + Thread.CurrentThread.Name) + + ' Print out numbers. + Console.Write("Your numbers: ") + For i As Integer = 0 To 10 + Console.Write(i & ", ") + Thread.Sleep(2000) + Next + Console.WriteLine() + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Background Threads *****") + Console.WriteLine() + + Dim p As Printer = New Printer + Dim bgroundThread As Thread = New Thread(AddressOf p.PrintNumbers) + + ' Comment out the line below to force all threads to complete + ' before this app domain shuts down. + bgroundThread.IsBackground = True + + bgroundThread.Start() + End Sub +End Module diff --git a/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.sln b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.sln new file mode 100644 index 0000000..29d91e8 --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MultiThreadedPrinting", "MultiThreadedPrinting.vbproj", "{D251EC20-E917-4C8E-A031-A6C431C5158E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D251EC20-E917-4C8E-A031-A6C431C5158E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D251EC20-E917-4C8E-A031-A6C431C5158E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D251EC20-E917-4C8E-A031-A6C431C5158E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D251EC20-E917-4C8E-A031-A6C431C5158E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.suo b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.suo new file mode 100644 index 0000000000000000000000000000000000000000..843f8d97f39699b70bf66aaa3aa970c92aeca4e7 GIT binary patch literal 20480 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 C&7zzD literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj new file mode 100644 index 0000000..5d7015b --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D251EC20-E917-4C8E-A031-A6C431C5158E} + Exe + MultiThreadedPrinting.Program + MultiThreadedPrinting + MultiThreadedPrinting + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MultiThreadedPrinting.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MultiThreadedPrinting.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj.user b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/MultiThreadedPrinting.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/MultiThreadedPrinting/My Project/AssemblyInfo.vb b/Code/Chapter 18/MultiThreadedPrinting/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7dc091e --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.Designer.vb b/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1f6f203 --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MultiThreadedPrinting.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.resx b/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/MultiThreadedPrinting/Program.vb b/Code/Chapter 18/MultiThreadedPrinting/Program.vb new file mode 100644 index 0000000..532bd80 --- /dev/null +++ b/Code/Chapter 18/MultiThreadedPrinting/Program.vb @@ -0,0 +1,48 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +#Region "Printer class" +Public Class Printer + ' Lock token. + Private threadLock As Object = New Object() + + Public Sub PrintNumbers() + SyncLock threadLock + Console.WriteLine("-> {0} is executing PrintNumbers()", _ + Thread.CurrentThread.Name) + Console.Write("Your numbers: ") + For i As Integer = 0 To 10 + Dim r As Random = New Random() + Thread.Sleep(100 * r.Next(5)) + Console.Write(i & ", ") + Next + Console.WriteLine() + End SyncLock + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Synchronizing Threads *****") + Console.WriteLine() + + Dim p As Printer = New Printer() + + ' Make 11 threads that are all pointing to the same + ' method on the same object. + Dim threads(10) As Thread + For i As Integer = 0 To 10 + threads(i) = New Thread(AddressOf p.PrintNumbers) + threads(i).Name = String.Format("Worker thread #{0}", i) + Next + + ' Now start each one. + For Each t As Thread In threads + t.Start() + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 18/SimpleMultiThreadApp/My Project/AssemblyInfo.vb b/Code/Chapter 18/SimpleMultiThreadApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5dabf56 --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.Designer.vb b/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..ff5ab0c --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleMultiThreadApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.resx b/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/SimpleMultiThreadApp/Program.vb b/Code/Chapter 18/SimpleMultiThreadApp/Program.vb new file mode 100644 index 0000000..a6da584 --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/Program.vb @@ -0,0 +1,58 @@ +Option Explicit On +Option Strict On + +Imports System.Threading +Imports System.Windows.Forms + +#Region "Printer class" +Public Class Printer + Public Sub PrintNumbers() + ' Display Thread info. + Console.WriteLine("-> {0} is executing PrintNumbers()", _ + Thread.CurrentThread.Name) + + ' Print out numbers. + Console.Write("Your numbers: ") + For i As Integer = 0 To 10 + Console.Write(i & ", ") + Thread.Sleep(2000) + Next + Console.WriteLine() + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** The Amazing Thread App *****") + Console.Write("Do you want [1] or [2] threads? ") + Dim threadCount As String = Console.ReadLine() + + ' Name the current thread. + Dim primaryThread As Thread = Thread.CurrentThread + primaryThread.Name = "Primary" + + ' Display Thread info. + Console.WriteLine("-> {0} is executing Main()", Thread.CurrentThread.Name) + + ' Make worker class. + Dim p As Printer = New Printer() + + ' How many threads does the user want? + Select Case threadCount + Case "2" + ' They want an extra thread. + Dim backgroundThread As Thread = New Thread(AddressOf p.PrintNumbers) + backgroundThread.Name = "Secondary" + backgroundThread.Start() + Case "1" + p.PrintNumbers() + Case Else + Console.WriteLine("I don't know what you want...you get 1 thread.") + p.PrintNumbers() + End Select + + MessageBox.Show("I'm busy!", "Work on main thread...") + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.sln b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.sln new file mode 100644 index 0000000..5259865 --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleMultiThreadApp", "SimpleMultiThreadApp.vbproj", "{24F61515-ACF5-4073-A1B6-F3DD99816B37}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24F61515-ACF5-4073-A1B6-F3DD99816B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24F61515-ACF5-4073-A1B6-F3DD99816B37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24F61515-ACF5-4073-A1B6-F3DD99816B37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24F61515-ACF5-4073-A1B6-F3DD99816B37}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.suo b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..1a2e7cd2db9a79ccbfbd62debc66561392a258f8 GIT binary patch literal 19456 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 AwEzGB literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj new file mode 100644 index 0000000..5213c0c --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {24F61515-ACF5-4073-A1B6-F3DD99816B37} + Exe + SimpleMultiThreadApp.Program + SimpleMultiThreadApp + SimpleMultiThreadApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleMultiThreadApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleMultiThreadApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj.user b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/SimpleMultiThreadApp/SimpleMultiThreadApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/SyncDelegate/My Project/AssemblyInfo.vb b/Code/Chapter 18/SyncDelegate/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..14e61dd --- /dev/null +++ b/Code/Chapter 18/SyncDelegate/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/SyncDelegate/Program.vb b/Code/Chapter 18/SyncDelegate/Program.vb new file mode 100644 index 0000000..fb61aef --- /dev/null +++ b/Code/Chapter 18/SyncDelegate/Program.vb @@ -0,0 +1,38 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +' Our custom delegate. +Public Delegate Function BinaryOp(ByVal x As Integer, ByVal y As Integer) As Integer + +Module Program + Sub Main() + Console.WriteLine("***** Synch Delegate Review *****") + Console.WriteLine() + + 'Print out the ID of the executing thread. + Console.WriteLine("Main() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + + ' Invoke Add() in a synchronous manner. + Dim b As BinaryOp = AddressOf Add + Dim answer As Integer = b(10, 10) + + ' These lines will not execute until + ' the Add() method has completed. + Console.WriteLine("Doing more work in Main()!") + Console.WriteLine("10 + 10 is {0}.", answer) + Console.ReadLine() + End Sub + + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + ' Print out the ID of the executing thread. + Console.WriteLine("Add() invoked on thread {0}.", _ + Thread.CurrentThread.ManagedThreadId) + + ' Pause to simulate a lengthy operation. + Thread.Sleep(5000) + Return x + y + End Function +End Module diff --git a/Code/Chapter 18/SyncDelegate/SyncDelegate.sln b/Code/Chapter 18/SyncDelegate/SyncDelegate.sln new file mode 100644 index 0000000..78f7411 --- /dev/null +++ b/Code/Chapter 18/SyncDelegate/SyncDelegate.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SyncDelegate", "SyncDelegate.vbproj", "{08CBDF1A-090C-4206-B42D-56FDAFFC7FA1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {08CBDF1A-090C-4206-B42D-56FDAFFC7FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {08CBDF1A-090C-4206-B42D-56FDAFFC7FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08CBDF1A-090C-4206-B42D-56FDAFFC7FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {08CBDF1A-090C-4206-B42D-56FDAFFC7FA1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/SyncDelegate/SyncDelegate.suo b/Code/Chapter 18/SyncDelegate/SyncDelegate.suo new file mode 100644 index 0000000000000000000000000000000000000000..828219aa855088cfb438f22cf325c2759d131cbe GIT binary patch literal 15872 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 T1J^!DRs}=xUi1l{gbx1$4s-N? literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj b/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj new file mode 100644 index 0000000..ea0d8ea --- /dev/null +++ b/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {08CBDF1A-090C-4206-B42D-56FDAFFC7FA1} + Exe + SyncDelegate.Program + SyncDelegate + SyncDelegate + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SyncDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SyncDelegate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj.user b/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/SyncDelegate/SyncDelegate.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadPoolApp/My Project/AssemblyInfo.vb b/Code/Chapter 18/ThreadPoolApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..8aa06ea --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/ThreadPoolApp/My Project/Resources.Designer.vb b/Code/Chapter 18/ThreadPoolApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..efb6a8d --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ThreadPoolApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/ThreadPoolApp/My Project/Resources.resx b/Code/Chapter 18/ThreadPoolApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadPoolApp/Program.vb b/Code/Chapter 18/ThreadPoolApp/Program.vb new file mode 100644 index 0000000..31eb998 --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/Program.vb @@ -0,0 +1,43 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +#Region "Printer class" +Public Class Printer + Public Sub PrintNumbers() + SyncLock Me + Console.WriteLine("-> {0} is executing PrintNumbers()", _ + Thread.CurrentThread.Name) + Console.Write("Your numbers: ") + For i As Integer = 0 To 10 + Dim r As Random = New Random() + Thread.Sleep(100 * r.Next(5)) + Console.Write(i & ", ") + Next + Console.WriteLine() + End SyncLock + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("Main thread started. ThreadID = {0}", _ + Thread.CurrentThread.GetHashCode) + Dim p As Printer = New Printer + Dim workItem As WaitCallback = AddressOf PrintTheNumbers + + ' Queue the method 10 times + For i As Integer = 0 To 9 + ThreadPool.QueueUserWorkItem(workItem, p) + Next + Console.WriteLine("All tasks queued") + Console.ReadLine() + End Sub + + Sub PrintTheNumbers(ByVal state As Object) + Dim task As Printer = CType(state, Printer) + task.PrintNumbers() + End Sub +End Module diff --git a/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.sln b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.sln new file mode 100644 index 0000000..fccfbb1 --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadPoolApp", "ThreadPoolApp.vbproj", "{4E137050-C7DD-485C-90DE-87945D37728A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4E137050-C7DD-485C-90DE-87945D37728A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E137050-C7DD-485C-90DE-87945D37728A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E137050-C7DD-485C-90DE-87945D37728A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E137050-C7DD-485C-90DE-87945D37728A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.suo b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..9ec17d90c903462607072eabb04d93c777c482e0 GIT binary patch literal 25088 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj new file mode 100644 index 0000000..6385c35 --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4E137050-C7DD-485C-90DE-87945D37728A} + Exe + ThreadPoolApp.Program + ThreadPoolApp + ThreadPoolApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ThreadPoolApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ThreadPoolApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj.user b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 18/ThreadPoolApp/ThreadPoolApp.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadStats/My Project/AssemblyInfo.vb b/Code/Chapter 18/ThreadStats/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ce52da0 --- /dev/null +++ b/Code/Chapter 18/ThreadStats/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/ThreadStats/My Project/Resources.Designer.vb b/Code/Chapter 18/ThreadStats/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a1bbe06 --- /dev/null +++ b/Code/Chapter 18/ThreadStats/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ThreadStats.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/ThreadStats/My Project/Resources.resx b/Code/Chapter 18/ThreadStats/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/ThreadStats/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadStats/Program.vb b/Code/Chapter 18/ThreadStats/Program.vb new file mode 100644 index 0000000..cd107e2 --- /dev/null +++ b/Code/Chapter 18/ThreadStats/Program.vb @@ -0,0 +1,32 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +Module Program + Sub Main() + Console.WriteLine("***** Primary Thread stats *****") + Console.WriteLine() + + ' Obtain and name the current thread. + Dim primaryThread As Thread = Thread.CurrentThread + primaryThread.Name = "ThePrimaryThread" + + ' Show details of hosting AppDomain/Context. + Console.WriteLine("Name of current AppDomain: {0}", _ + Thread.GetDomain().FriendlyName) + Console.WriteLine("ID of current Context: {0}", _ + Thread.CurrentContext.ContextID) + + ' Print out some stats about this thread. + Console.WriteLine("Thread Name: {0}", _ + primaryThread.Name) + Console.WriteLine("Has thread started?: {0}", _ + primaryThread.IsAlive) + Console.WriteLine("Priority Level: {0}", _ + primaryThread.Priority) + Console.WriteLine("Thread State: {0}", _ + primaryThread.ThreadState) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 18/ThreadStats/ThreadStats.sln b/Code/Chapter 18/ThreadStats/ThreadStats.sln new file mode 100644 index 0000000..75b79cb --- /dev/null +++ b/Code/Chapter 18/ThreadStats/ThreadStats.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThreadStats", "ThreadStats.vbproj", "{93400CCC-AE69-44FD-8FA1-528B31158E54}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {93400CCC-AE69-44FD-8FA1-528B31158E54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {93400CCC-AE69-44FD-8FA1-528B31158E54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {93400CCC-AE69-44FD-8FA1-528B31158E54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {93400CCC-AE69-44FD-8FA1-528B31158E54}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/ThreadStats/ThreadStats.suo b/Code/Chapter 18/ThreadStats/ThreadStats.suo new file mode 100644 index 0000000000000000000000000000000000000000..17f13b84af4a30350d3bddc25f425f7d37558357 GIT binary patch literal 17408 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 E2apdO?EnA( literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/ThreadStats/ThreadStats.vbproj b/Code/Chapter 18/ThreadStats/ThreadStats.vbproj new file mode 100644 index 0000000..93abf7d --- /dev/null +++ b/Code/Chapter 18/ThreadStats/ThreadStats.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {93400CCC-AE69-44FD-8FA1-528B31158E54} + Exe + ThreadStats.Program + ThreadStats + ThreadStats + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ThreadStats.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ThreadStats.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/ThreadStats/ThreadStats.vbproj.user b/Code/Chapter 18/ThreadStats/ThreadStats.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/ThreadStats/ThreadStats.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/TimerApp/My Project/AssemblyInfo.vb b/Code/Chapter 18/TimerApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..66d9803 --- /dev/null +++ b/Code/Chapter 18/TimerApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/TimerApp/My Project/Resources.Designer.vb b/Code/Chapter 18/TimerApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..af9bb5c --- /dev/null +++ b/Code/Chapter 18/TimerApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TimerApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/TimerApp/My Project/Resources.resx b/Code/Chapter 18/TimerApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/TimerApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/TimerApp/Program.vb b/Code/Chapter 18/TimerApp/Program.vb new file mode 100644 index 0000000..fdbb2db --- /dev/null +++ b/Code/Chapter 18/TimerApp/Program.vb @@ -0,0 +1,24 @@ +Option Explicit On +Option Strict On + +Imports System.Threading + +Module Program + Sub Main() + Console.WriteLine("***** Working with Timer type *****") + Console.WriteLine() + + ' Pass in the delegate instance, data to send the + ' method 'pointed to', time to wait before starting + ' and interval of time between calles. + Dim t As Timer = New Timer(AddressOf PrintTime, "Hi", 0, 1000) + + Console.WriteLine("Hit key to terminate...") + Console.ReadLine() + End Sub + + Sub PrintTime(ByVal state As Object) + Console.WriteLine("Time is: {0}, Param is: {1}", _ + DateTime.Now.ToLongTimeString, state.ToString()) + End Sub +End Module diff --git a/Code/Chapter 18/TimerApp/TimerApp.sln b/Code/Chapter 18/TimerApp/TimerApp.sln new file mode 100644 index 0000000..89ba6c6 --- /dev/null +++ b/Code/Chapter 18/TimerApp/TimerApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TimerApp", "TimerApp.vbproj", "{E9FA414C-3C25-44A0-80FA-36F39ADA1293}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9FA414C-3C25-44A0-80FA-36F39ADA1293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9FA414C-3C25-44A0-80FA-36F39ADA1293}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9FA414C-3C25-44A0-80FA-36F39ADA1293}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9FA414C-3C25-44A0-80FA-36F39ADA1293}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/TimerApp/TimerApp.suo b/Code/Chapter 18/TimerApp/TimerApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..a78112e1f20323a74450b669979ea30abcee99fe GIT binary patch literal 24064 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 Ho`L@XeJ>*~ literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/TimerApp/TimerApp.vbproj b/Code/Chapter 18/TimerApp/TimerApp.vbproj new file mode 100644 index 0000000..d8ab138 --- /dev/null +++ b/Code/Chapter 18/TimerApp/TimerApp.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E9FA414C-3C25-44A0-80FA-36F39ADA1293} + Exe + TimerApp.Program + TimerApp + TimerApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + TimerApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + TimerApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 18/TimerApp/TimerApp.vbproj.user b/Code/Chapter 18/TimerApp/TimerApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 18/TimerApp/TimerApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.Designer.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.Designer.vb new file mode 100644 index 0000000..f6fecf1 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.Designer.vb @@ -0,0 +1,101 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.Label1 = New System.Windows.Forms.Label + Me.Label2 = New System.Windows.Forms.Label + Me.btnAdd = New System.Windows.Forms.Button + Me.txtNumbOne = New System.Windows.Forms.TextBox + Me.txtNumbTwo = New System.Windows.Forms.TextBox + Me.ProcessNumbersBackgroundWorker = New System.ComponentModel.BackgroundWorker + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(13, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(66, 13) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "First Number" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(13, 63) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(84, 13) + Me.Label2.TabIndex = 1 + Me.Label2.Text = "Second Number" + ' + 'btnAdd + ' + Me.btnAdd.Location = New System.Drawing.Point(197, 103) + Me.btnAdd.Name = "btnAdd" + Me.btnAdd.Size = New System.Drawing.Size(75, 23) + Me.btnAdd.TabIndex = 2 + Me.btnAdd.Text = "Add" + Me.btnAdd.UseVisualStyleBackColor = True + ' + 'txtNumbOne + ' + Me.txtNumbOne.Location = New System.Drawing.Point(132, 13) + Me.txtNumbOne.Name = "txtNumbOne" + Me.txtNumbOne.Size = New System.Drawing.Size(140, 20) + Me.txtNumbOne.TabIndex = 3 + ' + 'txtNumbTwo + ' + Me.txtNumbTwo.Location = New System.Drawing.Point(132, 56) + Me.txtNumbTwo.Name = "txtNumbTwo" + Me.txtNumbTwo.Size = New System.Drawing.Size(140, 20) + Me.txtNumbTwo.TabIndex = 4 + ' + 'ProcessNumbersBackgroundWorker + ' + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(284, 138) + Me.Controls.Add(Me.txtNumbTwo) + Me.Controls.Add(Me.txtNumbOne) + Me.Controls.Add(Me.btnAdd) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Add with Threads (GUI!)" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents btnAdd As System.Windows.Forms.Button + Friend WithEvents txtNumbOne As System.Windows.Forms.TextBox + Friend WithEvents txtNumbTwo As System.Windows.Forms.TextBox + Friend WithEvents ProcessNumbersBackgroundWorker As System.ComponentModel.BackgroundWorker + +End Class diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.resx b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.resx new file mode 100644 index 0000000..6d86ef1 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.vb new file mode 100644 index 0000000..244beab --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/MainForm.vb @@ -0,0 +1,42 @@ +Public Class MainForm + + Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click + Try + ' First get the user data (as numerical). + Dim numbOne As Integer = Integer.Parse(txtNumbOne.Text) + Dim numbTwo As Integer = Integer.Parse(txtNumbTwo.Text) + Dim args As New AddParams(numbOne, numbTwo) + + ' Now spin up the new thread and pass args variable. + ProcessNumbersBackgroundWorker.RunWorkerAsync(args) + Catch ex As Exception + MessageBox.Show(ex.Message) + End Try + End Sub + + Private Sub ProcessNumbersBackgroundWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles ProcessNumbersBackgroundWorker.DoWork + ' Get the incoming AddParam object. + Dim args As AddParams = DirectCast(e.Argument, AddParams) + + ' Artifical lag. + System.Threading.Thread.Sleep(5000) + + ' Return the value. + e.Result = args.a + args.b + End Sub + + Private Sub ProcessNumbersBackgroundWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles ProcessNumbersBackgroundWorker.RunWorkerCompleted + MessageBox.Show(e.Result.ToString(), "Your result is") + End Sub +End Class + +#Region "Add params helper class" +Class AddParams + Public a, b As Integer + + Public Sub New(ByVal numb1 As Integer, ByVal numb2 As Integer) + a = numb1 + b = numb2 + End Sub +End Class +#End Region diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.Designer.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.Designer.vb new file mode 100644 index 0000000..741e5ee --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.WinFormsBackgroundWorkerThread.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.myapp b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/AssemblyInfo.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..de6d152 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.Designer.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.Designer.vb new file mode 100644 index 0000000..cbd50d0 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WinFormsBackgroundWorkerThread.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.resx b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.Designer.vb b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.Designer.vb new file mode 100644 index 0000000..18083b9 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WinFormsBackgroundWorkerThread.My.MySettings + Get + Return Global.WinFormsBackgroundWorkerThread.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.settings b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.sln b/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.sln new file mode 100644 index 0000000..764381c --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WinFormsBackgroundWorkerThread", "WinFormsBackgroundWorkerThread.vbproj", "{D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.suo b/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.suo new file mode 100644 index 0000000000000000000000000000000000000000..02056813d984319be7e661442677b39ed640fc45 GIT binary patch literal 27648 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 E0V()Z`2YX_ literal 0 HcmV?d00001 diff --git a/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.vbproj b/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.vbproj new file mode 100644 index 0000000..63d1bd1 --- /dev/null +++ b/Code/Chapter 18/WinFormsBackgroundWorkerThread/WinFormsBackgroundWorkerThread.vbproj @@ -0,0 +1,123 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D8EB2E8F-ED53-4A48-9D9B-B2B6EFB6709E} + WinExe + WinFormsBackgroundWorkerThread.My.MyApplication + WinFormsBackgroundWorkerThread + WinFormsBackgroundWorkerThread + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + WinFormsBackgroundWorkerThread.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + WinFormsBackgroundWorkerThread.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.sln b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.sln new file mode 100644 index 0000000..297b3ff --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ComUsableDotNetServer", "ComUsableDotNetServer.vbproj", "{E244787D-6D1B-4133-9A2B-AF4879363EC3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E244787D-6D1B-4133-9A2B-AF4879363EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E244787D-6D1B-4133-9A2B-AF4879363EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E244787D-6D1B-4133-9A2B-AF4879363EC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E244787D-6D1B-4133-9A2B-AF4879363EC3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.suo b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.suo new file mode 100644 index 0000000000000000000000000000000000000000..3d2ed299381fb75f22709591d347d4c2380405d4 GIT binary patch literal 18432 zcmeI3+ix6K9mmHGEh#OOk~WkQ(rucgDM=RRLdc~F@vhw@jh(phC284S*1KcZ@m{Rm zjT=KFH4;1`9zjS*Eou?!1E|0QydY?Kpij+1B@p7FAf8Ym{Rf)x`JOY!JG>t2!(%7l(fs z%xS=%@802;ERKr*e%kIA<5C>&xjHNZ#Q%~5VHqI)e>V8e@xS{vECa;lK5*Ppmfm6U~UTejZ2z6Dp&+R+%_C_g$h~?77zJG?l?TYx_N;MNc z(foAgU@AWs8!r~8%cR6OrzDyfoRE?y{Q{BoSTiyHgwj}CS>d&T<8dI+uQ!l^s zqh?Hf#mXtaGHl00cSFIL&X_TcK!Ig%8rq&Ra&45WkCb!I%XWlKubYv-G2V&_M0-se zhF)mRC0kUS{P(>Ka;*>CWkxcIHqa>Aml*O_szi22RQ%nv4aA=}2EGxa19R|U5$!W< zFwZiI40r9yCh*JdaeUXVz1~az$>vfy2S?{vg*4cvxlV%fv^T?AOfi}QqibDQf1`gE zgI~C>Xb~t)Y4Y1EPm*Kf5MnZ2O6I2gLPexqON&j%^76;PA7cq|#Z-PK=ff(C9@6(# zXh_SIcl!QkKoTvNLOadDjR`}~)6h-|`cCj94JBo%E9exTI*tzOhwfvB0`zyUd%Cr34_n!b-!;Gemklg zKYvMs4C|r25k*!@vmL8lzh>VDtWfQayX8DnM^V3Dw8337N*k}?QPwh`)el)KF1t~D?3f95_(h@f;=@0-h?Ip|Ink-U!PMeM!vn(Eo#U z;`F}k97%LX@*&7PGxJYZrdrSpF`S z7G-t!LOa@@S!g*4?J8;|PSlQ6C3}6(ip3o=QN><3fAgIm^=|+EACJHJw>REh_xjnp z2fWfdPxLMgIQD znEa=V@t*RA6Q%Qt_#d(rXQ7Tp-jkvevKwdEyT;bD59i8abk=ivf%TjY-shq7s`V^w zS3xGIe;bL>+FI+m%dCS(i>jqAP5xKbUf!SMSB+e9B}+R|R19q=dsmW2eHM7Xcu#S; zp28SwX}y9Zt0r#CK{;0IX*^mf=^-Ee5jQJuBXfTWW_RO9EKZE-+l0NIA?8qGrDZX= znaDr<*DbhDPLIkCnql=tTN=I9w&9b8fcWaFrO2Nh^zoaZpHbFGSkvsjc*c###siyK zebqrAf0rfyjzfc4gS)_-bByM3MkBpz_ppko@!fLqpEkNroKP?@8Cv;1p0taBD*h*b zUh$Nu`sZu3ecy)d*>iDV*rQj($a(Km(7&ic(p|hz%d>W`oR{q=U5fR?TaeNh&U7XD zTk)L#cEqf!`@3*Y2jD~Te8SM8sG@*QPX%0AztgheZbg~4aHp$t9%fFhXu7c;lIC5# zyW4oq@;N@}2#Q`RAIlEOVWT<8C6U+}^t_lES3QiXT_x{-HCT;9qt)77tDRJ+fu*aqwmNk{3wsP@M&ZMOv-xN~NA{yfadlWb6( zK`AQG&H`MD{i)cWJAXNAuubE;$_jnac&&>$ftLTToEGJ~M4f-w|88afDSxG1(fRlN zG?Ffkihq>0Yqe>Vg{L&_Jefzn`}VIDwN?khsG^>hR{p;<%sUe&Uw1oY*Dai~VUDEd z52FXt6+baWhDl+v#ZkHZ`g*%eyYq)YbGP%FThX6#r`naJoc}(pP6PUDgRL2OYP@-_s5~xoh2BI?q*(YgGK_Y5QK#bNHNBT3vppYMYDM?({`DbN2jK zd3I6p7in7w@Gr~=SZWFSF zT_;49Q@1XiE|lp3YelVUQURlWq%u{H9w<~K3mMXW}&JaQTxtV$)Y*+ONHjYm`tWPv2tZ?Dwn$x z=%&$ZJ9+GiOex;Jx#^D6n9p;lX2dJA=byhiscXHqgc zW4>6}yDUZRm(411|5>Hpl{;HIlE!W0ScUSYjTaT*(J5N^TQ~QcO9{RN$eWLYNgkn}&VStH?O8%_pZUF-Sk{6SGi<#b0qe+Zv{w(dRJTj6yj+7~O^ Q%HdYMvOP!ZZ8`Y=2XX2=F8}}l literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj new file mode 100644 index 0000000..500d24b --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {E244787D-6D1B-4133-9A2B-AF4879363EC3} + Library + ComUsableDotNetServer + ComUsableDotNetServer + Windows + true + TestKey.snk + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + ComUsableDotNetServer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + true + + + pdbonly + false + true + true + bin\Release\ + ComUsableDotNetServer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + true + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + \ No newline at end of file diff --git a/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj.user b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/ComUsableDotNetServer.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 19/ComUsableDotNetServer/DotNetCalc.vb b/Code/Chapter 19/ComUsableDotNetServer/DotNetCalc.vb new file mode 100644 index 0000000..f98acf1 --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/DotNetCalc.vb @@ -0,0 +1,14 @@ +' We need this to obtain the necessary +' interop attributes. +Imports System.Runtime.InteropServices + + _ + _ +Public Class DotNetCalc + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer + Return x - y + End Function +End Class diff --git a/Code/Chapter 19/ComUsableDotNetServer/DotNetPerson.vb b/Code/Chapter 19/ComUsableDotNetServer/DotNetPerson.vb new file mode 100644 index 0000000..7cee111 --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/DotNetPerson.vb @@ -0,0 +1,27 @@ + _ +Public Class DotNetPerson + +#Region "COM GUIDs" + ' These GUIDs provide the COM identity for this class + ' and its COM interfaces. If you change them, existing + ' clients will no longer be able to access the class. + Public Const ClassId As String = "6ff9b796-d080-4515-9fed-ddd7ffe225b2" + Public Const InterfaceId As String = "14147f5a-a7b9-48c5-a545-3c2d66f089ad" + Public Const EventsId As String = "19d005f1-4164-4116-8066-585f6ad6b2eb" +#End Region + + ' A creatable COM class must have a Public Sub New() + ' with no parameters, otherwise, the class will not be + ' registered in the COM registry and cannot be created + ' via CreateObject. + Public Sub New() + MyBase.New() + End Sub + + Public Function GetMessage() As String + Return "I am alive..." + End Function + +End Class + + diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.Designer.vb b/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.Designer.vb new file mode 100644 index 0000000..0e8f9f4 --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.myapp b/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/AssemblyInfo.vb b/Code/Chapter 19/ComUsableDotNetServer/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..00b02e8 --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.Designer.vb b/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5bb830d --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ComUsableDotNetServer.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.resx b/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.Designer.vb b/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6fde97b --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ComUsableDotNetServer.My.MySettings + Get + Return Global.ComUsableDotNetServer.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.settings b/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 19/ComUsableDotNetServer/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 19/ComUsableDotNetServer/TestKey.snk b/Code/Chapter 19/ComUsableDotNetServer/TestKey.snk new file mode 100644 index 0000000000000000000000000000000000000000..a8eaf388041b5441ddb7f86014d3ca56913c2c0d GIT binary patch literal 596 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 kcSg3`9eM+o7X|@1cgDTmO(Xm$I5VGjGpF literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/SimpleComServer/SimpleComServer.lib b/Code/Chapter 19/SimpleComServer/SimpleComServer.lib new file mode 100644 index 0000000000000000000000000000000000000000..70a55f9d4a4e5c9774ed6f4f404bda6af9ec9b9f GIT binary patch literal 2742 zcmc&#&2G~`5FXoU(z+ZX;EEcgfWjsJf0a;_kkAq}O^TCT>o|#Nf}FTG0gk*tAAute zz>#AQ9D3l)vEo?q5@pu*I{qtZL@GvF@9wwbo!M_@b{{{Nw85yvCn8QsrFM(SbRk*X zb>c~Lnn}@7j|YHl0B#Q;cnlCa1K>+W+Y$iuc7Z*%%}dfmv3_{e5;|h-WxFcWk2)y|Wid+&4e2)V- z4g#Fvq=YdLwg4`$U2f{(fDmjz5CXseYmGU=j>8M@`Mu{v#D~#;h@nNX!xam45pUrx znl0Sp+|nFLxX53Y?H2Ws9`DM(_)t+GK|^C!$FltjnY5|d;~NYIuiuUKe=}Gc7}s9_ z%r=98{hNewkp+ydA+)#ug6V;RibU7y%_)KYqr``D|NTj{OU}eH$r;O#JU8|7cD$0s|eWCB#Dr;DEJ-6$ynz!CbC%@#T;tZ>v$K22E EA0ELFN&o-= literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/SimpleComServer/SimpleComServer.vbp b/Code/Chapter 19/SimpleComServer/SimpleComServer.vbp new file mode 100644 index 0000000..2c23160 --- /dev/null +++ b/Code/Chapter 19/SimpleComServer/SimpleComServer.vbp @@ -0,0 +1,33 @@ +Type=OleDll +Class=ComCalc; ComCalc.cls +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\..\..\Windows\system32\stdole2.tlb#OLE Automation +Startup="(None)" +HelpFile="" +ExeName32="SimpleComServer.dll" +Command32="" +Name="SimpleComServer" +HelpContextID="0" +CompatibleMode="2" +CompatibleEXE32="SimpleComServer.dll" +VersionCompatible32="1" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=1 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 +ThreadingModel=1 diff --git a/Code/Chapter 19/SimpleComServer/SimpleComServer.vbw b/Code/Chapter 19/SimpleComServer/SimpleComServer.vbw new file mode 100644 index 0000000..c7ef535 --- /dev/null +++ b/Code/Chapter 19/SimpleComServer/SimpleComServer.vbw @@ -0,0 +1 @@ +ComCalc = 23, 23, 846, 731, C diff --git a/Code/Chapter 19/Vb6ComCarServer/CoCar.cls b/Code/Chapter 19/Vb6ComCarServer/CoCar.cls new file mode 100644 index 0000000..aec70c3 --- /dev/null +++ b/Code/Chapter 19/Vb6ComCarServer/CoCar.cls @@ -0,0 +1,77 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True + Persistable = 0 'NotPersistable + DataBindingBehavior = 0 'vbNone + DataSourceBehavior = 0 'vbNone + MTSTransactionMode = 0 'NotAnMTSObject +END +Attribute VB_Name = "CoCar" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = True +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Implements IDriverInfo + +Option Explicit + +' A COM enum. +Enum CarType + Viper + Colt + BMW +End Enum + +' A COM Event. +Public Event BlewUp() + +' Member variables. +Private currSp As Integer +Private maxSp As Integer +Private make As CarType +Private driverName As String +Private eng As Engine + +' Remember! All Public members +' are exposed by the default interface! +Public Property Get currentSpeed() As Integer + currentSpeed = currSp +End Property + +Public Property Get carMake() As CarType + carMake = make +End Property + +Public Sub SpeedUp() + currSp = currSp + 10 + If currSp > maxSp Then + RaiseEvent BlewUp ' Fire event If you max out the engine. + End If +End Sub + +Private Sub Class_Initialize() + MsgBox "Init COM car" +End Sub + +Public Sub Create(ByVal maximumSpeed As Integer, _ + ByVal currentSpeed As Integer, ByVal carMake As CarType) + maxSp = maximumSpeed + currSp = currentSpeed + make = carMake + Set eng = New Engine +End Sub + +' ***** IDriverInfo impl ***** ' +Private Property Let IDriverInfo_DriverName(ByVal RHS As String) + driverName = RHS +End Property +Private Property Get IDriverInfo_DriverName() As String + IDriverInfo_DriverName = driverName +End Property + +' Return the Engine to the world. +Public Function GetEngine() As Engine + Set GetEngine = eng +End Function + + diff --git a/Code/Chapter 19/Vb6ComCarServer/Engine.cls b/Code/Chapter 19/Vb6ComCarServer/Engine.cls new file mode 100644 index 0000000..f3abe79 --- /dev/null +++ b/Code/Chapter 19/Vb6ComCarServer/Engine.cls @@ -0,0 +1,24 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True + Persistable = 0 'NotPersistable + DataBindingBehavior = 0 'vbNone + DataSourceBehavior = 0 'vbNone + MTSTransactionMode = 0 'NotAnMTSObject +END +Attribute VB_Name = "Engine" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Option Explicit + +Public Function GetCylinders() As String() + Dim c(3) As String + c(0) = "Grimey" + c(1) = "Thumper" + c(2) = "Oily" + c(3) = "Crusher" + GetCylinders = c +End Function + diff --git a/Code/Chapter 19/Vb6ComCarServer/IDriverInfo.cls b/Code/Chapter 19/Vb6ComCarServer/IDriverInfo.cls new file mode 100644 index 0000000..5c4694b --- /dev/null +++ b/Code/Chapter 19/Vb6ComCarServer/IDriverInfo.cls @@ -0,0 +1,21 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True + Persistable = 0 'NotPersistable + DataBindingBehavior = 0 'vbNone + DataSourceBehavior = 0 'vbNone + MTSTransactionMode = 0 'NotAnMTSObject +END +Attribute VB_Name = "IDriverInfo" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = True +Option Explicit + +' Driver has a name +Public Property Let driverName(ByVal s As String) +End Property +Public Property Get driverName() As String +End Property + diff --git a/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.dll b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.dll new file mode 100644 index 0000000000000000000000000000000000000000..34538140ea17f0e3d3ea53b83630040499fd02ec GIT binary patch literal 28672 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 G2mS|izIG-6 literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.exp b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.exp new file mode 100644 index 0000000000000000000000000000000000000000..90dbc7d88932f142785f610ae67ecb05c37570b2 GIT binary patch literal 1060 zcma)4O>fgc5S=82K>1Jv7Y>N7P!0hhtI!G|ghUc2N~0!Dt=U-R#3279+F@LQ+T0m$*txcTv$ThO;tTWecb}vC0DsVD?YpTF>AOiXntzsyloVU8yd;(Db)-zg_^L+VhOK}qJVmT% z#t`YeRj4E0(yW2FtJyom+nT*XyrcrHTV~5DV57GgApUYekU^g?G+cvqE!NFIJc&Q!F412C^$2pb2PP%d8g&H;2#tZ(W?Le literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.lib b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.lib new file mode 100644 index 0000000000000000000000000000000000000000..89ff360e4be326fac8a6f7371e76508e9757410e GIT binary patch literal 2742 zcmc&#&2HL25FTR!iPHmWdaXh$TG0#tzfwh^&`=Ztk%1m#47drE!I7cuu`iHE=&=vb zV~;uXkVDTsMmhPq*#lv<3BSwON-sclT*QK z1+ls`ugcL#oj}jY6gZIag4t1e`0~yb6l`@20#>OLY zE=E!me}IE8sQ1m#C1)%{;@r^7S@nKe^ax&t@HtY39AlB7Fo`Jagh(anOyTW?9HL5o>%qvUELuGP`u3qi>;rg1|rLiNv z`GB6d44`>?LJ{q3#2!nL4ADUVOr7ikA$XL03?aJ%RE!zvd@#W8-QLBk)&%DSME4=uzVT(_R%R=ox3Hz(B0tcA z9&2y5@Nu?@g{>@IAQ}0cPK@4CWf{6e^zc!)$vRlQ4Ue6d|Wk$0(gHXKZL95Xw zL+<8?c1FMJ_4KOpRil_Kc-wr6HW|F(-7oZATlMKy9nbALtme#j(#|irsaV~r>oNDT F`v*!D2i^bx literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbp b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbp new file mode 100644 index 0000000..e5a1e9c --- /dev/null +++ b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbp @@ -0,0 +1,33 @@ +Type=OleDll +Class=CoCar; CoCar.cls +Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\..\Windows\system32\stdole2.tlb#OLE Automation +Class=IDriverInfo; IDriverInfo.cls +Class=Engine; Engine.cls +Startup="(None)" +ExeName32="Vb6ComCarServer.dll" +Command32="" +Name="Vb6ComCarServer" +HelpContextID="0" +CompatibleMode="1" +CompatibleEXE32="Vb6ComCarServer.dll" +MajorVer=1 +MinorVer=0 +RevisionVer=0 +AutoIncrementVer=0 +ServerSupportFiles=0 +CompilationType=0 +OptimizationType=0 +FavorPentiumPro(tm)=0 +CodeViewDebugInfo=0 +NoAliasing=0 +BoundsCheck=0 +OverflowCheck=0 +FlPointCheck=0 +FDIVCheck=0 +UnroundedFP=0 +StartMode=1 +Unattended=0 +Retained=0 +ThreadPerObject=0 +MaxNumberOfThreads=1 +ThreadingModel=1 diff --git a/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbw b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbw new file mode 100644 index 0000000..a62e201 --- /dev/null +++ b/Code/Chapter 19/Vb6ComCarServer/Vb6ComCarServer.vbw @@ -0,0 +1,3 @@ +CoCar = 362, 193, 1185, 903, C +IDriverInfo = 131, 330, 954, 1038, C +Engine = 69, 69, 892, 777, C diff --git a/Code/Chapter 19/Vb6_DotNetClient/Form1.frm b/Code/Chapter 19/Vb6_DotNetClient/Form1.frm new file mode 100644 index 0000000..86d152c --- /dev/null +++ b/Code/Chapter 19/Vb6_DotNetClient/Form1.frm @@ -0,0 +1,34 @@ +VERSION 5.00 +Begin VB.Form Form1 + Caption = "A COM Application using a .NET Type" + ClientHeight = 3480 + ClientLeft = 120 + ClientTop = 420 + ClientWidth = 5040 + LinkTopic = "Form1" + ScaleHeight = 3480 + ScaleWidth = 5040 + StartUpPosition = 3 'Windows Default + Begin VB.CommandButton btnUseDotNetObject + Caption = "Use COM Object" + Height = 735 + Left = 240 + TabIndex = 0 + Top = 240 + Width = 4455 + End +End +Attribute VB_Name = "Form1" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = False +Private Sub btnUseDotNetObject_Click() + ' Create the .NET object. + Dim c As New DotNetCalc + MsgBox c.Add(10, 10), , "Adding with .NET" + + ' Invoke some members of System.Object. + MsgBox c.ToString, , "ToString value" +End Sub + diff --git a/Code/Chapter 19/Vb6_DotNetClient/VB6_DotNetClient.exe b/Code/Chapter 19/Vb6_DotNetClient/VB6_DotNetClient.exe new file mode 100644 index 0000000000000000000000000000000000000000..fbf07c97a357206618449d5191e8d0c8c7cc60e2 GIT binary patch literal 16384 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 jcaF}Xisx(KKcBCuY#1dY14agn3>X +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 19/VbNetCarClient/My Project/Application.myapp b/Code/Chapter 19/VbNetCarClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 19/VbNetCarClient/My Project/AssemblyInfo.vb b/Code/Chapter 19/VbNetCarClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..f5d8758 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 19/VbNetCarClient/My Project/Resources.Designer.vb b/Code/Chapter 19/VbNetCarClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..ff96504 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

+ ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VbNetCarClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetCarClient/My Project/Resources.resx b/Code/Chapter 19/VbNetCarClient/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetCarClient/My Project/Settings.Designer.vb b/Code/Chapter 19/VbNetCarClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..981330a --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VbNetCarClient.My.MySettings + Get + Return Global.VbNetCarClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetCarClient/My Project/Settings.settings b/Code/Chapter 19/VbNetCarClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 19/VbNetCarClient/Program.vb b/Code/Chapter 19/VbNetCarClient/Program.vb new file mode 100644 index 0000000..98aa915 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/Program.vb @@ -0,0 +1,43 @@ +Imports Vb6ComCarServer + +Module Program + ' Create the COM class using + ' Early binding. + Public WithEvents myCar As New CoCar() + + Sub Main() + Console.WriteLine("***** CoCar Client App *****") + + ' Call the Create() method. + myCar.Create(50, 10, CarType.BMW) + + ' Set name of driver. + Dim itf As IDriverInfo + itf = myCar + itf.driverName = "Fred" + Console.WriteLine("Driver is named: {0}", itf.driverName) + + ' Print type of car. + Console.WriteLine("Your car is a {0}.", myCar.CarMake()) + Console.WriteLine() + + ' Get the Engine and print name of all Cylinders. + Dim eng As Engine = myCar.GetEngine() + Console.WriteLine("Your Cylinders are named:") + Dim names() As String = eng.GetCylinders() + For Each s As String In names + Console.WriteLine(s) + Next + Console.WriteLine() + + ' Speed up car to trigger event. + For i As Integer = 0 To 3 + myCar.SpeedUp() + Next + Console.ReadLine() + End Sub + + Private Sub myCar_BlewUp() Handles myCar.BlewUp + Console.WriteLine("***** Ek! Car is doomed...! *****") + End Sub +End Module diff --git a/Code/Chapter 19/VbNetCarClient/VbNetCarClient.sln b/Code/Chapter 19/VbNetCarClient/VbNetCarClient.sln new file mode 100644 index 0000000..5552161 --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/VbNetCarClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VbNetCarClient", "VbNetCarClient.vbproj", "{112E4781-AA4D-4426-B476-CA204ACA0D66}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {112E4781-AA4D-4426-B476-CA204ACA0D66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {112E4781-AA4D-4426-B476-CA204ACA0D66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {112E4781-AA4D-4426-B476-CA204ACA0D66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {112E4781-AA4D-4426-B476-CA204ACA0D66}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 19/VbNetCarClient/VbNetCarClient.suo b/Code/Chapter 19/VbNetCarClient/VbNetCarClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..74b01dab80510ee511b4611a62ec378929a2b6ab GIT binary patch literal 16384 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 + + + Debug + AnyCPU + 9.0.20706 + 2.0 + {112E4781-AA4D-4426-B476-CA204ACA0D66} + Exe + VbNetCarClient.Program + VbNetCarClient + VbNetCarClient + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + VbNetCarClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VbNetCarClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + {266052E5-26B1-40F6-AE35-3220EE31CCD0} + 4 + 0 + 0 + tlbimp + False + + + + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetCarClient/VbNetCarClient.vbproj.user b/Code/Chapter 19/VbNetCarClient/VbNetCarClient.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 19/VbNetCarClient/VbNetCarClient.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.Designer.vb b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.Designer.vb new file mode 100644 index 0000000..0e8f9f4 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.myapp b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/AssemblyInfo.vb b/Code/Chapter 19/VbNetComClientLateBinding/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b954175 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.Designer.vb b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.Designer.vb new file mode 100644 index 0000000..20eb1c5 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.312 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VBNetComClientLateBinding.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.resx b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.Designer.vb b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.Designer.vb new file mode 100644 index 0000000..980f3d6 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VBNetComClientLateBinding.My.MySettings + Get + Return Global.VBNetComClientLateBinding.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.settings b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 19/VbNetComClientLateBinding/Program.vb b/Code/Chapter 19/VbNetComClientLateBinding/Program.vb new file mode 100644 index 0000000..759fa88 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/Program.vb @@ -0,0 +1,33 @@ +' If you uncomment the following line, +' using CreateObject() within Main() +' will result in a compiler error! +' Option Strict On + +Imports System.Reflection + +Module Program + Sub Main() + Console.WriteLine("***** The Late Bound .NET Client *****") + + ' First get IDispatch reference from coclass. + Dim calcObj As Type = _ + Type.GetTypeFromProgID("SimpleCOMServer.ComCalc") + Dim calcDisp As Object = Activator.CreateInstance(calcObj) + + ' Make the array of args. + Dim addArgs() As Object = {100, 24} + + ' Invoke the Add() method and obtain summation. + Dim sum As Object + sum = calcObj.InvokeMember("Add", BindingFlags.InvokeMethod, _ + Nothing, calcDisp, addArgs) + + ' Display result. + Console.WriteLine("Late bound adding: 100 + 24 is: {0}", sum) + + ' This will only compile if Option Strict is disabled. + Dim c As Object = CreateObject("SimpleCOMServer.ComCalc") + Console.WriteLine("10 + 10 = {0}", c.Add(10, 10)) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.sln b/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.sln new file mode 100644 index 0000000..1d1c463 --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VBNetComClientLateBinding", "VBNetComClientLateBinding.vbproj", "{D2138C69-D32B-4AB8-8B75-0068E1565D0A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D2138C69-D32B-4AB8-8B75-0068E1565D0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D2138C69-D32B-4AB8-8B75-0068E1565D0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2138C69-D32B-4AB8-8B75-0068E1565D0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D2138C69-D32B-4AB8-8B75-0068E1565D0A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.suo b/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.suo new file mode 100644 index 0000000000000000000000000000000000000000..de673aa8912a4a6c29652e1a228ba8f1ef7e25b8 GIT binary patch literal 16384 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D2138C69-D32B-4AB8-8B75-0068E1565D0A} + Exe + VBNetComClientLateBinding.Program + VBNetComClientLateBinding + VBNetComClientLateBinding + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + VBNetComClientLateBinding.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VBNetComClientLateBinding.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.vbproj.user b/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 19/VbNetComClientLateBinding/VBNetComClientLateBinding.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.Designer.vb b/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..0e8f9f4 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.myapp b/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/AssemblyInfo.vb b/Code/Chapter 19/VbNetSimpleComClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a227cbe --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.Designer.vb b/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c45a7ec --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VBNetSimpleComClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.resx b/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.Designer.vb b/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..20125ba --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1378 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VBNetSimpleComClient.My.MySettings + Get + Return Global.VBNetSimpleComClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.settings b/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 19/VbNetSimpleComClient/My Project/app.manifest b/Code/Chapter 19/VbNetSimpleComClient/My Project/app.manifest new file mode 100644 index 0000000..65cc22c --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/My Project/app.manifest @@ -0,0 +1,22 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 19/VbNetSimpleComClient/Program.vb b/Code/Chapter 19/VbNetSimpleComClient/Program.vb new file mode 100644 index 0000000..b65d493 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/Program.vb @@ -0,0 +1,33 @@ +' You will need to compile the VB 6 project +' included in Appendix A in order for VS 2008 +' to find the interop assembly. +Imports SimpleComServer + +' As explained the the text, there are THREE different +' ways to interact with a COM object, each shown below. +' Uncomment / Comment a block to test. + +Module Program + Sub Main() + Console.WriteLine("***** The .NET COM Client App *****") + + 'Dim comObj As New ComCalc() + 'Console.WriteLine("COM server says 10 + 832 is {0}", _ + ' comObj.Add(10, 832)) + 'Console.ReadLine() + + '' Now using the Class-suffixed type. + 'Dim comObj As New ComCalcClass() + 'Console.WriteLine("COM server says 10 + 832 is {0}", _ + ' comObj.Add(10, 832)) + 'Console.ReadLine() + + ' Now manually obtain the hidden interface. + Dim i As _ComCalc + Dim c As New ComCalc() + i = c + Console.WriteLine("COM server says 10 + 832 is {0}", _ + i.Add(10, 832)) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.sln b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.sln new file mode 100644 index 0000000..1c6efb0 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VBNetSimpleComClient", "VBNetSimpleComClient.vbproj", "{ED805B00-8B05-4028-A799-8D6218A51CD1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED805B00-8B05-4028-A799-8D6218A51CD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED805B00-8B05-4028-A799-8D6218A51CD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED805B00-8B05-4028-A799-8D6218A51CD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED805B00-8B05-4028-A799-8D6218A51CD1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.suo b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..ded0c024bf5814363d4e101238f87e9bf6840eae GIT binary patch literal 16384 zcmeHOU2Ggz6~3Fap{1drNl8lx>C{a^(k5HSb`s~OA^YPbZtTQ(9j6k5%6fO~*xubS zyK5&_6Dd5SP!JFN2&7g@X%$dKfrs))pIQkN5J(jWiB{qPAxd~eLbdt6`{SLRo!y
A=co6 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 F{{wEKn`!_6 literal 0 HcmV?d00001 diff --git a/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj new file mode 100644 index 0000000..02d8871 --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj @@ -0,0 +1,113 @@ + + + + Debug + AnyCPU + 9.0.20706 + 2.0 + {ED805B00-8B05-4028-A799-8D6218A51CD1} + Exe + VBNetSimpleComClient.Program + VBNetSimpleComClient + VBNetSimpleComClient + Console + + + 2.0 + + + My Project\app.manifest + v3.5 + + + true + full + true + true + bin\Debug\ + VBNetSimpleComClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VBNetSimpleComClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + {36D90E8D-919C-47B3-AA93-0CB4DFEC1A75} + 1 + 0 + 0 + tlbimp + False + + + + + \ No newline at end of file diff --git a/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj.user b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 19/VbNetSimpleComClient/VBNetSimpleComClient.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 2/VbcExample/HelloMsg.vb b/Code/Chapter 2/VbcExample/HelloMsg.vb new file mode 100644 index 0000000..ed2dfaa --- /dev/null +++ b/Code/Chapter 2/VbcExample/HelloMsg.vb @@ -0,0 +1,9 @@ +' The HelloMessage class +Imports System +Imports System.Windows.Forms + +Class HelloMessage + Sub Speak() + MessageBox.Show("Hello Again") + End Sub +End Class diff --git a/Code/Chapter 2/VbcExample/TestApp.rsp b/Code/Chapter 2/VbcExample/TestApp.rsp new file mode 100644 index 0000000..feb536e --- /dev/null +++ b/Code/Chapter 2/VbcExample/TestApp.rsp @@ -0,0 +1,9 @@ +# This is the response file +# for the TestApp.exe app +# of Chapter 2. + +# External assembly references. +/r:System.Windows.Forms.dll + +# output and files to compile (using wildcard syntax). +/target:exe /out:TestApp.exe *.vb diff --git a/Code/Chapter 2/VbcExample/TestApp.vb b/Code/Chapter 2/VbcExample/TestApp.vb new file mode 100644 index 0000000..63641b6 --- /dev/null +++ b/Code/Chapter 2/VbcExample/TestApp.vb @@ -0,0 +1,18 @@ +' A simple VB 2008 application. +Imports System + +' Don't need this anymore. +' Imports System.Windows.Forms + +Module TestApp + Sub Main() + Console.WriteLine("Testing! 1, 2, 3") + + ' Don't need this anymore either. + ' MessageBox.Show("Hello!") + + ' Exercise the HelloMessage class! + Dim hello As New HelloMessage() + hello.Speak() + End Sub +End Module diff --git a/Code/Chapter 20/AsyncFileStream/AsyncFileStream.sln b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.sln new file mode 100644 index 0000000..e1f06a8 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AsyncFileStream", "AsyncFileStream.vbproj", "{CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/AsyncFileStream/AsyncFileStream.suo b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.suo new file mode 100644 index 0000000000000000000000000000000000000000..dcf576db4040d165a31b58b58b7b228cda98640f GIT binary patch literal 21504 zcmeI4ZE##w8OLv0UIkmRr9v!aX$ur7Ynm2lDJ^6-X(^;MBx#GfSht&-*UfI+-K2y! z0bfvOoDp9EQHp}Y;0#(nI68wL><9y2EW;NWKgo=M-}Hmy@Ie}X|9kGq-fZ^eZd#gz z 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 KXA{T$5&sYK8Hcg} literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj new file mode 100644 index 0000000..7136958 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj @@ -0,0 +1,97 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {CFD0A539-82D8-40A3-B9A0-0F07BCBDE61A} + Exe + AsyncFileStream.Program + AsyncFileStream + AsyncFileStream + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + AsyncFileStream.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AsyncFileStream.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj.user b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/AsyncFileStream.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Application.Designer.vb b/Code/Chapter 20/AsyncFileStream/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Application.myapp b/Code/Chapter 20/AsyncFileStream/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/AsyncFileStream/My Project/AssemblyInfo.vb b/Code/Chapter 20/AsyncFileStream/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..319474b --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Resources.Designer.vb b/Code/Chapter 20/AsyncFileStream/My Project/Resources.Designer.vb new file mode 100644 index 0000000..836031f --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AsyncFileStream.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Resources.resx b/Code/Chapter 20/AsyncFileStream/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Settings.Designer.vb b/Code/Chapter 20/AsyncFileStream/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b90d2a8 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AsyncFileStream.My.MySettings + Get + Return Global.AsyncFileStream.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/AsyncFileStream/My Project/Settings.settings b/Code/Chapter 20/AsyncFileStream/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/AsyncFileStream/Program.vb b/Code/Chapter 20/AsyncFileStream/Program.vb new file mode 100644 index 0000000..5520002 --- /dev/null +++ b/Code/Chapter 20/AsyncFileStream/Program.vb @@ -0,0 +1,35 @@ +Option Explicit On +Option Strict On + +Imports System.IO +Imports System.Text +Imports System.Threading + +Module Program + Sub Main() + Console.WriteLine("**** Asynch File IO *****") + Console.WriteLine() + + Console.WriteLine("Main thread started. ThreadID = {0}", _ + Thread.CurrentThread.GetHashCode) + + ' Must use this ctor to get a FileStream with asynchronous + ' read or write access. + Dim fs As FileStream = New FileStream("logfile.txt", FileMode.Append, FileAccess.Write, FileShare.None, 4096, True) + Dim msg As String = "this is a test" + Dim buffer As Byte() = Encoding.ASCII.GetBytes(msg) + + ' Start the asynchronous write. WriteDone invoked when finished. + ' Note that the FileStream object is passed as state info to the + ' callback method. + fs.BeginWrite(buffer, 0, buffer.Length, AddressOf WriteDone, fs) + End Sub + + Private Sub WriteDone(ByVal ar As IAsyncResult) + Console.WriteLine("AsyncCallback method on ThreadID = {0}", _ + Thread.CurrentThread.GetHashCode) + Dim s As Stream = CType(ar.AsyncState, Stream) + s.EndWrite(ar) + s.Close() + End Sub +End Module diff --git a/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.sln b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.sln new file mode 100644 index 0000000..0bd1ba3 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BinaryWriterReader", "BinaryWriterReader.vbproj", "{FFB4361F-C139-4879-BF57-6CFB6528D5BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FFB4361F-C139-4879-BF57-6CFB6528D5BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFB4361F-C139-4879-BF57-6CFB6528D5BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFB4361F-C139-4879-BF57-6CFB6528D5BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFB4361F-C139-4879-BF57-6CFB6528D5BB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.suo b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.suo new file mode 100644 index 0000000000000000000000000000000000000000..37dbdff79913522a3df6a44ee7477f767e62cae5 GIT binary patch literal 19968 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 GboxIf{ix{x literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj new file mode 100644 index 0000000..0c45885 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {FFB4361F-C139-4879-BF57-6CFB6528D5BB} + Exe + BinaryWriterReader.Program + BinaryWriterReader + BinaryWriterReader + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BinaryWriterReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BinaryWriterReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj.user b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/BinaryWriterReader.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Application.Designer.vb b/Code/Chapter 20/BinaryWriterReader/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Application.myapp b/Code/Chapter 20/BinaryWriterReader/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/AssemblyInfo.vb b/Code/Chapter 20/BinaryWriterReader/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..405c173 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Resources.Designer.vb b/Code/Chapter 20/BinaryWriterReader/My Project/Resources.Designer.vb new file mode 100644 index 0000000..766a122 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BinaryWriterReader.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Resources.resx b/Code/Chapter 20/BinaryWriterReader/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Settings.Designer.vb b/Code/Chapter 20/BinaryWriterReader/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5512583 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BinaryWriterReader.My.MySettings + Get + Return Global.BinaryWriterReader.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/BinaryWriterReader/My Project/Settings.settings b/Code/Chapter 20/BinaryWriterReader/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/BinaryWriterReader/Program.vb b/Code/Chapter 20/BinaryWriterReader/Program.vb new file mode 100644 index 0000000..856f1f8 --- /dev/null +++ b/Code/Chapter 20/BinaryWriterReader/Program.vb @@ -0,0 +1,38 @@ +Option Explicit On +Option Strict On + +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Binary Writers / Readers *****" & vbLf) + + ' Open a binary writer for a file. + Dim f As New FileInfo("BinFile.dat") + + Using bw As New BinaryWriter(f.OpenWrite()) + ' Print out the type of BaseStream. + ' (System.IO.FileStream in this case). + Console.WriteLine("Base stream is: {0}", bw.BaseStream) + + ' Create some data to save in the file + Dim aDouble As Double = 1234.67 + Dim anInt As Integer = 34567 + Dim aString As String = "A, B, C" + + ' Write the data + bw.Write(aDouble) + bw.Write(anInt) + bw.Write(aString) + End Using + + ' Read the data as raw bytes + Using br As New BinaryReader(f.OpenRead()) + Console.WriteLine(br.ReadDouble()) + Console.WriteLine(br.ReadInt32()) + Console.WriteLine(br.ReadString()) + End Using + + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 20/DriveTypeApp/DriveTypeApp.sln b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.sln new file mode 100644 index 0000000..408c57d --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DriveTypeApp", "DriveTypeApp.vbproj", "{998A37BD-7EF2-4670-838A-628F2EF112AD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {998A37BD-7EF2-4670-838A-628F2EF112AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {998A37BD-7EF2-4670-838A-628F2EF112AD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {998A37BD-7EF2-4670-838A-628F2EF112AD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {998A37BD-7EF2-4670-838A-628F2EF112AD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/DriveTypeApp/DriveTypeApp.suo b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..03200ccec128271e34a8d3400020ff2f0209a703 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj new file mode 100644 index 0000000..cee640a --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {998A37BD-7EF2-4670-838A-628F2EF112AD} + Exe + DriveTypeApp.Program + DriveTypeApp + DriveTypeApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + DriveTypeApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DriveTypeApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj.user b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj.user new file mode 100644 index 0000000..a9e2ad6 --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/DriveTypeApp.vbproj.user @@ -0,0 +1,16 @@ + + + ProjectFiles + publish\ + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Application.Designer.vb b/Code/Chapter 20/DriveTypeApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Application.myapp b/Code/Chapter 20/DriveTypeApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/DriveTypeApp/My Project/AssemblyInfo.vb b/Code/Chapter 20/DriveTypeApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4747a3f --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Resources.Designer.vb b/Code/Chapter 20/DriveTypeApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..861823c --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DriveTypeApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Resources.resx b/Code/Chapter 20/DriveTypeApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Settings.Designer.vb b/Code/Chapter 20/DriveTypeApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9e6004a --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.DriveTypeApp.My.MySettings + Get + Return Global.DriveTypeApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/DriveTypeApp/My Project/Settings.settings b/Code/Chapter 20/DriveTypeApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/DriveTypeApp/Program.vb b/Code/Chapter 20/DriveTypeApp/Program.vb new file mode 100644 index 0000000..9c74d54 --- /dev/null +++ b/Code/Chapter 20/DriveTypeApp/Program.vb @@ -0,0 +1,26 @@ +Option Explicit On +Option Strict On + +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** Fun with DriveInfo *****") + Dim myDrives As DriveInfo() = DriveInfo.GetDrives() + + ' Print stats about each drive. + For Each d As DriveInfo In myDrives + Console.WriteLine("******************************") + Console.WriteLine("-> Name: {0}", d.Name) + Console.WriteLine("-> Type: {0}", d.DriveType) + + ' Is the drive mounted? + If d.IsReady Then + Console.WriteLine("-> Free space: {0}", d.TotalFreeSpace) + Console.WriteLine("-> Format: {0}", d.DriveFormat) + Console.WriteLine("-> Label: {0}", d.VolumeLabel) + End If + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 20/FileStreamApp/FileStreamApp.sln b/Code/Chapter 20/FileStreamApp/FileStreamApp.sln new file mode 100644 index 0000000..af4fc88 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/FileStreamApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FileStreamApp", "FileStreamApp.vbproj", "{EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/FileStreamApp/FileStreamApp.suo b/Code/Chapter 20/FileStreamApp/FileStreamApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..af77effafc4efaa8ebfbbbddb3ac158c95d992a9 GIT binary patch literal 17920 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 TXH|z(Jc<1W&cnUZnKSS|ebIg3 literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj b/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj new file mode 100644 index 0000000..f625e2c --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {EAAE0BEB-F9CD-41E4-BB3E-DEC0C2B19657} + Exe + FileStreamApp.Program + FileStreamApp + FileStreamApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FileStreamApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FileStreamApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj.user b/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/FileStreamApp.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 20/FileStreamApp/My Project/Application.Designer.vb b/Code/Chapter 20/FileStreamApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/FileStreamApp/My Project/Application.myapp b/Code/Chapter 20/FileStreamApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/FileStreamApp/My Project/AssemblyInfo.vb b/Code/Chapter 20/FileStreamApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a7e8da8 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/FileStreamApp/My Project/Resources.Designer.vb b/Code/Chapter 20/FileStreamApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..fb00615 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FileStreamApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/FileStreamApp/My Project/Resources.resx b/Code/Chapter 20/FileStreamApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/FileStreamApp/My Project/Settings.Designer.vb b/Code/Chapter 20/FileStreamApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a577226 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FileStreamApp.My.MySettings + Get + Return Global.FileStreamApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/FileStreamApp/My Project/Settings.settings b/Code/Chapter 20/FileStreamApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/FileStreamApp/Program.vb b/Code/Chapter 20/FileStreamApp/Program.vb new file mode 100644 index 0000000..f6f4e37 --- /dev/null +++ b/Code/Chapter 20/FileStreamApp/Program.vb @@ -0,0 +1,41 @@ +Option Explicit On +Option Strict On + +Imports System.IO +Imports System.Text + +Module Program + Sub Main() + Console.WriteLine("***** Fun with FileStreams *****") + Console.WriteLine() + + ' Obtain a FileStream object. + Using fStream As FileStream = File.Open("C:\myMessage.dat", FileMode.Create) + ' Encode a string as an array of bytes. + Dim msg As String = "Hello!" + Dim msgAsByteArray As Byte() = Encoding.Default.GetBytes(msg) + + ' Write byte[] to file. + fStream.Write(msgAsByteArray, 0, msgAsByteArray.Length) + + ' Reset internal position of stream. + fStream.Position = 0 + + ' Read the types from file and display to console. + Console.Write("Your message as an array of bytes: ") + Dim bytesFromFile(msgAsByteArray.Length) As Byte + Dim i As Integer = 0 + While i < msgAsByteArray.Length + bytesFromFile(i) = CType(fStream.ReadByte, Byte) + Console.Write(bytesFromFile(i)) + i = i + 1 + End While + + ' Display decoded messages. + Console.WriteLine() + Console.Write("Decoded Message: ") + Console.WriteLine(Encoding.Default.GetString(bytesFromFile)) + End Using + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Application.Designer.vb b/Code/Chapter 20/MyDirectoryApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Application.myapp b/Code/Chapter 20/MyDirectoryApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/AssemblyInfo.vb b/Code/Chapter 20/MyDirectoryApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..baa4039 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Resources.Designer.vb b/Code/Chapter 20/MyDirectoryApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e296040 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyDirectoryApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Resources.resx b/Code/Chapter 20/MyDirectoryApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Settings.Designer.vb b/Code/Chapter 20/MyDirectoryApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b59cb69 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyDirectoryApp.My.MySettings + Get + Return Global.MyDirectoryApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/MyDirectoryApp/My Project/Settings.settings b/Code/Chapter 20/MyDirectoryApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.sln b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.sln new file mode 100644 index 0000000..9b57b1d --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyDirectoryApp", "MyDirectoryApp.vbproj", "{2B6255BA-48D7-4ED3-B237-288B1B9FDB18}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2B6255BA-48D7-4ED3-B237-288B1B9FDB18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B6255BA-48D7-4ED3-B237-288B1B9FDB18}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B6255BA-48D7-4ED3-B237-288B1B9FDB18}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B6255BA-48D7-4ED3-B237-288B1B9FDB18}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.suo b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..88a6b7a40bb031cd6611602c9f89ca3fad9ca93a GIT binary patch literal 19456 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj new file mode 100644 index 0000000..40776ac --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2B6255BA-48D7-4ED3-B237-288B1B9FDB18} + Exe + MyDirectoryApp.Program + MyDirectoryApp + MyDirectoryApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyDirectoryApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyDirectoryApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj.user b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/MyDirectoryApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryApp/Program.vb b/Code/Chapter 20/MyDirectoryApp/Program.vb new file mode 100644 index 0000000..c18c128 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryApp/Program.vb @@ -0,0 +1,81 @@ +Option Explicit On +Option Strict On + +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Directory(Info) *****") + Console.WriteLine() + + ShowWindowsDirectoryInfo() + DisplayImageFiles() + ModifyWindowsDirectory() + FunWithDirectoryType() + + Console.ReadLine() + End Sub + +#Region "Helper methods" + Sub ShowWindowsDirectoryInfo() + ' Get basic info about C:\Windows + Dim dir As New DirectoryInfo("C:\Windows") + Console.WriteLine("***** Directory Info *****") + Console.WriteLine("FullName: {0} ", dir.FullName) + Console.WriteLine("Name: {0} ", dir.Name) + Console.WriteLine("Parent: {0} ", dir.Parent) + Console.WriteLine("Creation: {0} ", dir.CreationTime) + Console.WriteLine("Attributes: {0} ", dir.Attributes) + Console.WriteLine("Root: {0} ", dir.Root) + Console.WriteLine("**************************") + Console.WriteLine() + End Sub + + Sub DisplayImageFiles() + ' Get all files with a *.jpg extension. + Dim dir As New DirectoryInfo("C:\Windows\Web\Wallpaper") + Dim bitmapFiles As FileInfo() = dir.GetFiles("*.jpg") + Console.WriteLine("Found {0} *.jpg files", bitmapFiles.Length) + For Each f As FileInfo In bitmapFiles + Console.WriteLine() + Console.WriteLine("File name: {0}", f.Name) + Console.WriteLine("File size: {0}", f.Length) + Console.WriteLine("Creation: {0}", f.CreationTime) + Console.WriteLine("Attributes: {0}", f.Attributes) + Console.WriteLine() + Console.WriteLine("***************************") + Next + End Sub + + Sub ModifyWindowsDirectory() + Dim dir As New DirectoryInfo("C:\Windows") + + ' Create \MyFolder off initial directory. + dir.CreateSubdirectory("MyFolder") + + ' Create \MyFolder2\Data off initial directory. + dir.CreateSubdirectory("MyFolder2\Data") + End Sub + + Sub FunWithDirectoryType() + ' Use Directory type. + Dim drives As String() = Directory.GetLogicalDrives() + Console.WriteLine("Here are your drives:") + For Each s As String In drives + Console.WriteLine("—>{0}", s) + Next + + ' Delete the directories we created. + Console.WriteLine("Press Enter to delete directories") + Console.ReadLine() + Try + Directory.Delete("C:\Windows\MyFolder") + Directory.Delete("C:\Windows\MyFolder2\Data") + Catch e As IOException + Console.WriteLine(e.Message) + End Try + End Sub +#End Region + +End Module + diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.Designer.vb b/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.myapp b/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/AssemblyInfo.vb b/Code/Chapter 20/MyDirectoryWatcher/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a0648b0 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.Designer.vb b/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c04e55e --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyDirectoryWatcher.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.resx b/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.Designer.vb b/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.Designer.vb new file mode 100644 index 0000000..ba01c51 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyDirectoryWatcher.My.MySettings + Get + Return Global.MyDirectoryWatcher.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.settings b/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.sln b/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.sln new file mode 100644 index 0000000..99a90e3 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyDirectoryWatcher", "MyDirectoryWatcher.vbproj", "{D7053C65-D85C-49B7-8DE3-2587F58B5C55}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7053C65-D85C-49B7-8DE3-2587F58B5C55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7053C65-D85C-49B7-8DE3-2587F58B5C55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7053C65-D85C-49B7-8DE3-2587F58B5C55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7053C65-D85C-49B7-8DE3-2587F58B5C55}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.suo b/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.suo new file mode 100644 index 0000000000000000000000000000000000000000..5474a27d44165d0ec43ea52b125ad52f6d7f10e9 GIT binary patch literal 20480 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 xsa)AS=Lw3&=xumKt>sfHiaAIOXp}qovOd + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D7053C65-D85C-49B7-8DE3-2587F58B5C55} + Exe + MyDirectoryWatcher.Program + MyDirectoryWatcher + MyDirectoryWatcher + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyDirectoryWatcher.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyDirectoryWatcher.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.vbproj.user b/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/MyDirectoryWatcher.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 20/MyDirectoryWatcher/Program.vb b/Code/Chapter 20/MyDirectoryWatcher/Program.vb new file mode 100644 index 0000000..8562549 --- /dev/null +++ b/Code/Chapter 20/MyDirectoryWatcher/Program.vb @@ -0,0 +1,46 @@ +Option Explicit On +Option Strict On + +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** The Amazing File Watcher App *****") + + ' Create and configre the watcher. + Dim watcher As New FileSystemWatcher() + Try + watcher.Path = "C:\MyFolder" + Catch ex As ArgumentException + Console.WriteLine(ex.Message) + Return + End Try + watcher.NotifyFilter = NotifyFilters.LastAccess Or _ + NotifyFilters.LastWrite Or _ + NotifyFilters.FileName Or _ + NotifyFilters.DirectoryName + watcher.Filter = "*.txt" + + ' Establish event handlers. + AddHandler watcher.Changed, AddressOf OnFileModified + AddHandler watcher.Created, AddressOf OnFileModified + AddHandler watcher.Deleted, AddressOf OnFileModified + AddHandler watcher.Renamed, AddressOf OnFileRenamed + watcher.EnableRaisingEvents = True + + Console.WriteLine("Press 'q' to quit app.") + Console.ReadLine() + End Sub + + ' Event handlers. + Sub OnFileModified(ByVal source As Object, ByVal e As FileSystemEventArgs) + ' Specify what is done when a file is changed, created, or deleted. + Console.WriteLine("File: {0} {1}!", e.FullPath, e.ChangeType) + End Sub + + Sub OnFileRenamed(ByVal source As Object, ByVal e As RenamedEventArgs) + ' Specify what is done when a file is renamed. + Console.WriteLine("File: {0} renamed to {1}.", e.OldFullPath, e.FullPath) + End Sub +End Module + diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Application.Designer.vb b/Code/Chapter 20/SimpleFileIO/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Application.myapp b/Code/Chapter 20/SimpleFileIO/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/SimpleFileIO/My Project/AssemblyInfo.vb b/Code/Chapter 20/SimpleFileIO/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9178d16 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Resources.Designer.vb b/Code/Chapter 20/SimpleFileIO/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9961869 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleFileIO.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Resources.resx b/Code/Chapter 20/SimpleFileIO/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Settings.Designer.vb b/Code/Chapter 20/SimpleFileIO/My Project/Settings.Designer.vb new file mode 100644 index 0000000..91cc2f5 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleFileIO.My.MySettings + Get + Return Global.SimpleFileIO.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/SimpleFileIO/My Project/Settings.settings b/Code/Chapter 20/SimpleFileIO/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/SimpleFileIO/Program.vb b/Code/Chapter 20/SimpleFileIO/Program.vb new file mode 100644 index 0000000..ea408a6 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/Program.vb @@ -0,0 +1,19 @@ +Imports System.IO + +Module Program + Sub Main() + ' Write these strings to a new file on the C drive. + Dim myTasks As String() = {"Fix bathroom sink", _ + "Call Dave", "Call Mom and Dad", _ + "Play Xbox 360"} + File.WriteAllLines("C:\tasks.txt", myTasks) + + ' Now read in each one and print to the console. + For Each task As String In File.ReadAllLines("C:\tasks.txt") + Console.WriteLine("TODO: {0}.", task) + Next + + Console.ReadLine() + + End Sub +End Module diff --git a/Code/Chapter 20/SimpleFileIO/SimpleFileIO.sln b/Code/Chapter 20/SimpleFileIO/SimpleFileIO.sln new file mode 100644 index 0000000..1727966 --- /dev/null +++ b/Code/Chapter 20/SimpleFileIO/SimpleFileIO.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleFileIO", "SimpleFileIO.vbproj", "{785A99ED-A908-4A22-A9A0-0404F2D39515}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {785A99ED-A908-4A22-A9A0-0404F2D39515}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {785A99ED-A908-4A22-A9A0-0404F2D39515}.Debug|Any CPU.Build.0 = Debug|Any CPU + {785A99ED-A908-4A22-A9A0-0404F2D39515}.Release|Any CPU.ActiveCfg = Release|Any CPU + {785A99ED-A908-4A22-A9A0-0404F2D39515}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/SimpleFileIO/SimpleFileIO.suo b/Code/Chapter 20/SimpleFileIO/SimpleFileIO.suo new file mode 100644 index 0000000000000000000000000000000000000000..dbe010a63de2a409754aa3f22d7c91ecd9db30e1 GIT binary patch literal 17408 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 tEX>Z + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {785A99ED-A908-4A22-A9A0-0404F2D39515} + Exe + SimpleFileIO.Program + SimpleFileIO + SimpleFileIO + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + SimpleFileIO.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleFileIO.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.Designer.vb b/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.myapp b/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/AssemblyInfo.vb b/Code/Chapter 20/StreamWriterReaderApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..197dd0e --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.Designer.vb b/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..4659377 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("StreamWriterReaderApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.resx b/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.Designer.vb b/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..60dc233 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.StreamWriterReaderApp.My.MySettings + Get + Return Global.StreamWriterReaderApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.settings b/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/StreamWriterReaderApp/Program.vb b/Code/Chapter 20/StreamWriterReaderApp/Program.vb new file mode 100644 index 0000000..6758e77 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/Program.vb @@ -0,0 +1,31 @@ +Option Explicit On +Option Strict On + +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** Fun with StreamWriter / StreamReader *****") + Console.WriteLine() + + ' Get a StreamWriter and write string data. + Using writer As StreamWriter = File.CreateText("reminders.txt") + writer.WriteLine("Don't forget Mother's Day this year...") + writer.WriteLine("Don't forget Father's Day this year...") + writer.WriteLine("Don't forget these numbers:") + For i As Integer = 0 To 10 + writer.Write(String.Format("{0},", i)) + Next + + ' Insert a new line and close. + writer.Write(writer.NewLine) + End Using + Console.WriteLine("Created file and wrote some thoughts...") + + Console.WriteLine("Here are your thoughts:") + Using sr As StreamReader = File.OpenText("reminders.txt") + Console.WriteLine(sr.ReadToEnd()) + End Using + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.sln b/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.sln new file mode 100644 index 0000000..403c671 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StreamWriterReaderApp", "StreamWriterReaderApp.vbproj", "{0AFD07A5-2964-4594-A6AC-9C4F17EA19A9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0AFD07A5-2964-4594-A6AC-9C4F17EA19A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AFD07A5-2964-4594-A6AC-9C4F17EA19A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AFD07A5-2964-4594-A6AC-9C4F17EA19A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AFD07A5-2964-4594-A6AC-9C4F17EA19A9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.suo b/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..0617093d873bd6fc07ec5b8b8b3c861cfc2eda9e GIT binary patch literal 20480 zcmeI4-*a766~|9nDL<7Tg#xvfOIk{S_S&W?O?_T@&7hhlfo>x)!c+0&rbC-K7LigJ^7npL5=Plzz zaAt09&ffGqPA`@v#DR~X^-~O947dc)cwY)!4qOIY0bB)K349v(3~)8D5w$LQ2H;lUM&KskW?(h&SzrzDIbbbt3m~}>tmAwGus*ma_UZn`a{f6m=;in;GX8yD zmOAgvG78blDx}6ysWEO;zINHOgYn6?+m@?Q%(ff=W6nG7?FaifXMNr&`yk?R6&A?h zR~_+ZMt0S9t9Q58>Ge==;keV=%&~*>Eu3xTua~oWvIAioApMsekPVRj%MQo}d>K%Cr~mF9 zvH{Y6y}y?JtDW>;we&v*s3*FX4Uqod2FMoN4r~PO0PY0t0@QAEP=B6!OK{#ny$$FD zwgYzqJAf`=C$J0H4cr6V3+w^z1MUa9fgT_M^a6drUSJ>a0I(l;5O@eU02~A!2Ks>k z;1OUD7y^z1qET>!^GAU%0ABMsFDfhPdn8>JotQa~0M2PS}HKpIe+N$LzR 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {0AFD07A5-2964-4594-A6AC-9C4F17EA19A9} + Exe + StreamWriterReaderApp.Program + StreamWriterReaderApp + StreamWriterReaderApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + StreamWriterReaderApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + StreamWriterReaderApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.vbproj.user b/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 20/StreamWriterReaderApp/StreamWriterReaderApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Application.Designer.vb b/Code/Chapter 20/StringReaderWriterApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Application.myapp b/Code/Chapter 20/StringReaderWriterApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/AssemblyInfo.vb b/Code/Chapter 20/StringReaderWriterApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..630bb4a --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.Designer.vb b/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8006dc8 --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("StringReaderWriterApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.resx b/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.Designer.vb b/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..da62f9c --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.StringReaderWriterApp.My.MySettings + Get + Return Global.StringReaderWriterApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.settings b/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 20/StringReaderWriterApp/Program.vb b/Code/Chapter 20/StringReaderWriterApp/Program.vb new file mode 100644 index 0000000..86ba7ef --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/Program.vb @@ -0,0 +1,40 @@ +Option Explicit On +Option Strict On + +Imports System.IO +Imports System.Text + +Module Program + Sub Main() + Console.WriteLine("***** Fun with StringWriter / StringReader *****") + Console.WriteLine() + + ' Create a StringWriter and emit character data + ' to memory. + Using strWriter As New StringWriter() + strWriter.Write("Don't forget Mother's Day this year...") + ' Get a copy of the contents (stored in a string) and pump + ' to console. + Console.WriteLine("Contents of StringWriter: {0}", strWriter) + + + ' Get the internal StringBuilder. + Dim sb As StringBuilder = strWriter.GetStringBuilder() + sb.Insert(0, "Hey!! ") + Console.WriteLine("-> {0}", sb.ToString()) + + ' Remove the inserted string. + sb.Remove(0, "Hey!! ".Length) + Console.WriteLine("-> {0}", sb.ToString()) + + ' Now dump using a StringReader. + Console.WriteLine("-> Here are your thoughts:") + Using strReader As New StringReader(strWriter.ToString()) + Dim input As String = strReader.ReadToEnd() + Console.WriteLine(input) + End Using + End Using + + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.sln b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.sln new file mode 100644 index 0000000..4d1f8d7 --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StringReaderWriterApp", "StringReaderWriterApp.vbproj", "{A61B2E5C-127C-4A97-BBA2-2FE8B758E351}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A61B2E5C-127C-4A97-BBA2-2FE8B758E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A61B2E5C-127C-4A97-BBA2-2FE8B758E351}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A61B2E5C-127C-4A97-BBA2-2FE8B758E351}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A61B2E5C-127C-4A97-BBA2-2FE8B758E351}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.suo b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..fa475e04e7afc52851c564c7cd700824eb3e403c GIT binary patch literal 18944 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 P+T*=-{1_L1xYqvza27rJ literal 0 HcmV?d00001 diff --git a/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj new file mode 100644 index 0000000..36559a7 --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A61B2E5C-127C-4A97-BBA2-2FE8B758E351} + Exe + StringReaderWriterApp.Program + StringReaderWriterApp + StringReaderWriterApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + StringReaderWriterApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + StringReaderWriterApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj.user b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 20/StringReaderWriterApp/StringReaderWriterApp.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 21/CustomSerialization/CustomData.vb b/Code/Chapter 21/CustomSerialization/CustomData.vb new file mode 100644 index 0000000..4083a00 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/CustomData.vb @@ -0,0 +1,55 @@ +Option Explicit On +Option Strict On + +Imports System.Runtime.Serialization + +#Region "Using ISerializable" + _ +Class MyStringData + Implements ISerializable + + Public dataItemOne As String + Public dataItemTwo As String + + Public Sub New() + End Sub + + ' Called by formatter when object graph is being deseralized. + Private Sub New(ByVal si As SerializationInfo, ByVal ctx As StreamingContext) + dataItemOne = si.GetString("First_Item").ToLower() + dataItemTwo = si.GetString("dataItemTwo").ToLower() + End Sub + + ' Called by formatter when object is being serialized. + Public Sub GetObjectData(ByVal info As SerializationInfo, _ + ByVal context As StreamingContext) Implements ISerializable.GetObjectData + info.AddValue("First_Item", dataItemOne.ToUpper()) + info.AddValue("dataItemTwo", dataItemTwo.ToUpper()) + End Sub +End Class +#End Region + +#Region "Using attributes" + _ +Class MoreStringData + Public dataItemOne As String + Public dataItemTwo As String + + ' This method is called by the formatter when the + ' object is being serialized. + _ + Private Sub OnSerializing(ByVal context As StreamingContext) + dataItemOne = dataItemOne.ToUpper() + dataItemTwo = dataItemTwo.ToUpper() + End Sub + + ' This method is called by the formatter when the + ' object is being deserialized. + _ + Private Sub OnDeserialized(ByVal context As StreamingContext) + dataItemOne = dataItemOne.ToLower() + dataItemTwo = dataItemTwo.ToLower() + End Sub +End Class + +#End Region \ No newline at end of file diff --git a/Code/Chapter 21/CustomSerialization/CustomSerialization.sln b/Code/Chapter 21/CustomSerialization/CustomSerialization.sln new file mode 100644 index 0000000..3527b5a --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/CustomSerialization.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomSerialization", "CustomSerialization.vbproj", "{598D0255-E338-48C3-AD7C-AB284777EB64}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {598D0255-E338-48C3-AD7C-AB284777EB64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {598D0255-E338-48C3-AD7C-AB284777EB64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {598D0255-E338-48C3-AD7C-AB284777EB64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {598D0255-E338-48C3-AD7C-AB284777EB64}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 21/CustomSerialization/CustomSerialization.suo b/Code/Chapter 21/CustomSerialization/CustomSerialization.suo new file mode 100644 index 0000000000000000000000000000000000000000..05bab496eed6df22e7d9a25b205af5017f0a1704 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj b/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj new file mode 100644 index 0000000..a17d3ea --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {598D0255-E338-48C3-AD7C-AB284777EB64} + Exe + CustomSerialization.Program + CustomSerialization + CustomSerialization + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CustomSerialization.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomSerialization.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj.user b/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/CustomSerialization.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 21/CustomSerialization/My Project/Application.Designer.vb b/Code/Chapter 21/CustomSerialization/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 21/CustomSerialization/My Project/Application.myapp b/Code/Chapter 21/CustomSerialization/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 21/CustomSerialization/My Project/AssemblyInfo.vb b/Code/Chapter 21/CustomSerialization/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c79bc15 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 21/CustomSerialization/My Project/Resources.Designer.vb b/Code/Chapter 21/CustomSerialization/My Project/Resources.Designer.vb new file mode 100644 index 0000000..aab8292 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomSerialization.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 21/CustomSerialization/My Project/Resources.resx b/Code/Chapter 21/CustomSerialization/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 21/CustomSerialization/My Project/Settings.Designer.vb b/Code/Chapter 21/CustomSerialization/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9b1fb87 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomSerialization.My.MySettings + Get + Return Global.CustomSerialization.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 21/CustomSerialization/My Project/Settings.settings b/Code/Chapter 21/CustomSerialization/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 21/CustomSerialization/Program.vb b/Code/Chapter 21/CustomSerialization/Program.vb new file mode 100644 index 0000000..9c83052 --- /dev/null +++ b/Code/Chapter 21/CustomSerialization/Program.vb @@ -0,0 +1,50 @@ +Option Explicit On +Option Strict On + +Imports System.Runtime.Serialization +Imports System.IO +Imports System.Runtime.Serialization.Formatters.Soap + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Custom Serialization *****") + Console.WriteLine() + + ' Persist MyStringData + Dim sd As MyStringData = New MyStringData() + sd.dataItemOne = "This is some data." + sd.dataItemTwo = "Here is some more data" + Dim s As Stream = New FileStream("MyData.soap", FileMode.Create, _ + FileAccess.Write, FileShare.None) + Dim sf As SoapFormatter = New SoapFormatter() + sf.Serialize(s, sd) + s.Close() + + ' Deserialize. + s = File.OpenRead("MyData.soap") + sd = CType(sf.Deserialize(s), MyStringData) + Console.WriteLine("Item 1: {0}", sd.dataItemOne) + Console.WriteLine("Item 2: {0}", sd.dataItemTwo) + + ' Persist MoreData + Dim md As MoreStringData = New MoreStringData() + md.dataItemOne = "Testing 1, 2, 3." + md.dataItemTwo = "One more test..." + s = New FileStream("MoreStringData.soap", FileMode.Create, FileAccess.Write, FileShare.None) + sf = New SoapFormatter() + sf.Serialize(s, md) + s.Close() + + ' Deserialize + s = File.OpenRead("MoreStringData.soap") + md = CType(sf.Deserialize(s), MoreStringData) + Console.WriteLine("Item 1: {0}", md.dataItemOne) + Console.WriteLine("Item 2: {0}", md.dataItemTwo) + Console.WriteLine("Done!") + Console.ReadLine() + End Sub +End Module + + + + diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Application.Designer.vb b/Code/Chapter 21/SimpleSerialization/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Application.myapp b/Code/Chapter 21/SimpleSerialization/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 21/SimpleSerialization/My Project/AssemblyInfo.vb b/Code/Chapter 21/SimpleSerialization/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..82076f6 --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Resources.Designer.vb b/Code/Chapter 21/SimpleSerialization/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9a564e1 --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleSerialization.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Resources.resx b/Code/Chapter 21/SimpleSerialization/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Settings.Designer.vb b/Code/Chapter 21/SimpleSerialization/My Project/Settings.Designer.vb new file mode 100644 index 0000000..fff256d --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleSerialization.My.MySettings + Get + Return Global.SimpleSerialization.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 21/SimpleSerialization/My Project/Settings.settings b/Code/Chapter 21/SimpleSerialization/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 21/SimpleSerialization/Program.vb b/Code/Chapter 21/SimpleSerialization/Program.vb new file mode 100644 index 0000000..64e9ada --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/Program.vb @@ -0,0 +1,67 @@ +Option Explicit On +Option Strict On + +Imports System.Runtime.Serialization.Formatters.Binary +Imports System.Runtime.Serialization.Formatters.Soap +Imports System.Xml.Serialization +Imports System.IO + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Object Serialization *****") + ' Make a new object to persist. + Dim jbc As New JamesBondCar() + jbc.canFly = True + jbc.canSubmerge = False + jbc.theRadio.stationPresets = New Double() {89.3, 105.1, 97.1} + jbc.theRadio.hasTweeters = True + + ' Save the object in a binary format to + ' a local file. + Dim binFormat As New BinaryFormatter() + Dim fStream As Stream = New FileStream("CarData.dat", FileMode.Create, _ + FileAccess.Write, FileShare.None) + binFormat.Serialize(fStream, jbc) + fStream.Close() + Console.WriteLine("-> Saved JamesBondCar in binary format.") + + ' Now deserialize the object. + fStream = File.OpenRead("CarData.dat") + Dim carFromDisk As JamesBondCar = _ + CType(binFormat.Deserialize(fStream), JamesBondCar) + Console.WriteLine("Can this car fly? : {0} ", carFromDisk.canFly) + fStream.Close() + + ' Save object to a file named CarData.soap in SOAP format. + Dim soapFormat As New SoapFormatter() + fStream = New FileStream("CarData.soap", _ + FileMode.Create, FileAccess.Write, FileShare.None) + soapFormat.Serialize(fStream, jbc) + fStream.Close() + Console.WriteLine("-> Saved JamesBondCar in SOAP format.") + + ' Now as an XML format. + Dim xmlFormat As New XmlSerializer(GetType(JamesBondCar), _ + New Type() {GetType(Radio), GetType(Car)}) + fStream = New FileStream("CarData.xml", FileMode.Create, _ + FileAccess.Write, FileShare.None) + xmlFormat.Serialize(fStream, jbc) + fStream.Close() + Console.WriteLine("-> Saved JamesBondCar in XML format.") + + ' Now save a batch of objects. + Dim myCars As New List(Of JamesBondCar)() + myCars.Add(New JamesBondCar(True, True)) + myCars.Add(New JamesBondCar(True, False)) + myCars.Add(New JamesBondCar(False, True)) + myCars.Add(New JamesBondCar(False, False)) + fStream = New FileStream("CarCollection.xml", FileMode.Create, FileAccess.Write, FileShare.None) + xmlFormat = New XmlSerializer(GetType(List(Of JamesBondCar)), _ + New Type() {GetType(JamesBondCar), GetType(Car), GetType(Radio)}) + xmlFormat.Serialize(fStream, myCars) + fStream.Close() + Console.WriteLine("-> Saved List of JamesBondCar in XML format.") + Console.WriteLine("Done!") + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 21/SimpleSerialization/SerializableCars.vb b/Code/Chapter 21/SimpleSerialization/SerializableCars.vb new file mode 100644 index 0000000..d95d75e --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/SerializableCars.vb @@ -0,0 +1,38 @@ +Option Explicit On +Option Strict On + +Imports System.Xml.Serialization + + _ +Public Class Radio + Public hasTweeters As Boolean + Public hasSubWoofers As Boolean + Public stationPresets As Double() + _ + Public radioID As String = "XF-552RR6" +End Class + + _ +Public Class Car + Public theRadio As Radio = New Radio + Public isHatchBack As Boolean +End Class + + _ +Public Class JamesBondCar + Inherits Car + + Public Sub New(ByVal SkyWorthy As Boolean, ByVal SeaWorthy As Boolean) + canFly = SkyWorthy + canSubmerge = SeaWorthy + End Sub + + Public Sub New() + End Sub + _ + Public canFly As Boolean + _ + Public canSubmerge As Boolean +End Class + + diff --git a/Code/Chapter 21/SimpleSerialization/SimpleSerialization.sln b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.sln new file mode 100644 index 0000000..8cd68af --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleSerialization", "SimpleSerialization.vbproj", "{60A2D13A-43FC-4F6E-8531-23622D710C94}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {60A2D13A-43FC-4F6E-8531-23622D710C94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60A2D13A-43FC-4F6E-8531-23622D710C94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60A2D13A-43FC-4F6E-8531-23622D710C94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60A2D13A-43FC-4F6E-8531-23622D710C94}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 21/SimpleSerialization/SimpleSerialization.suo b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.suo new file mode 100644 index 0000000000000000000000000000000000000000..8588dcedb0601094007e13d90399374e094708a9 GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj new file mode 100644 index 0000000..2ed3dae --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {60A2D13A-43FC-4F6E-8531-23622D710C94} + Exe + SimpleSerialization.Program + SimpleSerialization + SimpleSerialization + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleSerialization.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleSerialization.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj.user b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 21/SimpleSerialization/SimpleSerialization.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.sln b/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.sln new file mode 100644 index 0000000..335ac4a --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AdoNetTransaction", "AdoNetTransaction.vbproj", "{4FFA264B-A7C3-4591-89E9-CF7326E95F3D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4FFA264B-A7C3-4591-89E9-CF7326E95F3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FFA264B-A7C3-4591-89E9-CF7326E95F3D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FFA264B-A7C3-4591-89E9-CF7326E95F3D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FFA264B-A7C3-4591-89E9-CF7326E95F3D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.suo b/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.suo new file mode 100644 index 0000000000000000000000000000000000000000..6d5c9566ce492721040eda8505ba08c06425b8f5 GIT binary patch literal 17408 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 QBbFhZ8X#8=BR){&e`8P2TL1t6 literal 0 HcmV?d00001 diff --git a/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.vbproj b/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.vbproj new file mode 100644 index 0000000..045fe12 --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/AdoNetTransaction.vbproj @@ -0,0 +1,113 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4FFA264B-A7C3-4591-89E9-CF7326E95F3D} + Exe + AdoNetTransaction.Program + AdoNetTransaction + AdoNetTransaction + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AdoNetTransaction.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AdoNetTransaction.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\AutoLotDAL\bin\Debug\AutoLotDAL.dll + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Application.Designer.vb b/Code/Chapter 22/AdoNetTransaction/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Application.myapp b/Code/Chapter 22/AdoNetTransaction/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/AssemblyInfo.vb b/Code/Chapter 22/AdoNetTransaction/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4cc87cb --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Resources.Designer.vb b/Code/Chapter 22/AdoNetTransaction/My Project/Resources.Designer.vb new file mode 100644 index 0000000..cd7a798 --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AdoNetTransaction.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Resources.resx b/Code/Chapter 22/AdoNetTransaction/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Settings.Designer.vb b/Code/Chapter 22/AdoNetTransaction/My Project/Settings.Designer.vb new file mode 100644 index 0000000..2068ba0 --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AdoNetTransaction.My.MySettings + Get + Return Global.AdoNetTransaction.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AdoNetTransaction/My Project/Settings.settings b/Code/Chapter 22/AdoNetTransaction/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/AdoNetTransaction/Program.vb b/Code/Chapter 22/AdoNetTransaction/Program.vb new file mode 100644 index 0000000..c59c97d --- /dev/null +++ b/Code/Chapter 22/AdoNetTransaction/Program.vb @@ -0,0 +1,27 @@ +Imports AutoLotConnectedLayer + +Module Program + + Sub Main() + Console.WriteLine("***** Simple Transaction Example *****" & vbLf) + + ' A simple way to allow the tx to work or not. + Dim throwEx As Boolean = True + Dim userAnswer As String = String.Empty + + Console.Write("Do you want to throw an exception (Y or N): ") + userAnswer = Console.ReadLine() + If userAnswer.ToLower() = "n" Then + throwEx = False + End If + + Dim dal As New InventoryDAL() + dal.OpenConnection("Data Source=(local);Integrated Security=SSPI;" & _ + "Initial Catalog=AutoLot") + + ' Process customer 999. + dal.ProcessCreditRisk(throwEx, 333) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.sln b/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.sln new file mode 100644 index 0000000..0de5670 --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AsyncCmdObjectApp", "AsyncCmdObjectApp.vbproj", "{D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.suo b/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..22cc50ecbd6605a79b21d9f302730c649031241f GIT binary patch literal 18432 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 DZsb{v literal 0 HcmV?d00001 diff --git a/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.vbproj b/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.vbproj new file mode 100644 index 0000000..a892d9d --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/AsyncCmdObjectApp.vbproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D19DB5C6-44DB-4EE6-8FE2-4713C2C85B48} + Exe + AsyncCmdObjectApp.Program + AsyncCmdObjectApp + AsyncCmdObjectApp + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AsyncCmdObjectApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AsyncCmdObjectApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.Designer.vb b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.myapp b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/AssemblyInfo.vb b/Code/Chapter 22/AsyncCmdObjectApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c16a179 --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.Designer.vb b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1f18051 --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AsyncCmdObjectApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.resx b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.Designer.vb b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a5dce9f --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AsyncCmdObjectApp.My.MySettings + Get + Return Global.AsyncCmdObjectApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.settings b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/AsyncCmdObjectApp/Program.vb b/Code/Chapter 22/AsyncCmdObjectApp/Program.vb new file mode 100644 index 0000000..63e3b7d --- /dev/null +++ b/Code/Chapter 22/AsyncCmdObjectApp/Program.vb @@ -0,0 +1,40 @@ +Imports System.Data.SqlClient +Imports System.Threading + +Module Program + Sub Main() + Console.WriteLine("***** Fun with ASNYC Data Readers *****" & vbLf) + + ' Create and open a connection that is async-aware. + Dim cn As New SqlConnection() + cn.ConnectionString = "Data Source=(local)\SQLEXPRESS" & _ + ";Integrated Security=SSPI;" & _ + "Initial Catalog=AutoLot;Asynchronous Processing=true" + cn.Open() + + ' Create a SQL command object that waits for approx 2 seconds. + Dim strSQL As String = "WaitFor Delay '00:00:02';Select * From Inventory" + Dim myCommand As New SqlCommand(strSQL, cn) + + ' Execute the reader on a second thread. + Dim itfAsynch As IAsyncResult + itfAsynch = myCommand.BeginExecuteReader(CommandBehavior.CloseConnection) + + ' Do something while other thread works. + While Not itfAsynch.IsCompleted + Console.WriteLine("Working on main thread...") + Thread.Sleep(1000) + End While + Console.WriteLine() + + ' All done! Get reader and loop over results. + Dim myDataReader As SqlDataReader = myCommand.EndExecuteReader(itfAsynch) + While myDataReader.Read() + Console.WriteLine("-> Make: {0}, PetName: {1}, Color: {2}.", _ + myDataReader("Make").ToString().Trim(), _ + myDataReader("PetName").ToString().Trim(), _ + myDataReader("Color").ToString().Trim()) + End While + myDataReader.Close() + End Sub +End Module diff --git a/Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.sln b/Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.sln new file mode 100644 index 0000000..1833d48 --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoLotCUIClient", "AutoLotCUIClient.vbproj", "{B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.suo b/Code/Chapter 22/AutoLotCUIClient/AutoLotCUIClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..7dfb3bdcd51c9f5de355d75601c07b695c80bb31 GIT binary patch literal 18432 zcmeI3U2I%O700g=T3QNCo3sH+8n$T~TAD15mY3#L~xV014cAP*LwVU1bM`G`q z-F1l7Ai+CGNIcL7KrJewv{FS7LVe(+6`%rwAn_331$coXA=)S2YV-Tg+*#ji-`%}- zLcB&9>)g3_cJ4iA&YU@4GyeURyZ`#q<@^5TEh$I5jo$pi?cS|{_7?61rrhOu8@SQ) z{KCS5ZS*{DZH1O6Opu5ST82;2tT4txms2yh4RVPF$*CvXpd2zYk`n}IFB zy?|sv@KNqR27Da25BLPI4Y(iJ4tx?w01p5=0KIdw+;|QQc}4yz%ten^pe}iH%trjO z6^U_FZ*1_|H?Ed`@WaWsTh#BU1cWjO#-ex5>jV23cRk)k`$Np@R*ns+DwQKpJL{FZk9!{;K1w z|7Un-r~lqA>QDLik5GRacof(T>;aO%XMk2dyh6_n*^# zt$AvevcE9*(&eeYcm3>zj<#+8c}=9QsJxewgm~Vs|L}{xul-~H>^s}v`%~JNtrdM} zm7QC7PqKeHbtpYBm*^@M&zIAqU5QK~m#9qS6Uh@jBZ`AoU7{KIhlg7Z6wK7tO!$%D;^bX-j|S<=&~FBi=SJ7xZ{_tlCP?=)-q@%b8XgvBrVJQYOUtYTC_Y_>D3pd&}-My z7WzzEJBb@GJEo8?4d|j#~Jg zFYLT?`$qVhME@uPQXVYs_!S;GyCpp*33Ow$d>&)emoPJmNb5z6(fXfiX`(O)pX)yCE+8 z@A02B8qDTF<&TdCINuFzjdFl){#U~PhhgSVY}&e->zGCgOXNJPm(Y0L-F$3g{-t4Y zx?{`VN&1Qg6_;mq`PX6eymX$`=Jj(wdVe+JALKn3f6J4wbDj2O&t*NF-V&p}*ED*| zT8Krhu@|4mS_REO^XbG?L{t>k+=3Y&C?8j zN!ny1YtERM|pSlgq#p6002j9I!V%lKU!rmSW3OiB-|-ApQX zYw4GFskyT|2=Qi8@#xyo9#;yZJuAhqYe#!rzDLup$ZYLskIVOHdDlKpGq3(=s+Ij+ zJC4VdmT1~-(k8fvvU8aSQzot)HBq!|OshE|;h`I%wbq#{vYV?f*SOKnmi=I0!fo4C_?Sg>c+d-@}xyJC-E{D$|k>lz^`}s z^@D!h>eualz0p&G4}+mBX@RFPcwS}>j&=3-HTPPJ^1(&*1Pp9m+oqMKvvtbOeBa0k72fR4KnRPhAS{kGFD5uxq zD0ObSVzQ3Xx3y=nyQjZTvZ`GWy8^>&G<@1p(jjf5T{)fB(&^LiI?zecXnog6&keJN zq{XzNlF%YenCC9X>Y6fITvl1M>c2*=mzHe^D1C1M|#GVO{qT|>Nr6UVR zT&_QS7AcChOqI6gm`~>kNSnxC$iQVusCIhoIW}n+jZm_>e9pV80 z&Yjw`a8Xq0zff+RBs$JTQF8ExQnGx0o~z=w)^hDmt-Et8XN{j!FUE4`SeB1QIk9Ha zhE4}*U%KFZaoGxST3p%mu=a8?BfYsL;@3%5qW-@}XFIh=m8Di+o#0r0wmup1(RH>> zt2S%iSdQCK8;x5UUYb3)J7#g~zgNPei0+#tLekolJ#tj&Bx&$n;l680Tap-Bk#y4h zpOyIO`1c$=?Yys7DOT<}9FbZnr`gz0@uS)7mhw8mIScP=hi#pF02Pg+*?pGfE5dm- z!BPA_SZe*JWq1ai-ic%HgWOnKi@JQq+&F?XHjgi|IfC!YJ(nQuYvCs>)yYA6*3y@k kt_(}9wF^P|){7_5*v7e0$<{5xaH@wr2N-d)Gyw + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B8C11D34-D3CA-49C5-8CE7-3575E81EF0D9} + Exe + AutoLotCUIClient.Program + AutoLotCUIClient + AutoLotCUIClient + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AutoLotCUIClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AutoLotCUIClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\AutoLotDAL\bin\Debug\AutoLotDAL.dll + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Application.Designer.vb b/Code/Chapter 22/AutoLotCUIClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Application.myapp b/Code/Chapter 22/AutoLotCUIClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/AssemblyInfo.vb b/Code/Chapter 22/AutoLotCUIClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2ccd277 --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.Designer.vb b/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f7a480d --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AutoLotCUIClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.resx b/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.Designer.vb b/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..906cc80 --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AutoLotCUIClient.My.MySettings + Get + Return Global.AutoLotCUIClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.settings b/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/AutoLotCUIClient/Program.vb b/Code/Chapter 22/AutoLotCUIClient/Program.vb new file mode 100644 index 0000000..67cd7ae --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/Program.vb @@ -0,0 +1,163 @@ +Imports AutoLotConnectedLayer +Imports System.Configuration + +Module Program + Sub Main() + Console.WriteLine("***** The AutoLot Console UI *****" & vbLf) + + ' Get connection string from app.config. + Dim cnStr As String = ConfigurationManager.ConnectionStrings("AutoLotSqlProvider").ConnectionString + Dim userDone As Boolean = False + Dim userCommand As String = String.Empty + + ' Create our InventoryDAL object. + Dim invDAL As New InventoryDAL() + invDAL.OpenConnection(cnStr) + + ' Keep asking for input until user clicks the Q key. + Try + ShowInstructions() + + Do + Console.Write("Please enter your command: ") + userCommand = Console.ReadLine() + Console.WriteLine() + Select Case userCommand.ToUpper() + Case "I" + InsertNewCar(invDAL) + Exit Select + Case "U" + UpdateCarPetName(invDAL) + Exit Select + Case "D" + DeleteCar(invDAL) + Exit Select + Case "L" + ListInventory(invDAL) + Exit Select + Case "S" + ShowInstructions() + Exit Select + Case "C" + ClearConsole() + Exit Select + Case "P" + LookUpPetName(invDAL) + Exit Select + Case "Q" + userDone = True + Exit Select + Case Else + Console.WriteLine("Bad data! Try again") + Exit Select + End Select + Loop While Not userDone + Catch ex As Exception + Console.WriteLine(ex.Message) + Finally + invDAL.CloseConnection() + End Try + End Sub + +#Region "Show Instructions / Clear" + Private Sub ShowInstructions() + Console.WriteLine("I: Inserts a new car.") + Console.WriteLine("U: Updates an existing car.") + Console.WriteLine("D: Deletes an existing car.") + Console.WriteLine("L: Lists current inventory.") + Console.WriteLine("S: Shows these instructions.") + Console.WriteLine("C: Clears console and show instructions.") + Console.WriteLine("P: Looks up pet name.") + Console.WriteLine("Q: Quits program.") + End Sub + + Private Sub ClearConsole() + Console.Clear() + ShowInstructions() + End Sub +#End Region + +#Region "ListInventory method" + Private Sub ListInventory(ByVal invDAL As InventoryDAL) + Dim dt As DataTable = invDAL.GetAllInventory() + DisplayTable(dt) + End Sub + + Private Sub DisplayTable(ByVal dt As DataTable) + For curCol As Integer = 0 To dt.Columns.Count - 1 + ' Print out the column names. + Console.Write(dt.Columns(curCol).ColumnName.Trim() & vbTab) + Next + Console.WriteLine(vbLf & "----------------------------------") + For curRow As Integer = 0 To dt.Rows.Count - 1 + + ' Print the DataTable. + For curCol As Integer = 0 To dt.Columns.Count - 1 + Console.Write(dt.Rows(curRow)(curCol).ToString().Trim() & vbTab) + Next + Console.WriteLine() + Next + End Sub +#End Region + +#Region "Delete Car" + Private Sub DeleteCar(ByVal invDAL As InventoryDAL) + ' Get ID of car to delete. + Console.Write("Enter ID of Car to delete: ") + Dim id As Integer = Integer.Parse(Console.ReadLine()) + + ' Just in case we have a primary key + ' violation! + Try + invDAL.DeleteCar(id) + Catch ex As Exception + Console.WriteLine(ex.Message) + End Try + End Sub +#End Region + +#Region "Update pet name / Get pet name" + Private Sub UpdateCarPetName(ByVal invDAL As InventoryDAL) + ' First get the user data. + Dim carID As Integer + Dim newCarPetName As String + + Console.Write("Enter Car ID: ") + carID = Integer.Parse(Console.ReadLine()) + Console.Write("Enter New Pet Name: ") + newCarPetName = Console.ReadLine() + + ' Now pass to data access library. + invDAL.UpdateCarPetName(carID, newCarPetName) + End Sub + + Private Sub LookUpPetName(ByVal invDAL As InventoryDAL) + ' Get ID of car to look up. + Console.Write("Enter ID of Car to look up: ") + Dim id As Integer = Integer.Parse(Console.ReadLine()) + + Console.WriteLine("Petname of {0} is {1}.", id, invDAL.LookUpPetName(id)) + End Sub +#End Region + +#Region "Insert new car" + Private Sub InsertNewCar(ByVal invDAL As InventoryDAL) + ' First get the user data. + Dim newCarID As Integer + Dim newCarColor As String, newCarMake As String, newCarPetName As String + + Console.Write("Enter Car ID: ") + newCarID = Integer.Parse(Console.ReadLine()) + Console.Write("Enter Car Color: ") + newCarColor = Console.ReadLine() + Console.Write("Enter Car Make: ") + newCarMake = Console.ReadLine() + Console.Write("Enter Pet Name: ") + newCarPetName = Console.ReadLine() + + ' Now pass to data access library. + invDAL.InsertAuto(newCarID, newCarColor, newCarMake, newCarPetName) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 22/AutoLotCUIClient/app.config b/Code/Chapter 22/AutoLotCUIClient/app.config new file mode 100644 index 0000000..3de1a9c --- /dev/null +++ b/Code/Chapter 22/AutoLotCUIClient/app.config @@ -0,0 +1,7 @@ + + + + + diff --git a/Code/Chapter 22/AutoLotDAL/AutoLotDAL.sln b/Code/Chapter 22/AutoLotDAL/AutoLotDAL.sln new file mode 100644 index 0000000..d9f0d95 --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/AutoLotDAL.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoLotDAL", "AutoLotDAL.vbproj", "{E497BF9D-A4DE-430C-BF17-597F24A35474}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/AutoLotDAL/AutoLotDAL.suo b/Code/Chapter 22/AutoLotDAL/AutoLotDAL.suo new file mode 100644 index 0000000000000000000000000000000000000000..5a96402abd4d4126a87207ef9567dbef394559c9 GIT binary patch literal 15872 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 q^H=@ + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E497BF9D-A4DE-430C-BF17-597F24A35474} + Library + + + AutoLotDAL + 512 + Windows + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotDAL/InventoryDAL.vb b/Code/Chapter 22/AutoLotDAL/InventoryDAL.vb new file mode 100644 index 0000000..9e5ebbe --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/InventoryDAL.vb @@ -0,0 +1,203 @@ +' We will make use of the SQL server +' provider, however it would also be +' permissible to make use of the ADO.NET +' factory pattern for greater flexibility. +Imports System.Data.SqlClient + +Namespace AutoLotConnectedLayer + Public Class InventoryDAL + +#Region "Connection and Disconnection details." + ' This member will be used by all methods. + Private sqlCn As New SqlConnection() + + Public Sub OpenConnection(ByVal connectionString As String) + sqlCn.ConnectionString = connectionString + sqlCn.Open() + End Sub + Public Sub CloseConnection() + sqlCn.Close() + End Sub +#End Region + +#Region "Insert logic (both versions)" + 'Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, _ + ' ByVal make As String, ByVal petName As String) + ' ' Format and execute SQL statement. + ' Dim sql As String = String.Format("Insert Into Inventory" & _ + ' "(CarID, Make, Color, PetName) Values" & _ + ' "('{0}', '{1}', '{2}', '{3}')", id, make, color, petName) + + ' ' Execute using our connection. + ' Using cmd As New SqlCommand(sql, Me.sqlCn) + ' cmd.ExecuteNonQuery() + ' End Using + 'End Sub + + Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, ByVal make As String, ByVal petName As String) + ' Note the 'placeholders' in the SQL query. + Dim sql As String = String.Format("Insert Into Inventory" + "(CarID, Make, Color, PetName) Values" + "(@CarID, @Make, @Color, @PetName)") + + ' This command will have internal parameters. + Using cmd As New SqlCommand(sql, Me.sqlCn) + ' Fill params collection. + Dim param As New SqlParameter() + param.ParameterName = "@CarID" + param.Value = id + param.SqlDbType = SqlDbType.Int + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Make" + param.Value = make + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Color" + param.Value = color + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@PetName" + param.Value = petName + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Delete logic" + Public Sub DeleteCar(ByVal id As Integer) + ' Get ID of car to delete, then do so. + Dim sql As String = String.Format("Delete from Inventory where CarID = '{0}'", id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + Try + cmd.ExecuteNonQuery() + Catch ex As SqlException + Dim er As New Exception("Sorry! That car is on order!", ex) + Throw er + End Try + End Using + End Sub +#End Region + +#Region "Update logic" + Public Sub UpdateCarPetName(ByVal id As Integer, ByVal newPetName As String) + ' Get ID of car to modify and new pet name. + Dim sql As String = String.Format("Update Inventory Set PetName = '{0}' Where CarID = '{1}'", newPetName, id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Select logic" + Public Function GetAllInventory() As DataTable + ' This will hold the records. + Dim inv As New DataTable() + + ' Prep command object. + Dim sql As String = "Select * From Inventory" + Using cmd As New SqlCommand(sql, Me.sqlCn) + Dim dr As SqlDataReader = cmd.ExecuteReader() + ' Fill the DataTable with data from the reader and clean up. + inv.Load(dr) + dr.Close() + End Using + Return inv + End Function +#End Region + +#Region "Trigger stored proc logic" + Public Function LookUpPetName(ByVal carID As Integer) As String + Dim carPetName As String = String.Empty + + ' Establish name of stored proc. + Using cmd As New SqlCommand("GetPetName", Me.sqlCn) + cmd.CommandType = CommandType.StoredProcedure + + ' Input param. + Dim param As New SqlParameter() + param.ParameterName = "@carID" + param.SqlDbType = SqlDbType.Int + param.Value = carID + param.Direction = ParameterDirection.Input + cmd.Parameters.Add(param) + + ' Output param. + param = New SqlParameter() + param.ParameterName = "@petName" + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + param.Direction = ParameterDirection.Output + cmd.Parameters.Add(param) + + ' Execute the stored proc. + cmd.ExecuteNonQuery() + + ' Return output param. + carPetName = DirectCast(cmd.Parameters("@petName").Value, String).Trim() + End Using + Return carPetName + End Function +#End Region + +#Region "Tx Method" + ' A new member of the InventoryDAL class. + Public Sub ProcessCreditRisk(ByVal throwEx As Boolean, ByVal custID As Integer) + ' First, look up current name based on customer ID. + Dim fName As String = String.Empty + Dim lName As String = String.Empty + + Dim cmdSelect As New SqlCommand(String.Format("Select * from Customers where CustID = {0}", custID), sqlCn) + Using dr As SqlDataReader = cmdSelect.ExecuteReader() + While dr.Read() + fName = DirectCast(dr("FirstName"), String) + lName = DirectCast(dr("LastName"), String) + End While + End Using + + ' Create command objects which represent each step of the operation. + Dim cmdRemove As New SqlCommand(String.Format("Delete from Customers where CustID = {0}", custID), sqlCn) + + Dim cmdInsert As New SqlCommand(String.Format("Insert Into CreditRisks" & _ + "(CustID, FirstName, LastName) Values" & _ + "({0}, '{1}', '{2}')", custID, fName, lName), sqlCn) + + ' We will get this from the Connection object. + Dim tx As SqlTransaction = Nothing + Try + tx = sqlCn.BeginTransaction() + + ' Enlist the commands into this transaction. + cmdInsert.Transaction = tx + cmdRemove.Transaction = tx + + ' Execute the commands. + cmdInsert.ExecuteNonQuery() + cmdRemove.ExecuteNonQuery() + + ' Simulate error. + If throwEx Then + Throw New ApplicationException("Sorry! Database error! Tx failed...") + End If + + ' Commit it! + tx.Commit() + Catch ex As Exception + Console.WriteLine(ex.Message) + ' Any error will rollback transaction. + tx.Rollback() + End Try + End Sub +#End Region + + End Class +End Namespace diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Application.Designer.vb b/Code/Chapter 22/AutoLotDAL/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Application.myapp b/Code/Chapter 22/AutoLotDAL/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 22/AutoLotDAL/My Project/AssemblyInfo.vb b/Code/Chapter 22/AutoLotDAL/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7ba989c --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Resources.Designer.vb b/Code/Chapter 22/AutoLotDAL/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5036910 --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Resources.resx b/Code/Chapter 22/AutoLotDAL/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Settings.Designer.vb b/Code/Chapter 22/AutoLotDAL/My Project/Settings.Designer.vb new file mode 100644 index 0000000..616219e --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.My.MySettings + Get + Return Global.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotDAL/My Project/Settings.settings b/Code/Chapter 22/AutoLotDAL/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/AutoLotDAL/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.sln b/Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.sln new file mode 100644 index 0000000..3455e4f --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoLotDataReader", "AutoLotDataReader.vbproj", "{3AC88DB7-4970-4770-90E0-218858D8A454}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3AC88DB7-4970-4770-90E0-218858D8A454}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AC88DB7-4970-4770-90E0-218858D8A454}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AC88DB7-4970-4770-90E0-218858D8A454}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AC88DB7-4970-4770-90E0-218858D8A454}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.suo b/Code/Chapter 22/AutoLotDataReader/AutoLotDataReader.suo new file mode 100644 index 0000000000000000000000000000000000000000..187059365b0137af0ce5cd47d4b84a643523a5bc GIT binary patch literal 17408 zcmeI3TWnlM8OO&By-{dsQv#GywsF!6jW>>CCr;AadhJ|Vrw(2xDQFRFylcnF+UxGF zL!%@TeS()teQO>7wNenMMWBLIc;Es0lp>)ZUO-5dQXwu673B%>Kx6*DnKSFN>$AJZ zN#slEtiCgI=FB9W;&k8;#xJU4L!M%bn2<{Uk1hn<ioqW1SlP8U|82B#b3jr5dkDol|YnFFu zyUpw{y=Fjpx30TPm##f3cdN8bzd@D0UhCzUdOK$-qLWX%%?%ykMHb@X59`aN;m-(j zPEhdZjmM8Jj*I`(YI~N8l9yX@^gvpG9`N;E2l#t*0rHO?@bb@8q66+0&<^?c?a8C$ z|BGsq5Zo`=C>RuM643qut5 zmtePGkKj?kV}i#8PY9kAg!@T(D5z6$e!t2G1W$$PsQ)mfzM0dnzES+!z^~5l?78>f zuYXlTT~hj28V)gL_Q34EmoDG`ooD}aVeA_LZ!PIVSJ}8j?*WtP-Pwbu69c8v$x8Of zKq5DjPgIW=63J(V#uA5e#p*<ovi$fl3yW~+sAqNgXDnyZ$EOVz<# zH8)zwD{Vf$N%{|80iOZ6Xw%$2rq8@X^7_AE#x=@8;jXAB zla?xF*QDh&5$Jz(Ph9-Sx&P=9;TzN3lr$H|bba1r?D$Wq7vn0mOB;nBUk8?tiyvL> zXZl&qX;DRnrhvSZk0+W{VWph+> zP*snPtG*rWh0=Kb12>7fb_rR5UrCMl2LeeyX*CAgq1v(^4~hTK!0QEZ@gsY$2}sD| z_XTNL$*egjdMD%oArB{oH*1dQE+LwrixTP!bVbJVoia+QQk)a6(qQN6%BDeO2!c3y^=O2bup|zzbQr*)(}MYT6*?1HOa4addE6 zX;L-l+=SUH&MaDvfJSHryw-|fLcLCiN@&kHwJz!oeLbh%Bf$xIAW3;DP%^D6Z&sC8 zl#eSn=3C2v6{;3Bk_n5`{R z{2i=I@k!(IKkYZ5gq51(KP`G;5n5}&s~LYQ{c}*XpB7fuVMha6l*~89FVShsRnQ+> zH5PnsrFqbC=E}$coHnlcMOF(|7Ncq0t~Ow$x@Ol>SNEYdH$i;vAJ}v`A*mZrtW(Hl ze!lYttJFPZ*d;@F|9&OknY5i&CZYlC#&;KRO z!JK&BeL2kYhlCSvu$3>=E%`^EF#fpmkH3ZuCJhQlGyL8c_EyQgQGZQd#rTPfdAo(4 zg9H5-9i1mM>PgjNfBchry#7w|-@#g(HF(_d6O(%{U{Ls{qeGWa`rYfjcfEh*pYzS? z#WaLRdbIfNC+2fdJ;eu@vX+lE4)$-h=G(LCUMD)S3h&kRjC_QYtYN=?gYqwS>SMjK zlRNEadzHJ=F5QPvsdb-yqhD|Ls@!YN$+qUD9bH_+<8}VC!^*Js*l0z4n|ki1?Jb75 z!}aXj9`*D3elcl1V>}U7Z3S~y7-p=`mKL=Siy9N6Cp?1(JD^#~s|Qe@w8ut0uIC7o zA^W-1zBo=G(iZ-8)$UrC{5u)5>9!A2kG%Ms{crsFwM*-NaP*F0Q-1rY)WhdbJpH3T zzVgE8m0t#~ZpQRa-2K*-x9%Ih@V)#`UcT@BUCmmuDq7t3_P6gT{`c0-k(cJb{hv#3 zT_8{-ul36b{O57&Jx|-2z-RE@^C@`{QQk9ae*DH+t8=5g=YnPqZ_%yDC`EbCIjcF) zAb8JtJM+k2z4z?JJ4$-61V0PB-qq>-*Zbm015MrD#Om(%K|6P7#)1^3?>Bz$n=3|d zZ^;}@S#OVsnkS^eS?e^~_#@J`?ULdj9oREszH#kOr`jF~KAaYP&}9|7hAK#xH})cE z*d+7u2W(ng{9*sY+X2=+vsR9fo^oJO@ON4#@MA;4O={iRJ>9JA$3erx(%(q0TkYm+ zHq*t!ntA;TSfIbd?5+z>nwP@k-!C4>>xcK1QBP*H) zt|T-?qb~#Lw*fE8NBLBJK%&ozu{^^=wy6 zq!z<9v17OaSuRU^u#kFAPS|e!w(93L5OL+_q?X9pdZIW$TURhqT?M&eQ8`6jd`-R6>D7{)v$_4T+l`7jv&83$TtRg zXOMRXd2f(!3i8cC{y>nsuesB$jy~bNRA{t#y#5?dR`cV|x)6aS3UpHKPswFTYM(7@ zqdXI$o!jS2stu0Cb~!r4&1Q5rA(~e-2m1zw4?L%?tY*K#tu>u*dP4ms=7Sc5TN>RgPp8DY{3C(WXxNu= z<+LR-5am;aeMnB@z~|%kjm5ZqZ=-SJPor9^W-^I{r98MHSVo5XlO4BC=^8`aO5=j1p#H%yI{)oP1p%#S17$JJvG zSeZA{eX;cj_kAUFb)%Gr`?KJ)NGx!ew#sn|{}E%W932j_ZPh^Cu>cOF@plgv*|=J4 z=OI)JEm1U8wcz@U)E;K^jE!*nO*Zn@$NCnYhToy=BjkNM5aC+#&EoFgxl@OnG40ck z2L; + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {3AC88DB7-4970-4770-90E0-218858D8A454} + Exe + AutoLotDataReader.Program + AutoLotDataReader + AutoLotDataReader + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AutoLotDataReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AutoLotDataReader.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Application.Designer.vb b/Code/Chapter 22/AutoLotDataReader/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Application.myapp b/Code/Chapter 22/AutoLotDataReader/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/AssemblyInfo.vb b/Code/Chapter 22/AutoLotDataReader/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..37c8891 --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Resources.Designer.vb b/Code/Chapter 22/AutoLotDataReader/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8acc2c7 --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AutoLotDataReader.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Resources.resx b/Code/Chapter 22/AutoLotDataReader/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Settings.Designer.vb b/Code/Chapter 22/AutoLotDataReader/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4639db3 --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AutoLotDataReader.My.MySettings + Get + Return Global.AutoLotDataReader.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/AutoLotDataReader/My Project/Settings.settings b/Code/Chapter 22/AutoLotDataReader/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/AutoLotDataReader/Program.vb b/Code/Chapter 22/AutoLotDataReader/Program.vb new file mode 100644 index 0000000..1f1939e --- /dev/null +++ b/Code/Chapter 22/AutoLotDataReader/Program.vb @@ -0,0 +1,58 @@ +Imports System.Data.SqlClient +Imports System.Data.Common + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Data Readers *****" & vbLf) + + ' Create a connection string via the builder object. + Dim cnStrBuilder As New SqlConnectionStringBuilder() + cnStrBuilder.InitialCatalog = "AutoLot" + cnStrBuilder.DataSource = "(local)\SQLEXPRESS" + cnStrBuilder.ConnectTimeout = 30 + cnStrBuilder.IntegratedSecurity = True + + Dim cn As New SqlConnection() + cn.ConnectionString = cnStrBuilder.ConnectionString + cn.Open() + + ShowConnectionStatus(cn) + + ' Create a SQL command object. + Dim strSQL As String = "Select * From Inventory;Select * from Customers" + Dim myCommand As New SqlCommand(strSQL, cn) + + ' Obtain a data reader a la ExecuteReader(). + Dim myDataReader As SqlDataReader + myDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection) + + ' Loop over the results. + Do + While myDataReader.Read() + Console.WriteLine("***** Record *****") + For i As Integer = 0 To myDataReader.FieldCount - 1 + Console.WriteLine("{0} = {1}", myDataReader.GetName(i), myDataReader.GetValue(i).ToString().Trim()) + Next + Console.WriteLine() + End While + Loop While myDataReader.NextResult() + + ' Because we specified CommandBehavior.CloseConnection, we + ' don't need to explicitly call Close() on the connection. + myDataReader.Close() + Console.ReadLine() + End Sub + +#Region "Show Cn Helper method" + Sub ShowConnectionStatus(ByVal cn As DbConnection) + ' Show various stats about current connection object. + Console.WriteLine("***** Info about your connection *****") + Console.WriteLine("Database location: {0}", cn.DataSource) + Console.WriteLine("Database name: {0}", cn.Database) + Console.WriteLine("Timeout: {0}", cn.ConnectionTimeout) + Console.WriteLine("Connection state: {0}" & Chr(10), cn.State.ToString()) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 22/DataProviderFactory/DataProviderFactory.sln b/Code/Chapter 22/DataProviderFactory/DataProviderFactory.sln new file mode 100644 index 0000000..8c86e09 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/DataProviderFactory.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DataProviderFactory", "DataProviderFactory.vbproj", "{5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/DataProviderFactory/DataProviderFactory.suo b/Code/Chapter 22/DataProviderFactory/DataProviderFactory.suo new file mode 100644 index 0000000000000000000000000000000000000000..b37cdfdd858b5829ccd05146808a5988101c57e2 GIT binary patch literal 17920 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5E3E8495-6CC1-4A0B-B82E-6BDB143B9CAA} + Exe + DataProviderFactory.Program + DataProviderFactory + DataProviderFactory + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + DataProviderFactory.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DataProviderFactory.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Application.Designer.vb b/Code/Chapter 22/DataProviderFactory/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Application.myapp b/Code/Chapter 22/DataProviderFactory/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/DataProviderFactory/My Project/AssemblyInfo.vb b/Code/Chapter 22/DataProviderFactory/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5ada217 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Resources.Designer.vb b/Code/Chapter 22/DataProviderFactory/My Project/Resources.Designer.vb new file mode 100644 index 0000000..57f140e --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DataProviderFactory.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Resources.resx b/Code/Chapter 22/DataProviderFactory/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Settings.Designer.vb b/Code/Chapter 22/DataProviderFactory/My Project/Settings.Designer.vb new file mode 100644 index 0000000..14c26b9 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.DataProviderFactory.My.MySettings + Get + Return Global.DataProviderFactory.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/DataProviderFactory/My Project/Settings.settings b/Code/Chapter 22/DataProviderFactory/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/DataProviderFactory/Program.vb b/Code/Chapter 22/DataProviderFactory/Program.vb new file mode 100644 index 0000000..7b97bd0 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/Program.vb @@ -0,0 +1,44 @@ +Imports System.Configuration +Imports System.Data.Common + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Data Provider Factories *****" & vbLf) + Dim dp As String = _ + ConfigurationManager.AppSettings("provider") + Dim cnStr As String = _ + ConfigurationManager.ConnectionStrings("AutoLotSqlProvider").ConnectionString + + + ' Get the factory provider. + Dim df As DbProviderFactory = DbProviderFactories.GetFactory(dp) + + ' Now make connection object. + Dim cn As DbConnection = df.CreateConnection() + Console.WriteLine("Your connection object is a: {0}", cn.GetType().FullName) + cn.ConnectionString = cnStr + cn.Open() + + ' Make command object. + Dim cmd As DbCommand = df.CreateCommand() + Console.WriteLine("Your command object is a: {0}", cmd.GetType().FullName) + cmd.Connection = cn + cmd.CommandText = "Select * From Inventory" + + ' Print out data with data reader. + ' Because we specified CommandBehavior.CloseConnection, we + ' don't need to explicitly call Close() on the connection. + Dim dr As DbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection) + Console.WriteLine("Your data reader object is a: {0}", dr.GetType().FullName) + + Console.WriteLine(vbLf & "***** Current Inventory *****") + While dr.Read() + Console.WriteLine("-> Car #{0} is a {1}.", dr("CarID"), dr("Make").ToString().Trim()) + End While + dr.Close() + + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 22/DataProviderFactory/app.config b/Code/Chapter 22/DataProviderFactory/app.config new file mode 100644 index 0000000..65f3b95 --- /dev/null +++ b/Code/Chapter 22/DataProviderFactory/app.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Application.Designer.vb b/Code/Chapter 22/MyConnectionFactory/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Application.myapp b/Code/Chapter 22/MyConnectionFactory/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/AssemblyInfo.vb b/Code/Chapter 22/MyConnectionFactory/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b6cad4d --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Resources.Designer.vb b/Code/Chapter 22/MyConnectionFactory/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a3ac360 --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyConnectionFactory.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Resources.resx b/Code/Chapter 22/MyConnectionFactory/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Settings.Designer.vb b/Code/Chapter 22/MyConnectionFactory/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a319898 --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyConnectionFactory.My.MySettings + Get + Return Global.MyConnectionFactory.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 22/MyConnectionFactory/My Project/Settings.settings b/Code/Chapter 22/MyConnectionFactory/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.sln b/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.sln new file mode 100644 index 0000000..73e6e3a --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyConnectionFactory", "MyConnectionFactory.vbproj", "{B4EE5E52-A26E-4DED-AECB-F4867D474DB6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B4EE5E52-A26E-4DED-AECB-F4867D474DB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4EE5E52-A26E-4DED-AECB-F4867D474DB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4EE5E52-A26E-4DED-AECB-F4867D474DB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B4EE5E52-A26E-4DED-AECB-F4867D474DB6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.suo b/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.suo new file mode 100644 index 0000000000000000000000000000000000000000..1fca97daffdd02b9c7fbb850f0edf48e71553f3f GIT binary patch literal 16896 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 Tty>jhktp^fz=(TgojC9xe{$dV literal 0 HcmV?d00001 diff --git a/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.vbproj b/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.vbproj new file mode 100644 index 0000000..4f61349 --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/MyConnectionFactory.vbproj @@ -0,0 +1,112 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B4EE5E52-A26E-4DED-AECB-F4867D474DB6} + Exe + MyConnectionFactory.Program + MyConnectionFactory + MyConnectionFactory + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MyConnectionFactory.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyConnectionFactory.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 22/MyConnectionFactory/Program.vb b/Code/Chapter 22/MyConnectionFactory/Program.vb new file mode 100644 index 0000000..9e915f5 --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/Program.vb @@ -0,0 +1,68 @@ +' Need these to get definitions of common interfaces, +' and various Connection objects for our test. +Imports System.Data.SqlClient +Imports System.Data.Odbc +Imports System.Data.OleDb + +' Need to reference System.Data.OracleClient.dll to nab this namespace! +Imports System.Data.OracleClient +Imports System.Configuration + +' A list of possible providers. +Enum DataProvider + SqlServer + OleDb + Odbc + Oracle + None +End Enum + +Module Program + + Sub Main() + Console.WriteLine("**** Very Simple Connection Factory *****" & vbLf) + + ' Read the provider key. + Dim dataProvString As String = ConfigurationManager.AppSettings("provider") + + ' Transform string to enum. + Dim dp As DataProvider = DataProvider.None + If [Enum].IsDefined(GetType(DataProvider), dataProvString) Then + dp = DirectCast([Enum].Parse(GetType(DataProvider), dataProvString), DataProvider) + Else + Console.WriteLine("Sorry, no provider exists!") + End If + + ' Get a specific connection. + Dim myCn As IDbConnection = GetConnection(dp) + If myCn IsNot Nothing Then + Console.WriteLine("Your connection is a {0}", myCn.GetType().Name) + End If + + ' Open, use, and close connection. + Console.ReadLine() + End Sub + +#Region "GetConnection() helper method" + ' This method returns a specific connection object + ' based on the value of a DataProvider enum. + Private Function GetConnection(ByVal dp As DataProvider) As IDbConnection + Dim conn As IDbConnection = Nothing + Select Case dp + Case DataProvider.SqlServer + conn = New SqlConnection() + Exit Select + Case DataProvider.OleDb + conn = New OleDbConnection() + Exit Select + Case DataProvider.Odbc + conn = New OdbcConnection() + Exit Select + Case DataProvider.Oracle + conn = New OracleConnection() + Exit Select + End Select + Return conn + End Function +#End Region +End Module diff --git a/Code/Chapter 22/MyConnectionFactory/app.config b/Code/Chapter 22/MyConnectionFactory/app.config new file mode 100644 index 0000000..5cd268c --- /dev/null +++ b/Code/Chapter 22/MyConnectionFactory/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.sln b/Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.sln new file mode 100644 index 0000000..d9f0d95 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoLotDAL", "AutoLotDAL.vbproj", "{E497BF9D-A4DE-430C-BF17-597F24A35474}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.suo b/Code/Chapter 23/AutoLotDAL (Part 2)/AutoLotDAL.suo new file mode 100644 index 0000000000000000000000000000000000000000..ee0a2c520016e41d6ef485ced4cd467509951846 GIT binary patch literal 17408 zcmeI3U2I%O700iWwzRa+mb6JJA#7bYBsAGNcD|f6q3gBt(b%yYJ5GSD+Rg6Tas09F z?mCSH2oO&^@Z7!>H6ci-ND<)y5JD>SsR*PX5GvxK0tq1=kmyT!qA|b!%pLFD_1)cT zCuHp?W1Ty9=gz(7%$f5wXU4z3_V8aXUVZ#;UR62ht@W`Uhjf^5b?SmE9CI2j`*69UG?4J?e=zh z-PG+|yS(jOJGgJ>ZU=uo+`Y6wyI221x&7 zz!N|#pnh$By_x#+{{2?!F91&i+kovr9C!w32X+7*Kqs&h*ahqc_5gcoUA>c4@1UL!|0&YD0+#d%9{I(aUPx$x4)F*)v|MzLXW@z(Y z;XVbt7-&;_v&*jOxrL zB!_T|N(*=-`{T)dss6cGcRoK+OpSEM($m>k>1-|*Ki)eW8%$4@M)QTKSZ5&{>&>Q; z`D`wgJe!^=&*d_u)QMa%KU>J;it$3O zXw1_+&rZ)yPD+jrzR86$e_dBeb{`rl3o+o$pr_N`FxM&W^Vp6wFz!uaV+XKyquh;P=D_CKiw!>BhW(Lm zSIi(;ZqVI47R|C*D$f4rybPo40e2Bf#tc^qwoBb>4E(Y$vOQ7pOPAe8N5D7C+~k>y zGh8otLuUNvp(4XwqtXg~&AMz}RQ!@xH`Aw?(@D6H2HOPJF>p$9O5o4Kg(&i4!!6=RnCjzeJ1_);LA3x5HN znu8O^xHgJLgx`%lD*oX7OXAMJfic7R0{%~$nDNfi-iY@a0`h0Z?P&0aRkxC^NM2Q{ z@pt>0K4C0|tV5|T9a|W`eDXRV>iDI5R{$01;w2!7mrQy6@H>V-ls-&=H-#_jrX_7` zQ4Ctdmlz)SIQD6nJ4x;&?TXzB$Z`x%TwoRzPiA@F$&~KS(pQqL8IIw#J9(af_a)x# z1El{6?qc2+^W6e1>bI4CwTjcDTF;}l>pQYHmJik{jnN{T8zUl+)s{qvN3slxT8qG_ zp>c$^A|nwmVpxz8_gUKV{OW>R?YuX_w^QcL5_OR;WT=URZvj@x^duu0H8>q^{jQcj z#ow|8Q7zDBg()(HGXkgelKX3=w7pc-{`+$(x~{gj$JP!OsS234t~ia z)VF{dztjDw`0Lr9et16xR;|NM`Mk(`uOctuW!p0FYmKg0Ri)W7XeF~bdLT*5Fu&5( zoY6(glcipLQL1?DM%pSq)ZmBKYLtJPwfCdmpYCp7OUh<`{^A;A+VyPji|b#R{8?AK^A%1Sg*3BtBlNK$K{I@(FQ#d>(3jM|2%Uri_F_E2W5T`oQekP#X{}q zzx3JZpg+#Kl~ND#!74rAsD8j(D5D;uRsP34 zsl@Akq5myfi)+ah)&3|acitCJUw&plJ>i3-FWyq|!SUDSJkuj5;@ zSVx-|ad>U~Y_WnAtm05*pGxUg-+Mjf9d0IV`=Rybelcz$V?`obwdK68fnnOjY)QC% z5^jt#K`w&rW>&ILAnvQ|H(8IHIl_3re=e04WtJ1@p5*2{V@X2$7;TyfMYLtlT>a(! zh@$%&^4jkIDDm`ne|_ZYU*5X5?gytH?DGo0c|NiA^>fF5_}-h}I&uByZ}Bn8khgdA zk$0}Yv#Ia$8`&$bZTfdtt)9vzNx-`h{oQ1dwo@mNz9j8x=|cW?0PV=%3o*sd852EE znVC?`;G*aAL=a)ov)25IZD)+l4U3+0%$%Y{yCTzFSoEAWmO~aq(R0>(P0_QyTNypK z7#@(vsv5uIrYnr>)<^#xj4v$uPnle>Bto9XMnZO75JyhVK(D;lPgV@g(zdkG%QQ0} zPnz;ApIbjTx|J!rv|{MiN-IUK;SAaLel)KDWtBdD#AHw*x=vC4L;h?j{`X1xD@Ur5 zM0RD%inNTwy;m1eVf)p(y7j+&T2%iRjK7^9P#iR4^hlYug6}O9@6<2gH+x>1+o<@T zqVJFW&z?lerM*^mvI{=b=EG`5{bicOf5-c%_=Dp=0@t%fZl@XZB-9*&8u<-zArk(D zxnBX{99n(Zkx8oTUu*9Wh~}I0DGCo_3k#pf7w=f zv#8^Lp1z_%#pPLD{&fgDFPo*0(5Qra4QPx25$NzT{Ro!XG}f(y%`VzPmDWl(lA7cC6@gN|B%V zsQAw5o7S(*n{nlQ?d&+(?9M~98P__td9+8BRx8cb@tD@W&7(ak-@|FwimrLIN9B9C zHf#UK(cZSm0~c8rjhOYFEPK1z;pc@K<@7aqtL2x~w)Xk$ceZ}Gj^S$lCBO1{;(%<3 z)^ZO4E*|2xVY#(CKGwoVvp3%OF_4Iztq#lV#t&YjpY-UGJJG z-KhhkPD)#9=a`f+4F7hP2u6|1%IA%fk@6_RGcIw~zB+}VGfFFczQe|}TIse~S(r}g z1(IZAj%v4Df!x>1DIXHiz75=yCZ%^MgzEZ`ZC`X9lg@xE&MilPj*52Ii0~ z<*KJ?vvI$R9#Y^}=3@$N(#k(1s>+*$uP@?!DFa5&d#*el z>rjjjja}AgINRvgPxy7KUq9*B?S8$}uiO0kDZk$A*Y<1ndbqpqsMhi;UB7HRU}Mg6 z%$n9JZr-ZbYc~5IJg;Rfug3bysvWD&9%-HGPDK@wGHGJ?ICVN;rO)Z|)}@-onN={l zaEa9^z7l`dveci$iB&tw1X3y6s*@@@RjQfRNvyISzPt*?R!ctZD0+JPj!G5>7DiIJ zBCb50CG8yrl*QNS4xLu36*ayooClC&Te0d-0&Q4Dt9wQ zi*hEyq8(^Ogz}IA(W+DC)+$u`-!Kp7&eGMw-T{VoLqR*ck{v)bCH4$y7#-;aI#veH zoadKCwfkmPPu(dLop*KTUc<(t6W6znua3qrO7wpPw~ms<5;nAee`U<9lR@ocOna{^ z(h8@=%2QP8k>j%TMwyN3r{hS9&V%bLknDMeT77lmdhuDzctyOZvk;P~jCo@*Zbxl6 zZfUqQ+eSf7F4b2j-Ye-0?;9stmmQKla#ZN#QSe=TPg$E_TimPWr{mvBw}Oj#?Chj$ zql(6RJJ= + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E497BF9D-A4DE-430C-BF17-597F24A35474} + Library + + + AutoLotDAL + 512 + Windows + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDAL.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDAL.vb new file mode 100644 index 0000000..9043d6a --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDAL.vb @@ -0,0 +1,206 @@ +Option Strict On +Option Explicit On + +' We will make use of the SQL server +' provider, however it would also be +' permissible to make use of the ADO.NET +' factory pattern for greater flexibility. +Imports System.Data.SqlClient + +Namespace AutoLotConnectedLayer + Public Class InventoryDAL + +#Region "Connection and Disconnection details." + ' This member will be used by all methods. + Private sqlCn As New SqlConnection() + + Public Sub OpenConnection(ByVal connectionString As String) + sqlCn.ConnectionString = connectionString + sqlCn.Open() + End Sub + Public Sub CloseConnection() + sqlCn.Close() + End Sub +#End Region + +#Region "Insert logic (both versions)" + 'Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, _ + ' ByVal make As String, ByVal petName As String) + ' ' Format and execute SQL statement. + ' Dim sql As String = String.Format("Insert Into Inventory" & _ + ' "(CarID, Make, Color, PetName) Values" & _ + ' "('{0}', '{1}', '{2}', '{3}')", id, make, color, petName) + + ' ' Execute using our connection. + ' Using cmd As New SqlCommand(sql, Me.sqlCn) + ' cmd.ExecuteNonQuery() + ' End Using + 'End Sub + + Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, ByVal make As String, ByVal petName As String) + ' Note the 'placeholders' in the SQL query. + Dim sql As String = String.Format("Insert Into Inventory" + "(CarID, Make, Color, PetName) Values" + "(@CarID, @Make, @Color, @PetName)") + + ' This command will have internal parameters. + Using cmd As New SqlCommand(sql, Me.sqlCn) + ' Fill params collection. + Dim param As New SqlParameter() + param.ParameterName = "@CarID" + param.Value = id + param.SqlDbType = SqlDbType.Int + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Make" + param.Value = make + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Color" + param.Value = color + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@PetName" + param.Value = petName + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Delete logic" + Public Sub DeleteCar(ByVal id As Integer) + ' Get ID of car to delete, then do so. + Dim sql As String = String.Format("Delete from Inventory where CarID = '{0}'", id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + Try + cmd.ExecuteNonQuery() + Catch ex As SqlException + Dim er As New Exception("Sorry! That car is on order!", ex) + Throw er + End Try + End Using + End Sub +#End Region + +#Region "Update logic" + Public Sub UpdateCarPetName(ByVal id As Integer, ByVal newPetName As String) + ' Get ID of car to modify and new pet name. + Dim sql As String = String.Format("Update Inventory Set PetName = '{0}' Where CarID = '{1}'", newPetName, id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Select logic" + Public Function GetAllInventory() As DataTable + ' This will hold the records. + Dim inv As New DataTable() + + ' Prep command object. + Dim sql As String = "Select * From Inventory" + Using cmd As New SqlCommand(sql, Me.sqlCn) + Dim dr As SqlDataReader = cmd.ExecuteReader() + ' Fill the DataTable with data from the reader and clean up. + inv.Load(dr) + dr.Close() + End Using + Return inv + End Function +#End Region + +#Region "Trigger stored proc logic" + Public Function LookUpPetName(ByVal carID As Integer) As String + Dim carPetName As String = String.Empty + + ' Establish name of stored proc. + Using cmd As New SqlCommand("GetPetName", Me.sqlCn) + cmd.CommandType = CommandType.StoredProcedure + + ' Input param. + Dim param As New SqlParameter() + param.ParameterName = "@carID" + param.SqlDbType = SqlDbType.Int + param.Value = carID + param.Direction = ParameterDirection.Input + cmd.Parameters.Add(param) + + ' Output param. + param = New SqlParameter() + param.ParameterName = "@petName" + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + param.Direction = ParameterDirection.Output + cmd.Parameters.Add(param) + + ' Execute the stored proc. + cmd.ExecuteNonQuery() + + ' Return output param. + carPetName = DirectCast(cmd.Parameters("@petName").Value, String).Trim() + End Using + Return carPetName + End Function +#End Region + +#Region "Tx Method" + ' A new member of the InventoryDAL class. + Public Sub ProcessCreditRisk(ByVal throwEx As Boolean, ByVal custID As Integer) + ' First, look up current name based on customer ID. + Dim fName As String = String.Empty + Dim lName As String = String.Empty + + Dim cmdSelect As New SqlCommand(String.Format("Select * from Customers where CustID = {0}", custID), sqlCn) + Using dr As SqlDataReader = cmdSelect.ExecuteReader() + While dr.Read() + fName = DirectCast(dr("FirstName"), String) + lName = DirectCast(dr("LastName"), String) + End While + End Using + + ' Create command objects which represent each step of the operation. + Dim cmdRemove As New SqlCommand(String.Format("Delete from Customers where CustID = {0}", custID), sqlCn) + + Dim cmdInsert As New SqlCommand(String.Format("Insert Into CreditRisks" & _ + "(CustID, FirstName, LastName) Values" & _ + "({0}, '{1}', '{2}')", custID, fName, lName), sqlCn) + + ' We will get this from the Connection object. + Dim tx As SqlTransaction = Nothing + Try + tx = sqlCn.BeginTransaction() + + ' Enlist the commands into this transaction. + cmdInsert.Transaction = tx + cmdRemove.Transaction = tx + + ' Execute the commands. + cmdInsert.ExecuteNonQuery() + cmdRemove.ExecuteNonQuery() + + ' Simulate error. + If throwEx Then + Throw New ApplicationException("Sorry! Database error! Tx failed...") + End If + + ' Commit it! + tx.Commit() + Catch ex As Exception + Console.WriteLine(ex.Message) + ' Any error will rollback transaction. + tx.Rollback() + End Try + End Sub +#End Region + + End Class +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDALDisconnected.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDALDisconnected.vb new file mode 100644 index 0000000..fdde709 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/InventoryDALDisconnected.vb @@ -0,0 +1,38 @@ +Option Strict On +Option Explicit On + +Imports System.Data.SqlClient + +Namespace AutoLotDisconnectedLayer + Public Class InventoryDALDisLayer + ' Field data. + Private cnString As String = String.Empty + Private dAdapt As SqlDataAdapter = Nothing + + Public Sub New(ByVal connectionString As String) + cnString = connectionString + + ' Configure the SqlDataAdapter. + ConfigureAdapter(dAdapt) + End Sub + + Private Sub ConfigureAdapter(ByRef dAdapt As SqlDataAdapter) + ' Create the adapter and set up the SelectCommand + dAdapt = New SqlDataAdapter("Select * From Inventory", cnString) + + ' Obtain the remaining Command objects dynamically at runime + ' using the SqlCommandBuilder. + Dim builder As New SqlCommandBuilder(dAdapt) + End Sub + + Public Function GetAllInventory() As DataTable + Dim inv As New DataTable("Inventory") + dAdapt.Fill(inv) + Return inv + End Function + + Public Sub UpdateInventory(ByVal modifiedTable As DataTable) + dAdapt.Update(modifiedTable) + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.myapp b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/AssemblyInfo.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7ba989c --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5036910 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.resx b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.Designer.vb new file mode 100644 index 0000000..616219e --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.My.MySettings + Get + Return Global.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.settings b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 2)/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.sln b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.sln new file mode 100644 index 0000000..d9f0d95 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoLotDAL", "AutoLotDAL.vbproj", "{E497BF9D-A4DE-430C-BF17-597F24A35474}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E497BF9D-A4DE-430C-BF17-597F24A35474}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.suo b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDAL.suo new file mode 100644 index 0000000000000000000000000000000000000000..9f5bafca23517749c1b9c42868857f2ab6f4a5f6 GIT binary patch literal 18944 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E497BF9D-A4DE-430C-BF17-597F24A35474} + Library + + + AutoLotDAL + 512 + Windows + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AutoLotDAL.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + True + True + AutoLotDataSet.xsd + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + AutoLotDataSet.xsd + + + Designer + MSDataSetGenerator + AutoLotDataSet.Designer.vb + + + AutoLotDataSet.xsd + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.Designer.vb new file mode 100644 index 0000000..23c8f8f --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.Designer.vb @@ -0,0 +1,3044 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +''' +'''Represents a strongly typed in-memory cache of data. +''' + _ +Partial Public Class AutoLotDataSet + Inherits Global.System.Data.DataSet + + Private tableCustomers As CustomersDataTable + + Private tableInventory As InventoryDataTable + + Private tableOrders As OrdersDataTable + + Private relationFK_Orders_Customers As Global.System.Data.DataRelation + + Private relationFK_Orders_Inventory As Global.System.Data.DataRelation + + Private _schemaSerializationMode As Global.System.Data.SchemaSerializationMode = Global.System.Data.SchemaSerializationMode.IncludeSchema + + _ + Public Sub New() + MyBase.New + Me.BeginInit + Me.InitClass + Dim schemaChangedHandler As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler MyBase.Relations.CollectionChanged, schemaChangedHandler + Me.EndInit + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context, false) + If (Me.IsBinarySerialized(info, context) = true) Then + Me.InitVars(false) + Dim schemaChangedHandler1 As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler Me.Tables.CollectionChanged, schemaChangedHandler1 + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler1 + Return + End If + Dim strSchema As String = CType(info.GetValue("XmlSchema", GetType(String)),String) + If (Me.DetermineSchemaSerializationMode(info, context) = Global.System.Data.SchemaSerializationMode.IncludeSchema) Then + Dim ds As Global.System.Data.DataSet = New Global.System.Data.DataSet + ds.ReadXmlSchema(New Global.System.Xml.XmlTextReader(New Global.System.IO.StringReader(strSchema))) + If (Not (ds.Tables("Customers")) Is Nothing) Then + MyBase.Tables.Add(New CustomersDataTable(ds.Tables("Customers"))) + End If + If (Not (ds.Tables("Inventory")) Is Nothing) Then + MyBase.Tables.Add(New InventoryDataTable(ds.Tables("Inventory"))) + End If + If (Not (ds.Tables("Orders")) Is Nothing) Then + MyBase.Tables.Add(New OrdersDataTable(ds.Tables("Orders"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, Global.System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXmlSchema(New Global.System.Xml.XmlTextReader(New Global.System.IO.StringReader(strSchema))) + End If + Me.GetSerializationData(info, context) + Dim schemaChangedHandler As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler + End Sub + + _ + Public ReadOnly Property Customers() As CustomersDataTable + Get + Return Me.tableCustomers + End Get + End Property + + _ + Public ReadOnly Property Inventory() As InventoryDataTable + Get + Return Me.tableInventory + End Get + End Property + + _ + Public ReadOnly Property Orders() As OrdersDataTable + Get + Return Me.tableOrders + End Get + End Property + + _ + Public Overrides Property SchemaSerializationMode() As Global.System.Data.SchemaSerializationMode + Get + Return Me._schemaSerializationMode + End Get + Set + Me._schemaSerializationMode = value + End Set + End Property + + _ + Public Shadows ReadOnly Property Tables() As Global.System.Data.DataTableCollection + Get + Return MyBase.Tables + End Get + End Property + + _ + Public Shadows ReadOnly Property Relations() As Global.System.Data.DataRelationCollection + Get + Return MyBase.Relations + End Get + End Property + + _ + Protected Overrides Sub InitializeDerivedDataSet() + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Public Overrides Function Clone() As Global.System.Data.DataSet + Dim cln As AutoLotDataSet = CType(MyBase.Clone,AutoLotDataSet) + cln.InitVars + cln.SchemaSerializationMode = Me.SchemaSerializationMode + Return cln + End Function + + _ + Protected Overrides Function ShouldSerializeTables() As Boolean + Return false + End Function + + _ + Protected Overrides Function ShouldSerializeRelations() As Boolean + Return false + End Function + + _ + Protected Overrides Sub ReadXmlSerializable(ByVal reader As Global.System.Xml.XmlReader) + If (Me.DetermineSchemaSerializationMode(reader) = Global.System.Data.SchemaSerializationMode.IncludeSchema) Then + Me.Reset + Dim ds As Global.System.Data.DataSet = New Global.System.Data.DataSet + ds.ReadXml(reader) + If (Not (ds.Tables("Customers")) Is Nothing) Then + MyBase.Tables.Add(New CustomersDataTable(ds.Tables("Customers"))) + End If + If (Not (ds.Tables("Inventory")) Is Nothing) Then + MyBase.Tables.Add(New InventoryDataTable(ds.Tables("Inventory"))) + End If + If (Not (ds.Tables("Orders")) Is Nothing) Then + MyBase.Tables.Add(New OrdersDataTable(ds.Tables("Orders"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, Global.System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXml(reader) + Me.InitVars + End If + End Sub + + _ + Protected Overrides Function GetSchemaSerializable() As Global.System.Xml.Schema.XmlSchema + Dim stream As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Me.WriteXmlSchema(New Global.System.Xml.XmlTextWriter(stream, Nothing)) + stream.Position = 0 + Return Global.System.Xml.Schema.XmlSchema.Read(New Global.System.Xml.XmlTextReader(stream), Nothing) + End Function + + _ + Friend Overloads Sub InitVars() + Me.InitVars(true) + End Sub + + _ + Friend Overloads Sub InitVars(ByVal initTable As Boolean) + Me.tableCustomers = CType(MyBase.Tables("Customers"),CustomersDataTable) + If (initTable = true) Then + If (Not (Me.tableCustomers) Is Nothing) Then + Me.tableCustomers.InitVars + End If + End If + Me.tableInventory = CType(MyBase.Tables("Inventory"),InventoryDataTable) + If (initTable = true) Then + If (Not (Me.tableInventory) Is Nothing) Then + Me.tableInventory.InitVars + End If + End If + Me.tableOrders = CType(MyBase.Tables("Orders"),OrdersDataTable) + If (initTable = true) Then + If (Not (Me.tableOrders) Is Nothing) Then + Me.tableOrders.InitVars + End If + End If + Me.relationFK_Orders_Customers = Me.Relations("FK_Orders_Customers") + Me.relationFK_Orders_Inventory = Me.Relations("FK_Orders_Inventory") + End Sub + + _ + Private Sub InitClass() + Me.DataSetName = "AutoLotDataSet" + Me.Prefix = "" + Me.Namespace = "http://tempuri.org/AutoLotDataSet.xsd" + Me.EnforceConstraints = true + Me.SchemaSerializationMode = Global.System.Data.SchemaSerializationMode.IncludeSchema + Me.tableCustomers = New CustomersDataTable + MyBase.Tables.Add(Me.tableCustomers) + Me.tableInventory = New InventoryDataTable + MyBase.Tables.Add(Me.tableInventory) + Me.tableOrders = New OrdersDataTable + MyBase.Tables.Add(Me.tableOrders) + Me.relationFK_Orders_Customers = New Global.System.Data.DataRelation("FK_Orders_Customers", New Global.System.Data.DataColumn() {Me.tableCustomers.CustIDColumn}, New Global.System.Data.DataColumn() {Me.tableOrders.CustIDColumn}, false) + Me.Relations.Add(Me.relationFK_Orders_Customers) + Me.relationFK_Orders_Inventory = New Global.System.Data.DataRelation("FK_Orders_Inventory", New Global.System.Data.DataColumn() {Me.tableInventory.CarIDColumn}, New Global.System.Data.DataColumn() {Me.tableOrders.CarIDColumn}, false) + Me.Relations.Add(Me.relationFK_Orders_Inventory) + End Sub + + _ + Private Function ShouldSerializeCustomers() As Boolean + Return false + End Function + + _ + Private Function ShouldSerializeInventory() As Boolean + Return false + End Function + + _ + Private Function ShouldSerializeOrders() As Boolean + Return false + End Function + + _ + Private Sub SchemaChanged(ByVal sender As Object, ByVal e As Global.System.ComponentModel.CollectionChangeEventArgs) + If (e.Action = Global.System.ComponentModel.CollectionChangeAction.Remove) Then + Me.InitVars + End If + End Sub + + _ + Public Shared Function GetTypedDataSetSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim ds As AutoLotDataSet = New AutoLotDataSet + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim any As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any.Namespace = ds.Namespace + sequence.Items.Add(any) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + + Public Delegate Sub CustomersRowChangeEventHandler(ByVal sender As Object, ByVal e As CustomersRowChangeEvent) + + Public Delegate Sub InventoryRowChangeEventHandler(ByVal sender As Object, ByVal e As InventoryRowChangeEvent) + + Public Delegate Sub OrdersRowChangeEventHandler(ByVal sender As Object, ByVal e As OrdersRowChangeEvent) + + ''' + '''Represents the strongly named DataTable class. + ''' + _ + Partial Public Class CustomersDataTable + Inherits Global.System.Data.TypedTableBase(Of CustomersRow) + + Private columnCustID As Global.System.Data.DataColumn + + Private columnFirstName As Global.System.Data.DataColumn + + Private columnLastName As Global.System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Customers" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As Global.System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property CustIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnCustID + End Get + End Property + + _ + Public ReadOnly Property FirstNameColumn() As Global.System.Data.DataColumn + Get + Return Me.columnFirstName + End Get + End Property + + _ + Public ReadOnly Property LastNameColumn() As Global.System.Data.DataColumn + Get + Return Me.columnLastName + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As CustomersRow + Get + Return CType(Me.Rows(index),CustomersRow) + End Get + End Property + + Public Event CustomersRowChanging As CustomersRowChangeEventHandler + + Public Event CustomersRowChanged As CustomersRowChangeEventHandler + + Public Event CustomersRowDeleting As CustomersRowChangeEventHandler + + Public Event CustomersRowDeleted As CustomersRowChangeEventHandler + + _ + Public Overloads Sub AddCustomersRow(ByVal row As CustomersRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddCustomersRow(ByVal CustID As Integer, ByVal FirstName As String, ByVal LastName As String) As CustomersRow + Dim rowCustomersRow As CustomersRow = CType(Me.NewRow,CustomersRow) + Dim columnValuesArray() As Object = New Object() {CustID, FirstName, LastName} + rowCustomersRow.ItemArray = columnValuesArray + Me.Rows.Add(rowCustomersRow) + Return rowCustomersRow + End Function + + _ + Public Function FindByCustID(ByVal CustID As Integer) As CustomersRow + Return CType(Me.Rows.Find(New Object() {CustID}),CustomersRow) + End Function + + _ + Public Overrides Function Clone() As Global.System.Data.DataTable + Dim cln As CustomersDataTable = CType(MyBase.Clone,CustomersDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As Global.System.Data.DataTable + Return New CustomersDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnCustID = MyBase.Columns("CustID") + Me.columnFirstName = MyBase.Columns("FirstName") + Me.columnLastName = MyBase.Columns("LastName") + End Sub + + _ + Private Sub InitClass() + Me.columnCustID = New Global.System.Data.DataColumn("CustID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnCustID) + Me.columnFirstName = New Global.System.Data.DataColumn("FirstName", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnFirstName) + Me.columnLastName = New Global.System.Data.DataColumn("LastName", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnLastName) + Me.Constraints.Add(New Global.System.Data.UniqueConstraint("Constraint1", New Global.System.Data.DataColumn() {Me.columnCustID}, true)) + Me.columnCustID.AllowDBNull = false + Me.columnCustID.Unique = true + Me.columnFirstName.AllowDBNull = false + Me.columnFirstName.MaxLength = 50 + Me.columnLastName.AllowDBNull = false + Me.columnLastName.MaxLength = 50 + End Sub + + _ + Public Function NewCustomersRow() As CustomersRow + Return CType(Me.NewRow,CustomersRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As Global.System.Data.DataRowBuilder) As Global.System.Data.DataRow + Return New CustomersRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As Global.System.Type + Return GetType(CustomersRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.CustomersRowChangedEvent) Is Nothing) Then + RaiseEvent CustomersRowChanged(Me, New CustomersRowChangeEvent(CType(e.Row,CustomersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.CustomersRowChangingEvent) Is Nothing) Then + RaiseEvent CustomersRowChanging(Me, New CustomersRowChangeEvent(CType(e.Row,CustomersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.CustomersRowDeletedEvent) Is Nothing) Then + RaiseEvent CustomersRowDeleted(Me, New CustomersRowChangeEvent(CType(e.Row,CustomersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.CustomersRowDeletingEvent) Is Nothing) Then + RaiseEvent CustomersRowDeleting(Me, New CustomersRowChangeEvent(CType(e.Row,CustomersRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveCustomersRow(ByVal row As CustomersRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim ds As AutoLotDataSet = New AutoLotDataSet + Dim any1 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "CustomersDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + End Class + + ''' + '''Represents the strongly named DataTable class. + ''' + _ + Partial Public Class InventoryDataTable + Inherits Global.System.Data.TypedTableBase(Of InventoryRow) + + Private columnCarID As Global.System.Data.DataColumn + + Private columnMake As Global.System.Data.DataColumn + + Private columnColor As Global.System.Data.DataColumn + + Private columnPetName As Global.System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Inventory" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As Global.System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property CarIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnCarID + End Get + End Property + + _ + Public ReadOnly Property MakeColumn() As Global.System.Data.DataColumn + Get + Return Me.columnMake + End Get + End Property + + _ + Public ReadOnly Property ColorColumn() As Global.System.Data.DataColumn + Get + Return Me.columnColor + End Get + End Property + + _ + Public ReadOnly Property PetNameColumn() As Global.System.Data.DataColumn + Get + Return Me.columnPetName + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As InventoryRow + Get + Return CType(Me.Rows(index),InventoryRow) + End Get + End Property + + Public Event InventoryRowChanging As InventoryRowChangeEventHandler + + Public Event InventoryRowChanged As InventoryRowChangeEventHandler + + Public Event InventoryRowDeleting As InventoryRowChangeEventHandler + + Public Event InventoryRowDeleted As InventoryRowChangeEventHandler + + _ + Public Overloads Sub AddInventoryRow(ByVal row As InventoryRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddInventoryRow(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String) As InventoryRow + Dim rowInventoryRow As InventoryRow = CType(Me.NewRow,InventoryRow) + Dim columnValuesArray() As Object = New Object() {CarID, Make, Color, PetName} + rowInventoryRow.ItemArray = columnValuesArray + Me.Rows.Add(rowInventoryRow) + Return rowInventoryRow + End Function + + _ + Public Function FindByCarID(ByVal CarID As Integer) As InventoryRow + Return CType(Me.Rows.Find(New Object() {CarID}),InventoryRow) + End Function + + _ + Public Overrides Function Clone() As Global.System.Data.DataTable + Dim cln As InventoryDataTable = CType(MyBase.Clone,InventoryDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As Global.System.Data.DataTable + Return New InventoryDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnCarID = MyBase.Columns("CarID") + Me.columnMake = MyBase.Columns("Make") + Me.columnColor = MyBase.Columns("Color") + Me.columnPetName = MyBase.Columns("PetName") + End Sub + + _ + Private Sub InitClass() + Me.columnCarID = New Global.System.Data.DataColumn("CarID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnCarID) + Me.columnMake = New Global.System.Data.DataColumn("Make", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnMake) + Me.columnColor = New Global.System.Data.DataColumn("Color", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnColor) + Me.columnPetName = New Global.System.Data.DataColumn("PetName", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnPetName) + Me.Constraints.Add(New Global.System.Data.UniqueConstraint("Constraint1", New Global.System.Data.DataColumn() {Me.columnCarID}, true)) + Me.columnCarID.AllowDBNull = false + Me.columnCarID.Unique = true + Me.columnMake.AllowDBNull = false + Me.columnMake.MaxLength = 50 + Me.columnColor.AllowDBNull = false + Me.columnColor.MaxLength = 50 + Me.columnPetName.MaxLength = 50 + End Sub + + _ + Public Function NewInventoryRow() As InventoryRow + Return CType(Me.NewRow,InventoryRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As Global.System.Data.DataRowBuilder) As Global.System.Data.DataRow + Return New InventoryRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As Global.System.Type + Return GetType(InventoryRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.InventoryRowChangedEvent) Is Nothing) Then + RaiseEvent InventoryRowChanged(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.InventoryRowChangingEvent) Is Nothing) Then + RaiseEvent InventoryRowChanging(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.InventoryRowDeletedEvent) Is Nothing) Then + RaiseEvent InventoryRowDeleted(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.InventoryRowDeletingEvent) Is Nothing) Then + RaiseEvent InventoryRowDeleting(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveInventoryRow(ByVal row As InventoryRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim ds As AutoLotDataSet = New AutoLotDataSet + Dim any1 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "InventoryDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + End Class + + ''' + '''Represents the strongly named DataTable class. + ''' + _ + Partial Public Class OrdersDataTable + Inherits Global.System.Data.TypedTableBase(Of OrdersRow) + + Private columnOrderID As Global.System.Data.DataColumn + + Private columnCustID As Global.System.Data.DataColumn + + Private columnCarID As Global.System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Orders" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As Global.System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property OrderIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnOrderID + End Get + End Property + + _ + Public ReadOnly Property CustIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnCustID + End Get + End Property + + _ + Public ReadOnly Property CarIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnCarID + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As OrdersRow + Get + Return CType(Me.Rows(index),OrdersRow) + End Get + End Property + + Public Event OrdersRowChanging As OrdersRowChangeEventHandler + + Public Event OrdersRowChanged As OrdersRowChangeEventHandler + + Public Event OrdersRowDeleting As OrdersRowChangeEventHandler + + Public Event OrdersRowDeleted As OrdersRowChangeEventHandler + + _ + Public Overloads Sub AddOrdersRow(ByVal row As OrdersRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddOrdersRow(ByVal OrderID As Integer, ByVal parentCustomersRowByFK_Orders_Customers As CustomersRow, ByVal parentInventoryRowByFK_Orders_Inventory As InventoryRow) As OrdersRow + Dim rowOrdersRow As OrdersRow = CType(Me.NewRow,OrdersRow) + Dim columnValuesArray() As Object = New Object() {OrderID, Nothing, Nothing} + If (Not (parentCustomersRowByFK_Orders_Customers) Is Nothing) Then + columnValuesArray(1) = parentCustomersRowByFK_Orders_Customers(0) + End If + If (Not (parentInventoryRowByFK_Orders_Inventory) Is Nothing) Then + columnValuesArray(2) = parentInventoryRowByFK_Orders_Inventory(0) + End If + rowOrdersRow.ItemArray = columnValuesArray + Me.Rows.Add(rowOrdersRow) + Return rowOrdersRow + End Function + + _ + Public Function FindByOrderID(ByVal OrderID As Integer) As OrdersRow + Return CType(Me.Rows.Find(New Object() {OrderID}),OrdersRow) + End Function + + _ + Public Overrides Function Clone() As Global.System.Data.DataTable + Dim cln As OrdersDataTable = CType(MyBase.Clone,OrdersDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As Global.System.Data.DataTable + Return New OrdersDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnOrderID = MyBase.Columns("OrderID") + Me.columnCustID = MyBase.Columns("CustID") + Me.columnCarID = MyBase.Columns("CarID") + End Sub + + _ + Private Sub InitClass() + Me.columnOrderID = New Global.System.Data.DataColumn("OrderID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnOrderID) + Me.columnCustID = New Global.System.Data.DataColumn("CustID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnCustID) + Me.columnCarID = New Global.System.Data.DataColumn("CarID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnCarID) + Me.Constraints.Add(New Global.System.Data.UniqueConstraint("Constraint1", New Global.System.Data.DataColumn() {Me.columnOrderID}, true)) + Me.columnOrderID.AllowDBNull = false + Me.columnOrderID.Unique = true + Me.columnCustID.AllowDBNull = false + Me.columnCarID.AllowDBNull = false + End Sub + + _ + Public Function NewOrdersRow() As OrdersRow + Return CType(Me.NewRow,OrdersRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As Global.System.Data.DataRowBuilder) As Global.System.Data.DataRow + Return New OrdersRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As Global.System.Type + Return GetType(OrdersRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.OrdersRowChangedEvent) Is Nothing) Then + RaiseEvent OrdersRowChanged(Me, New OrdersRowChangeEvent(CType(e.Row,OrdersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.OrdersRowChangingEvent) Is Nothing) Then + RaiseEvent OrdersRowChanging(Me, New OrdersRowChangeEvent(CType(e.Row,OrdersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.OrdersRowDeletedEvent) Is Nothing) Then + RaiseEvent OrdersRowDeleted(Me, New OrdersRowChangeEvent(CType(e.Row,OrdersRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.OrdersRowDeletingEvent) Is Nothing) Then + RaiseEvent OrdersRowDeleting(Me, New OrdersRowChangeEvent(CType(e.Row,OrdersRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveOrdersRow(ByVal row As OrdersRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim ds As AutoLotDataSet = New AutoLotDataSet + Dim any1 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "OrdersDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + End Class + + ''' + '''Represents strongly named DataRow class. + ''' + _ + Partial Public Class CustomersRow + Inherits Global.System.Data.DataRow + + Private tableCustomers As CustomersDataTable + + _ + Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableCustomers = CType(Me.Table,CustomersDataTable) + End Sub + + _ + Public Property CustID() As Integer + Get + Return CType(Me(Me.tableCustomers.CustIDColumn),Integer) + End Get + Set + Me(Me.tableCustomers.CustIDColumn) = value + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return CType(Me(Me.tableCustomers.FirstNameColumn),String) + End Get + Set + Me(Me.tableCustomers.FirstNameColumn) = value + End Set + End Property + + _ + Public Property LastName() As String + Get + Return CType(Me(Me.tableCustomers.LastNameColumn),String) + End Get + Set + Me(Me.tableCustomers.LastNameColumn) = value + End Set + End Property + + _ + Public Function GetOrdersRows() As OrdersRow() + If (Me.Table.ChildRelations("FK_Orders_Customers") Is Nothing) Then + Return New OrdersRow(-1) {} + Else + Return CType(MyBase.GetChildRows(Me.Table.ChildRelations("FK_Orders_Customers")),OrdersRow()) + End If + End Function + End Class + + ''' + '''Represents strongly named DataRow class. + ''' + _ + Partial Public Class InventoryRow + Inherits Global.System.Data.DataRow + + Private tableInventory As InventoryDataTable + + _ + Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableInventory = CType(Me.Table,InventoryDataTable) + End Sub + + _ + Public Property CarID() As Integer + Get + Return CType(Me(Me.tableInventory.CarIDColumn),Integer) + End Get + Set + Me(Me.tableInventory.CarIDColumn) = value + End Set + End Property + + _ + Public Property Make() As String + Get + Return CType(Me(Me.tableInventory.MakeColumn),String) + End Get + Set + Me(Me.tableInventory.MakeColumn) = value + End Set + End Property + + _ + Public Property Color() As String + Get + Return CType(Me(Me.tableInventory.ColorColumn),String) + End Get + Set + Me(Me.tableInventory.ColorColumn) = value + End Set + End Property + + _ + Public Property PetName() As String + Get + Try + Return CType(Me(Me.tableInventory.PetNameColumn),String) + Catch e As Global.System.InvalidCastException + Throw New Global.System.Data.StrongTypingException("The value for column 'PetName' in table 'Inventory' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableInventory.PetNameColumn) = value + End Set + End Property + + _ + Public Function IsPetNameNull() As Boolean + Return Me.IsNull(Me.tableInventory.PetNameColumn) + End Function + + _ + Public Sub SetPetNameNull() + Me(Me.tableInventory.PetNameColumn) = Global.System.Convert.DBNull + End Sub + + _ + Public Function GetOrdersRows() As OrdersRow() + If (Me.Table.ChildRelations("FK_Orders_Inventory") Is Nothing) Then + Return New OrdersRow(-1) {} + Else + Return CType(MyBase.GetChildRows(Me.Table.ChildRelations("FK_Orders_Inventory")),OrdersRow()) + End If + End Function + End Class + + ''' + '''Represents strongly named DataRow class. + ''' + _ + Partial Public Class OrdersRow + Inherits Global.System.Data.DataRow + + Private tableOrders As OrdersDataTable + + _ + Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableOrders = CType(Me.Table,OrdersDataTable) + End Sub + + _ + Public Property OrderID() As Integer + Get + Return CType(Me(Me.tableOrders.OrderIDColumn),Integer) + End Get + Set + Me(Me.tableOrders.OrderIDColumn) = value + End Set + End Property + + _ + Public Property CustID() As Integer + Get + Return CType(Me(Me.tableOrders.CustIDColumn),Integer) + End Get + Set + Me(Me.tableOrders.CustIDColumn) = value + End Set + End Property + + _ + Public Property CarID() As Integer + Get + Return CType(Me(Me.tableOrders.CarIDColumn),Integer) + End Get + Set + Me(Me.tableOrders.CarIDColumn) = value + End Set + End Property + + _ + Public Property CustomersRow() As CustomersRow + Get + Return CType(Me.GetParentRow(Me.Table.ParentRelations("FK_Orders_Customers")),CustomersRow) + End Get + Set + Me.SetParentRow(value, Me.Table.ParentRelations("FK_Orders_Customers")) + End Set + End Property + + _ + Public Property InventoryRow() As InventoryRow + Get + Return CType(Me.GetParentRow(Me.Table.ParentRelations("FK_Orders_Inventory")),InventoryRow) + End Get + Set + Me.SetParentRow(value, Me.Table.ParentRelations("FK_Orders_Inventory")) + End Set + End Property + End Class + + ''' + '''Row event argument class + ''' + _ + Public Class CustomersRowChangeEvent + Inherits Global.System.EventArgs + + Private eventRow As CustomersRow + + Private eventAction As Global.System.Data.DataRowAction + + _ + Public Sub New(ByVal row As CustomersRow, ByVal action As Global.System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As CustomersRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As Global.System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class + + ''' + '''Row event argument class + ''' + _ + Public Class InventoryRowChangeEvent + Inherits Global.System.EventArgs + + Private eventRow As InventoryRow + + Private eventAction As Global.System.Data.DataRowAction + + _ + Public Sub New(ByVal row As InventoryRow, ByVal action As Global.System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As InventoryRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As Global.System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class + + ''' + '''Row event argument class + ''' + _ + Public Class OrdersRowChangeEvent + Inherits Global.System.EventArgs + + Private eventRow As OrdersRow + + Private eventAction As Global.System.Data.DataRowAction + + _ + Public Sub New(ByVal row As OrdersRow, ByVal action As Global.System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As OrdersRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As Global.System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class +End Class + +Namespace AutoLotDataSetTableAdapters + + ''' + '''Represents the connection and commands used to retrieve and save data. + ''' + _ + Partial Public Class CustomersTableAdapter + Inherits Global.System.ComponentModel.Component + + Private WithEvents _adapter As Global.System.Data.SqlClient.SqlDataAdapter + + Private _connection As Global.System.Data.SqlClient.SqlConnection + + Private _transaction As Global.System.Data.SqlClient.SqlTransaction + + Private _commandCollection() As Global.System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As Global.System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),Global.System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Friend Property Transaction() As Global.System.Data.SqlClient.SqlTransaction + Get + Return Me._transaction + End Get + Set + Me._transaction = value + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + Me.CommandCollection(i).Transaction = Me._transaction + i = (i + 1) + Loop + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.DeleteCommand) Is Nothing)) Then + Me.Adapter.DeleteCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.InsertCommand) Is Nothing)) Then + Me.Adapter.InsertCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.UpdateCommand) Is Nothing)) Then + Me.Adapter.UpdateCommand.Transaction = Me._transaction + End If + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As Global.System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New Global.System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As Global.System.Data.Common.DataTableMapping = New Global.System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Customers" + tableMapping.ColumnMappings.Add("CustID", "CustID") + tableMapping.ColumnMappings.Add("FirstName", "FirstName") + tableMapping.ColumnMappings.Add("LastName", "LastName") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Customers] WHERE (([CustID] = @Original_CustID) AND ([FirstNam"& _ + "e] = @Original_FirstName) AND ([LastName] = @Original_LastName))" + Me._adapter.DeleteCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_FirstName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "FirstName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_LastName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "LastName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Customers] ([CustID], [FirstName], [LastName]) VALUES (@CustID"& _ + ", @FirstName, @LastName);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CustID, FirstName, LastName FROM Customers WHE"& _ + "RE (CustID = @CustID)" + Me._adapter.InsertCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@FirstName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "FirstName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@LastName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "LastName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Customers] SET [CustID] = @CustID, [FirstName] = @FirstName, [LastN"& _ + "ame] = @LastName WHERE (([CustID] = @Original_CustID) AND ([FirstName] = @Origin"& _ + "al_FirstName) AND ([LastName] = @Original_LastName));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CustID, FirstName,"& _ + " LastName FROM Customers WHERE (CustID = @CustID)" + Me._adapter.UpdateCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@FirstName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "FirstName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@LastName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "LastName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_FirstName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "FirstName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_LastName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "LastName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New Global.System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.My.MySettings.Default.AutoLotConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New Global.System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New Global.System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT CustID, FirstName, LastName FROM dbo.Customers" + Me._commandCollection(0).CommandType = Global.System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As AutoLotDataSet.CustomersDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As AutoLotDataSet.CustomersDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As AutoLotDataSet.CustomersDataTable = New AutoLotDataSet.CustomersDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As AutoLotDataSet.CustomersDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As AutoLotDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Customers") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(New Global.System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_CustID As Integer, ByVal Original_FirstName As String, ByVal Original_LastName As String) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_CustID,Integer) + If (Original_FirstName Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_FirstName,String) + End If + If (Original_LastName Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_LastName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal CustID As Integer, ByVal FirstName As String, ByVal LastName As String) As Integer + Me.Adapter.InsertCommand.Parameters(0).Value = CType(CustID,Integer) + If (FirstName Is Nothing) Then + Throw New Global.System.ArgumentNullException("FirstName") + Else + Me.Adapter.InsertCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (LastName Is Nothing) Then + Throw New Global.System.ArgumentNullException("LastName") + Else + Me.Adapter.InsertCommand.Parameters(2).Value = CType(LastName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal CustID As Integer, ByVal FirstName As String, ByVal LastName As String, ByVal Original_CustID As Integer, ByVal Original_FirstName As String, ByVal Original_LastName As String) As Integer + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(CustID,Integer) + If (FirstName Is Nothing) Then + Throw New Global.System.ArgumentNullException("FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(FirstName,String) + End If + If (LastName Is Nothing) Then + Throw New Global.System.ArgumentNullException("LastName") + Else + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(LastName,String) + End If + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(Original_CustID,Integer) + If (Original_FirstName Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_FirstName") + Else + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(Original_FirstName,String) + End If + If (Original_LastName Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_LastName") + Else + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_LastName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal FirstName As String, ByVal LastName As String, ByVal Original_CustID As Integer, ByVal Original_FirstName As String, ByVal Original_LastName As String) As Integer + Return Me.Update(Original_CustID, FirstName, LastName, Original_CustID, Original_FirstName, Original_LastName) + End Function + End Class + + ''' + '''Represents the connection and commands used to retrieve and save data. + ''' + _ + Partial Public Class InventoryTableAdapter + Inherits Global.System.ComponentModel.Component + + Private WithEvents _adapter As Global.System.Data.SqlClient.SqlDataAdapter + + Private _connection As Global.System.Data.SqlClient.SqlConnection + + Private _transaction As Global.System.Data.SqlClient.SqlTransaction + + Private _commandCollection() As Global.System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As Global.System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),Global.System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Friend Property Transaction() As Global.System.Data.SqlClient.SqlTransaction + Get + Return Me._transaction + End Get + Set + Me._transaction = value + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + Me.CommandCollection(i).Transaction = Me._transaction + i = (i + 1) + Loop + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.DeleteCommand) Is Nothing)) Then + Me.Adapter.DeleteCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.InsertCommand) Is Nothing)) Then + Me.Adapter.InsertCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.UpdateCommand) Is Nothing)) Then + Me.Adapter.UpdateCommand.Transaction = Me._transaction + End If + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As Global.System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New Global.System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As Global.System.Data.Common.DataTableMapping = New Global.System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Inventory" + tableMapping.ColumnMappings.Add("CarID", "CarID") + tableMapping.ColumnMappings.Add("Make", "Make") + tableMapping.ColumnMappings.Add("Color", "Color") + tableMapping.ColumnMappings.Add("PetName", "PetName") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Inventory] WHERE (([CarID] = @Original_CarID) AND ([Make] = @O"& _ + "riginal_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [Pet"& _ + "Name] IS NULL) OR ([PetName] = @Original_PetName)))" + Me._adapter.DeleteCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@IsNull_PetName", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Inventory] ([CarID], [Make], [Color], [PetName]) VALUES (@CarI"& _ + "D, @Make, @Color, @PetName);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CarID, Make, Color, PetName FROM Inventory "& _ + "WHERE (CarID = @CarID)" + Me._adapter.InsertCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Inventory] SET [CarID] = @CarID, [Make] = @Make, [Color] = @Color, "& _ + "[PetName] = @PetName WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_"& _ + "Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS"& _ + " NULL) OR ([PetName] = @Original_PetName)));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CarID, Make, Color, PetName"& _ + " FROM Inventory WHERE (CarID = @CarID)" + Me._adapter.UpdateCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@IsNull_PetName", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New Global.System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.My.MySettings.Default.AutoLotConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New Global.System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New Global.System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT CarID, Make, Color, PetName FROM dbo.Inventory" + Me._commandCollection(0).CommandType = Global.System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As AutoLotDataSet.InventoryDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As AutoLotDataSet.InventoryDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As AutoLotDataSet.InventoryDataTable = New AutoLotDataSet.InventoryDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As AutoLotDataSet.InventoryDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As AutoLotDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Inventory") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(New Global.System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_CarID,Integer) + If (Original_Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Make") + Else + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_Make,String) + End If + If (Original_Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Color") + Else + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_Color,String) + End If + If (Original_PetName Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = Global.System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = CType(Original_PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String) As Integer + Me.Adapter.InsertCommand.Parameters(0).Value = CType(CarID,Integer) + If (Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Make") + Else + Me.Adapter.InsertCommand.Parameters(1).Value = CType(Make,String) + End If + If (Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Color") + Else + Me.Adapter.InsertCommand.Parameters(2).Value = CType(Color,String) + End If + If (PetName Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(3).Value = Global.System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(3).Value = CType(PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String, ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(CarID,Integer) + If (Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Make") + Else + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(Make,String) + End If + If (Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Color") + Else + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(Color,String) + End If + If (PetName Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(3).Value = Global.System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(PetName,String) + End If + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(Original_CarID,Integer) + If (Original_Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Make") + Else + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_Make,String) + End If + If (Original_Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Color") + Else + Me.Adapter.UpdateCommand.Parameters(6).Value = CType(Original_Color,String) + End If + If (Original_PetName Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(8).Value = Global.System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(Original_PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal Make As String, ByVal Color As String, ByVal PetName As String, ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Return Me.Update(Original_CarID, Make, Color, PetName, Original_CarID, Original_Make, Original_Color, Original_PetName) + End Function + End Class + + ''' + '''Represents the connection and commands used to retrieve and save data. + ''' + _ + Partial Public Class OrdersTableAdapter + Inherits Global.System.ComponentModel.Component + + Private WithEvents _adapter As Global.System.Data.SqlClient.SqlDataAdapter + + Private _connection As Global.System.Data.SqlClient.SqlConnection + + Private _transaction As Global.System.Data.SqlClient.SqlTransaction + + Private _commandCollection() As Global.System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As Global.System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),Global.System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Friend Property Transaction() As Global.System.Data.SqlClient.SqlTransaction + Get + Return Me._transaction + End Get + Set + Me._transaction = value + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + Me.CommandCollection(i).Transaction = Me._transaction + i = (i + 1) + Loop + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.DeleteCommand) Is Nothing)) Then + Me.Adapter.DeleteCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.InsertCommand) Is Nothing)) Then + Me.Adapter.InsertCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.UpdateCommand) Is Nothing)) Then + Me.Adapter.UpdateCommand.Transaction = Me._transaction + End If + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As Global.System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New Global.System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As Global.System.Data.Common.DataTableMapping = New Global.System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Orders" + tableMapping.ColumnMappings.Add("OrderID", "OrderID") + tableMapping.ColumnMappings.Add("CustID", "CustID") + tableMapping.ColumnMappings.Add("CarID", "CarID") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Orders] WHERE (([OrderID] = @Original_OrderID) AND ([CustID] ="& _ + " @Original_CustID) AND ([CarID] = @Original_CarID))" + Me._adapter.DeleteCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_OrderID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "OrderID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Orders] ([OrderID], [CustID], [CarID]) VALUES (@OrderID, @Cust"& _ + "ID, @CarID);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT OrderID, CustID, CarID FROM Orders WHERE (OrderID = @OrderI"& _ + "D)" + Me._adapter.InsertCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@OrderID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "OrderID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Orders] SET [OrderID] = @OrderID, [CustID] = @CustID, [CarID] = @Ca"& _ + "rID WHERE (([OrderID] = @Original_OrderID) AND ([CustID] = @Original_CustID) AND"& _ + " ([CarID] = @Original_CarID));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT OrderID, CustID, CarID FROM Orders WHERE "& _ + "(OrderID = @OrderID)" + Me._adapter.UpdateCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@OrderID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "OrderID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_OrderID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "OrderID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CustID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CustID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New Global.System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.My.MySettings.Default.AutoLotConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New Global.System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New Global.System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT OrderID, CustID, CarID FROM dbo.Orders" + Me._commandCollection(0).CommandType = Global.System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As AutoLotDataSet.OrdersDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As AutoLotDataSet.OrdersDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As AutoLotDataSet.OrdersDataTable = New AutoLotDataSet.OrdersDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As AutoLotDataSet.OrdersDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As AutoLotDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Orders") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(New Global.System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_OrderID As Integer, ByVal Original_CustID As Integer, ByVal Original_CarID As Integer) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_OrderID,Integer) + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_CustID,Integer) + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_CarID,Integer) + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal OrderID As Integer, ByVal CustID As Integer, ByVal CarID As Integer) As Integer + Me.Adapter.InsertCommand.Parameters(0).Value = CType(OrderID,Integer) + Me.Adapter.InsertCommand.Parameters(1).Value = CType(CustID,Integer) + Me.Adapter.InsertCommand.Parameters(2).Value = CType(CarID,Integer) + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal OrderID As Integer, ByVal CustID As Integer, ByVal CarID As Integer, ByVal Original_OrderID As Integer, ByVal Original_CustID As Integer, ByVal Original_CarID As Integer) As Integer + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(OrderID,Integer) + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(CustID,Integer) + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(CarID,Integer) + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(Original_OrderID,Integer) + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(Original_CustID,Integer) + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_CarID,Integer) + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal CustID As Integer, ByVal CarID As Integer, ByVal Original_OrderID As Integer, ByVal Original_CustID As Integer, ByVal Original_CarID As Integer) As Integer + Return Me.Update(Original_OrderID, CustID, CarID, Original_OrderID, Original_CustID, Original_CarID) + End Function + End Class + + ''' + '''Represents the connection and commands used to retrieve and save data. + ''' + _ + Partial Public Class QueriesTableAdapter + Inherits Global.System.ComponentModel.Component + + Private _commandCollection() As Global.System.Data.IDbCommand + + _ + Protected ReadOnly Property CommandCollection() As Global.System.Data.IDbCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New Global.System.Data.IDbCommand(0) {} + Me._commandCollection(0) = New Global.System.Data.SqlClient.SqlCommand + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).Connection = New Global.System.Data.SqlClient.SqlConnection(Global.My.MySettings.Default.AutoLotConnectionString) + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).CommandText = "dbo.GetPetName" + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).CommandType = Global.System.Data.CommandType.StoredProcedure + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@RETURN_VALUE", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.ReturnValue, 10, 0, Nothing, Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@carID", Global.System.Data.SqlDbType.Int, 4, Global.System.Data.ParameterDirection.Input, 10, 0, Nothing, Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + CType(Me._commandCollection(0),Global.System.Data.SqlClient.SqlCommand).Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@petName", Global.System.Data.SqlDbType.[Char], 10, Global.System.Data.ParameterDirection.InputOutput, 0, 0, Nothing, Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + End Sub + + _ + Public Overloads Overridable Function GetPetName(ByVal carID As Global.System.Nullable(Of Integer), ByRef petName As String) As Integer + Dim command As Global.System.Data.SqlClient.SqlCommand = CType(Me.CommandCollection(0),Global.System.Data.SqlClient.SqlCommand) + If (carID.HasValue = true) Then + command.Parameters(1).Value = CType(carID.Value,Integer) + Else + command.Parameters(1).Value = Global.System.DBNull.Value + End If + If (petName Is Nothing) Then + command.Parameters(2).Value = Global.System.DBNull.Value + Else + command.Parameters(2).Value = CType(petName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = command.Connection.State + If ((command.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + command.Connection.Open + End If + Dim returnValue As Integer + Try + returnValue = command.ExecuteNonQuery + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + command.Connection.Close + End If + End Try + If ((command.Parameters(2).Value Is Nothing) _ + OrElse (command.Parameters(2).Value.GetType Is GetType(Global.System.DBNull))) Then + petName = Nothing + Else + petName = CType(command.Parameters(2).Value,String) + End If + Return returnValue + End Function + End Class + + ''' + '''TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios + ''' + _ + Partial Public Class TableAdapterManager + Inherits Global.System.ComponentModel.Component + + Private _updateOrder As UpdateOrderOption + + Private _customersTableAdapter As CustomersTableAdapter + + Private _inventoryTableAdapter As InventoryTableAdapter + + Private _ordersTableAdapter As OrdersTableAdapter + + Private _backupDataSetBeforeUpdate As Boolean + + Private _connection As Global.System.Data.IDbConnection + + _ + Public Property UpdateOrder() As UpdateOrderOption + Get + Return Me._updateOrder + End Get + Set + Me._updateOrder = value + End Set + End Property + + _ + Public Property CustomersTableAdapter() As CustomersTableAdapter + Get + Return Me._customersTableAdapter + End Get + Set + If ((Not (Me._customersTableAdapter) Is Nothing) _ + AndAlso (Me.TableAdapterInstanceCount = 1)) Then + Me._customersTableAdapter = value + Return + End If + If ((Not (value) Is Nothing) _ + AndAlso (Me.MatchTableAdapterConnection(value.Connection) = false)) Then + Throw New Global.System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s"& _ + "tring.") + End If + Me._customersTableAdapter = value + End Set + End Property + + _ + Public Property InventoryTableAdapter() As InventoryTableAdapter + Get + Return Me._inventoryTableAdapter + End Get + Set + If ((Not (Me._inventoryTableAdapter) Is Nothing) _ + AndAlso (Me.TableAdapterInstanceCount = 1)) Then + Me._inventoryTableAdapter = value + Return + End If + If ((Not (value) Is Nothing) _ + AndAlso (Me.MatchTableAdapterConnection(value.Connection) = false)) Then + Throw New Global.System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s"& _ + "tring.") + End If + Me._inventoryTableAdapter = value + End Set + End Property + + _ + Public Property OrdersTableAdapter() As OrdersTableAdapter + Get + Return Me._ordersTableAdapter + End Get + Set + If ((Not (Me._ordersTableAdapter) Is Nothing) _ + AndAlso (Me.TableAdapterInstanceCount = 1)) Then + Me._ordersTableAdapter = value + Return + End If + If ((Not (value) Is Nothing) _ + AndAlso (Me.MatchTableAdapterConnection(value.Connection) = false)) Then + Throw New Global.System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s"& _ + "tring.") + End If + Me._ordersTableAdapter = value + End Set + End Property + + _ + Public Property BackupDataSetBeforeUpdate() As Boolean + Get + Return Me._backupDataSetBeforeUpdate + End Get + Set + Me._backupDataSetBeforeUpdate = value + End Set + End Property + + _ + Public Property Connection() As Global.System.Data.IDbConnection + Get + If (Not (Me._connection) Is Nothing) Then + Return Me._connection + End If + If ((Not (Me._customersTableAdapter) Is Nothing) _ + AndAlso (Not (Me._customersTableAdapter.Connection) Is Nothing)) Then + Return Me._customersTableAdapter.Connection + End If + If ((Not (Me._inventoryTableAdapter) Is Nothing) _ + AndAlso (Not (Me._inventoryTableAdapter.Connection) Is Nothing)) Then + Return Me._inventoryTableAdapter.Connection + End If + If ((Not (Me._ordersTableAdapter) Is Nothing) _ + AndAlso (Not (Me._ordersTableAdapter.Connection) Is Nothing)) Then + Return Me._ordersTableAdapter.Connection + End If + Return Nothing + End Get + Set + Me._connection = value + End Set + End Property + + _ + Public ReadOnly Property TableAdapterInstanceCount() As Integer + Get + Dim count As Integer = 0 + If (Not (Me._customersTableAdapter) Is Nothing) Then + count = (count + 1) + End If + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + count = (count + 1) + End If + If (Not (Me._ordersTableAdapter) Is Nothing) Then + count = (count + 1) + End If + Return count + End Get + End Property + + ''' + '''Update rows in top-down order. + ''' + _ + Private Function UpdateUpdatedRows(ByVal dataSet As AutoLotDataSet, ByVal allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow), ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim updatedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.ModifiedCurrent) + updatedRows = Me.GetRealUpdatedRows(updatedRows, allAddedRows) + If ((Not (updatedRows) Is Nothing) _ + AndAlso (0 < updatedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(updatedRows)) + allChangedRows.AddRange(updatedRows) + End If + End If + If (Not (Me._customersTableAdapter) Is Nothing) Then + Dim updatedRows() As Global.System.Data.DataRow = dataSet.Customers.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.ModifiedCurrent) + updatedRows = Me.GetRealUpdatedRows(updatedRows, allAddedRows) + If ((Not (updatedRows) Is Nothing) _ + AndAlso (0 < updatedRows.Length)) Then + result = (result + Me._customersTableAdapter.Update(updatedRows)) + allChangedRows.AddRange(updatedRows) + End If + End If + If (Not (Me._ordersTableAdapter) Is Nothing) Then + Dim updatedRows() As Global.System.Data.DataRow = dataSet.Orders.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.ModifiedCurrent) + updatedRows = Me.GetRealUpdatedRows(updatedRows, allAddedRows) + If ((Not (updatedRows) Is Nothing) _ + AndAlso (0 < updatedRows.Length)) Then + result = (result + Me._ordersTableAdapter.Update(updatedRows)) + allChangedRows.AddRange(updatedRows) + End If + End If + Return result + End Function + + ''' + '''Insert rows in top-down order. + ''' + _ + Private Function UpdateInsertedRows(ByVal dataSet As AutoLotDataSet, ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim addedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Added) + If ((Not (addedRows) Is Nothing) _ + AndAlso (0 < addedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(addedRows)) + allAddedRows.AddRange(addedRows) + End If + End If + If (Not (Me._customersTableAdapter) Is Nothing) Then + Dim addedRows() As Global.System.Data.DataRow = dataSet.Customers.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Added) + If ((Not (addedRows) Is Nothing) _ + AndAlso (0 < addedRows.Length)) Then + result = (result + Me._customersTableAdapter.Update(addedRows)) + allAddedRows.AddRange(addedRows) + End If + End If + If (Not (Me._ordersTableAdapter) Is Nothing) Then + Dim addedRows() As Global.System.Data.DataRow = dataSet.Orders.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Added) + If ((Not (addedRows) Is Nothing) _ + AndAlso (0 < addedRows.Length)) Then + result = (result + Me._ordersTableAdapter.Update(addedRows)) + allAddedRows.AddRange(addedRows) + End If + End If + Return result + End Function + + ''' + '''Delete rows in bottom-up order. + ''' + _ + Private Function UpdateDeletedRows(ByVal dataSet As AutoLotDataSet, ByVal allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._ordersTableAdapter) Is Nothing) Then + Dim deletedRows() As Global.System.Data.DataRow = dataSet.Orders.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Deleted) + If ((Not (deletedRows) Is Nothing) _ + AndAlso (0 < deletedRows.Length)) Then + result = (result + Me._ordersTableAdapter.Update(deletedRows)) + allChangedRows.AddRange(deletedRows) + End If + End If + If (Not (Me._customersTableAdapter) Is Nothing) Then + Dim deletedRows() As Global.System.Data.DataRow = dataSet.Customers.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Deleted) + If ((Not (deletedRows) Is Nothing) _ + AndAlso (0 < deletedRows.Length)) Then + result = (result + Me._customersTableAdapter.Update(deletedRows)) + allChangedRows.AddRange(deletedRows) + End If + End If + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim deletedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Deleted) + If ((Not (deletedRows) Is Nothing) _ + AndAlso (0 < deletedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(deletedRows)) + allChangedRows.AddRange(deletedRows) + End If + End If + Return result + End Function + + ''' + '''Remove inserted rows that become updated rows after calling TableAdapter.Update(inserted rows) first + ''' + _ + Private Function GetRealUpdatedRows(ByVal updatedRows() As Global.System.Data.DataRow, ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Global.System.Data.DataRow() + If ((updatedRows Is Nothing) _ + OrElse (updatedRows.Length < 1)) Then + Return updatedRows + End If + If ((allAddedRows Is Nothing) _ + OrElse (allAddedRows.Count < 1)) Then + Return updatedRows + End If + Dim realUpdatedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim i As Integer = 0 + Do While (i < updatedRows.Length) + Dim row As Global.System.Data.DataRow = updatedRows(i) + If (allAddedRows.Contains(row) = false) Then + realUpdatedRows.Add(row) + End If + i = (i + 1) + Loop + Return realUpdatedRows.ToArray + End Function + + ''' + '''Update all changes to the dataset. + ''' + _ + Public Overridable Function UpdateAll(ByVal dataSet As AutoLotDataSet) As Integer + If (dataSet Is Nothing) Then + Throw New Global.System.ArgumentNullException("dataSet") + End If + If (dataSet.HasChanges = false) Then + Return 0 + End If + Dim workConnection As Global.System.Data.IDbConnection = Me.Connection + If (workConnection Is Nothing) Then + Throw New Global.System.ApplicationException("TableAdapterManager contains no connection information. Set each TableAdapterMana"& _ + "ger TableAdapter property to a valid TableAdapter instance.") + End If + Dim workConnOpened As Boolean = false + If ((workConnection.State And Global.System.Data.ConnectionState.Closed) _ + = Global.System.Data.ConnectionState.Closed) Then + workConnection.Open + workConnOpened = true + End If + Dim workTransaction As Global.System.Data.IDbTransaction = workConnection.BeginTransaction + If (workTransaction Is Nothing) Then + Throw New Global.System.ApplicationException("The transaction cannot begin. The current data connection does not support transa"& _ + "ctions or the current state is not allowing the transaction to begin.") + End If + Dim allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim adaptersWithAcceptChangesDuringUpdate As Global.System.Collections.Generic.List(Of Global.System.Data.Common.DataAdapter) = New Global.System.Collections.Generic.List(Of Global.System.Data.Common.DataAdapter) + Dim revertConnections As Global.System.Collections.Generic.Dictionary(Of Object, Global.System.Data.IDbConnection) = New Global.System.Collections.Generic.Dictionary(Of Object, Global.System.Data.IDbConnection) + Dim result As Integer = 0 + Dim backupDataSet As Global.System.Data.DataSet = Nothing + If Me.BackupDataSetBeforeUpdate Then + backupDataSet = New Global.System.Data.DataSet + backupDataSet.Merge(dataSet) + End If + Try + '---- Prepare for update ----------- + ' + If (Not (Me._customersTableAdapter) Is Nothing) Then + revertConnections.Add(Me._customersTableAdapter, Me._customersTableAdapter.Connection) + Me._customersTableAdapter.Connection = CType(workConnection,Global.System.Data.SqlClient.SqlConnection) + Me._customersTableAdapter.Transaction = CType(workTransaction,Global.System.Data.SqlClient.SqlTransaction) + If Me._customersTableAdapter.Adapter.AcceptChangesDuringUpdate Then + Me._customersTableAdapter.Adapter.AcceptChangesDuringUpdate = false + adaptersWithAcceptChangesDuringUpdate.Add(Me._customersTableAdapter.Adapter) + End If + End If + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + revertConnections.Add(Me._inventoryTableAdapter, Me._inventoryTableAdapter.Connection) + Me._inventoryTableAdapter.Connection = CType(workConnection,Global.System.Data.SqlClient.SqlConnection) + Me._inventoryTableAdapter.Transaction = CType(workTransaction,Global.System.Data.SqlClient.SqlTransaction) + If Me._inventoryTableAdapter.Adapter.AcceptChangesDuringUpdate Then + Me._inventoryTableAdapter.Adapter.AcceptChangesDuringUpdate = false + adaptersWithAcceptChangesDuringUpdate.Add(Me._inventoryTableAdapter.Adapter) + End If + End If + If (Not (Me._ordersTableAdapter) Is Nothing) Then + revertConnections.Add(Me._ordersTableAdapter, Me._ordersTableAdapter.Connection) + Me._ordersTableAdapter.Connection = CType(workConnection,Global.System.Data.SqlClient.SqlConnection) + Me._ordersTableAdapter.Transaction = CType(workTransaction,Global.System.Data.SqlClient.SqlTransaction) + If Me._ordersTableAdapter.Adapter.AcceptChangesDuringUpdate Then + Me._ordersTableAdapter.Adapter.AcceptChangesDuringUpdate = false + adaptersWithAcceptChangesDuringUpdate.Add(Me._ordersTableAdapter.Adapter) + End If + End If + ' + '---- Perform updates ----------- + ' + If (Me.UpdateOrder = UpdateOrderOption.UpdateInsertDelete) Then + result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)) + result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows)) + Else + result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows)) + result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)) + End If + result = (result + Me.UpdateDeletedRows(dataSet, allChangedRows)) + ' + '---- Commit updates ----------- + ' + workTransaction.Commit + If (0 < allAddedRows.Count) Then + Dim rows((allAddedRows.Count) - 1) As Global.System.Data.DataRow + allAddedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + i = (i + 1) + Loop + End If + If (0 < allChangedRows.Count) Then + Dim rows((allChangedRows.Count) - 1) As Global.System.Data.DataRow + allChangedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + i = (i + 1) + Loop + End If + Catch ex As Global.System.Exception + workTransaction.Rollback + '---- Restore the dataset ----------- + If Me.BackupDataSetBeforeUpdate Then + Global.System.Diagnostics.Debug.Assert((Not (backupDataSet) Is Nothing)) + dataSet.Clear + dataSet.Merge(backupDataSet) + Else + If (0 < allAddedRows.Count) Then + Dim rows((allAddedRows.Count) - 1) As Global.System.Data.DataRow + allAddedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + row.SetAdded + i = (i + 1) + Loop + End If + End If + Throw ex + Finally + If workConnOpened Then + workConnection.Close + End If + If (Not (Me._customersTableAdapter) Is Nothing) Then + Me._customersTableAdapter.Connection = CType(revertConnections(Me._customersTableAdapter),Global.System.Data.SqlClient.SqlConnection) + Me._customersTableAdapter.Transaction = Nothing + End If + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Me._inventoryTableAdapter.Connection = CType(revertConnections(Me._inventoryTableAdapter),Global.System.Data.SqlClient.SqlConnection) + Me._inventoryTableAdapter.Transaction = Nothing + End If + If (Not (Me._ordersTableAdapter) Is Nothing) Then + Me._ordersTableAdapter.Connection = CType(revertConnections(Me._ordersTableAdapter),Global.System.Data.SqlClient.SqlConnection) + Me._ordersTableAdapter.Transaction = Nothing + End If + If (0 < adaptersWithAcceptChangesDuringUpdate.Count) Then + Dim adapters((adaptersWithAcceptChangesDuringUpdate.Count) - 1) As Global.System.Data.Common.DataAdapter + adaptersWithAcceptChangesDuringUpdate.CopyTo(adapters) + Dim i As Integer = 0 + Do While (i < adapters.Length) + Dim adapter As Global.System.Data.Common.DataAdapter = adapters(i) + adapter.AcceptChangesDuringUpdate = true + i = (i + 1) + Loop + End If + End Try + Return result + End Function + + _ + Protected Overridable Sub SortSelfReferenceRows(ByVal rows() As Global.System.Data.DataRow, ByVal relation As Global.System.Data.DataRelation, ByVal childFirst As Boolean) + Global.System.Array.Sort(Of Global.System.Data.DataRow)(rows, New SelfReferenceComparer(relation, childFirst)) + End Sub + + _ + Protected Overridable Function MatchTableAdapterConnection(ByVal inputConnection As Global.System.Data.IDbConnection) As Boolean + If (Not (Me._connection) Is Nothing) Then + Return true + End If + If ((Me.Connection Is Nothing) _ + OrElse (inputConnection Is Nothing)) Then + Return true + End If + If String.Equals(Me.Connection.ConnectionString, inputConnection.ConnectionString, Global.System.StringComparison.Ordinal) Then + Return true + End If + Return false + End Function + + ''' + '''Update Order Option + ''' + _ + Public Enum UpdateOrderOption + + InsertUpdateDelete = 0 + + UpdateInsertDelete = 1 + End Enum + + ''' + '''Used to sort self-referenced table's rows + ''' + _ + Private Class SelfReferenceComparer + Inherits Object + Implements Global.System.Collections.Generic.IComparer(Of Global.System.Data.DataRow) + + Private _relation As Global.System.Data.DataRelation + + Private _childFirst As Integer + + _ + Friend Sub New(ByVal relation As Global.System.Data.DataRelation, ByVal childFirst As Boolean) + MyBase.New + Me._relation = relation + If childFirst Then + Me._childFirst = -1 + Else + Me._childFirst = 1 + End If + End Sub + + _ + Private Function IsChildAndParent(ByVal child As Global.System.Data.DataRow, ByVal parent As Global.System.Data.DataRow) As Boolean + Global.System.Diagnostics.Debug.Assert((Not (child) Is Nothing)) + Global.System.Diagnostics.Debug.Assert((Not (parent) Is Nothing)) + Dim newParent As Global.System.Data.DataRow = child.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.[Default]) + + Do While ((Not (newParent) Is Nothing) _ + AndAlso ((Object.ReferenceEquals(newParent, child) = false) _ + AndAlso (Object.ReferenceEquals(newParent, parent) = false))) + newParent = newParent.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.[Default]) + + Loop + If (newParent Is Nothing) Then + newParent = child.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.Original) + Do While ((Not (newParent) Is Nothing) _ + AndAlso ((Object.ReferenceEquals(newParent, child) = false) _ + AndAlso (Object.ReferenceEquals(newParent, parent) = false))) + newParent = newParent.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.Original) + + Loop + End If + If Object.ReferenceEquals(newParent, parent) Then + Return true + End If + Return false + End Function + + _ + Public Function Compare(ByVal row1 As Global.System.Data.DataRow, ByVal row2 As Global.System.Data.DataRow) As Integer Implements Global.System.Collections.Generic.IComparer(Of Global.System.Data.DataRow).Compare + If Object.ReferenceEquals(row1, row2) Then + Return 0 + End If + If (row1 Is Nothing) Then + Return -1 + End If + If (row2 Is Nothing) Then + Return 1 + End If + + 'Is row1 the child or grandchild of row2 + If Me.IsChildAndParent(row1, row2) Then + Return Me._childFirst + End If + + 'Is row2 the child or grandchild of row1 + If Me.IsChildAndParent(row2, row1) Then + Return (-1 * Me._childFirst) + End If + Return 0 + End Function + End Class + End Class +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsc b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsc new file mode 100644 index 0000000..05b0199 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsc @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsd b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsd new file mode 100644 index 0000000..9ccec95 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xsd @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + DELETE FROM [dbo].[Customers] WHERE (([CustID] = @Original_CustID) AND ([FirstName] = @Original_FirstName) AND ([LastName] = @Original_LastName)) + + + + + + + + + + INSERT INTO [dbo].[Customers] ([CustID], [FirstName], [LastName]) VALUES (@CustID, @FirstName, @LastName); +SELECT CustID, FirstName, LastName FROM Customers WHERE (CustID = @CustID) + + + + + + + + + + SELECT CustID, FirstName, LastName FROM dbo.Customers + + + + + + UPDATE [dbo].[Customers] SET [CustID] = @CustID, [FirstName] = @FirstName, [LastName] = @LastName WHERE (([CustID] = @Original_CustID) AND ([FirstName] = @Original_FirstName) AND ([LastName] = @Original_LastName)); +SELECT CustID, FirstName, LastName FROM Customers WHERE (CustID = @CustID) + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Inventory] WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS NULL) OR ([PetName] = @Original_PetName))) + + + + + + + + + + + + INSERT INTO [dbo].[Inventory] ([CarID], [Make], [Color], [PetName]) VALUES (@CarID, @Make, @Color, @PetName); +SELECT CarID, Make, Color, PetName FROM Inventory WHERE (CarID = @CarID) + + + + + + + + + + + SELECT CarID, Make, Color, PetName FROM dbo.Inventory + + + + + + UPDATE [dbo].[Inventory] SET [CarID] = @CarID, [Make] = @Make, [Color] = @Color, [PetName] = @PetName WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS NULL) OR ([PetName] = @Original_PetName))); +SELECT CarID, Make, Color, PetName FROM Inventory WHERE (CarID = @CarID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DELETE FROM [dbo].[Orders] WHERE (([OrderID] = @Original_OrderID) AND ([CustID] = @Original_CustID) AND ([CarID] = @Original_CarID)) + + + + + + + + + + INSERT INTO [dbo].[Orders] ([OrderID], [CustID], [CarID]) VALUES (@OrderID, @CustID, @CarID); +SELECT OrderID, CustID, CarID FROM Orders WHERE (OrderID = @OrderID) + + + + + + + + + + SELECT OrderID, CustID, CarID FROM dbo.Orders + + + + + + UPDATE [dbo].[Orders] SET [OrderID] = @OrderID, [CustID] = @CustID, [CarID] = @CarID WHERE (([OrderID] = @Original_OrderID) AND ([CustID] = @Original_CustID) AND ([CarID] = @Original_CarID)); +SELECT OrderID, CustID, CarID FROM Orders WHERE (OrderID = @OrderID) + + + + + + + + + + + + + + + + + + + + + + + + + dbo.GetPetName + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xss b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xss new file mode 100644 index 0000000..43466d8 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/AutoLotDataSet.xss @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + 431 + 192 + + + 253 + 192 + + + + + + + 354 + 381 + + + 236 + 381 + + + 236 + 204 + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDAL.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDAL.vb new file mode 100644 index 0000000..9e5ebbe --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDAL.vb @@ -0,0 +1,203 @@ +' We will make use of the SQL server +' provider, however it would also be +' permissible to make use of the ADO.NET +' factory pattern for greater flexibility. +Imports System.Data.SqlClient + +Namespace AutoLotConnectedLayer + Public Class InventoryDAL + +#Region "Connection and Disconnection details." + ' This member will be used by all methods. + Private sqlCn As New SqlConnection() + + Public Sub OpenConnection(ByVal connectionString As String) + sqlCn.ConnectionString = connectionString + sqlCn.Open() + End Sub + Public Sub CloseConnection() + sqlCn.Close() + End Sub +#End Region + +#Region "Insert logic (both versions)" + 'Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, _ + ' ByVal make As String, ByVal petName As String) + ' ' Format and execute SQL statement. + ' Dim sql As String = String.Format("Insert Into Inventory" & _ + ' "(CarID, Make, Color, PetName) Values" & _ + ' "('{0}', '{1}', '{2}', '{3}')", id, make, color, petName) + + ' ' Execute using our connection. + ' Using cmd As New SqlCommand(sql, Me.sqlCn) + ' cmd.ExecuteNonQuery() + ' End Using + 'End Sub + + Public Sub InsertAuto(ByVal id As Integer, ByVal color As String, ByVal make As String, ByVal petName As String) + ' Note the 'placeholders' in the SQL query. + Dim sql As String = String.Format("Insert Into Inventory" + "(CarID, Make, Color, PetName) Values" + "(@CarID, @Make, @Color, @PetName)") + + ' This command will have internal parameters. + Using cmd As New SqlCommand(sql, Me.sqlCn) + ' Fill params collection. + Dim param As New SqlParameter() + param.ParameterName = "@CarID" + param.Value = id + param.SqlDbType = SqlDbType.Int + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Make" + param.Value = make + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@Color" + param.Value = color + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + param = New SqlParameter() + param.ParameterName = "@PetName" + param.Value = petName + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + cmd.Parameters.Add(param) + + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Delete logic" + Public Sub DeleteCar(ByVal id As Integer) + ' Get ID of car to delete, then do so. + Dim sql As String = String.Format("Delete from Inventory where CarID = '{0}'", id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + Try + cmd.ExecuteNonQuery() + Catch ex As SqlException + Dim er As New Exception("Sorry! That car is on order!", ex) + Throw er + End Try + End Using + End Sub +#End Region + +#Region "Update logic" + Public Sub UpdateCarPetName(ByVal id As Integer, ByVal newPetName As String) + ' Get ID of car to modify and new pet name. + Dim sql As String = String.Format("Update Inventory Set PetName = '{0}' Where CarID = '{1}'", newPetName, id) + Using cmd As New SqlCommand(sql, Me.sqlCn) + cmd.ExecuteNonQuery() + End Using + End Sub +#End Region + +#Region "Select logic" + Public Function GetAllInventory() As DataTable + ' This will hold the records. + Dim inv As New DataTable() + + ' Prep command object. + Dim sql As String = "Select * From Inventory" + Using cmd As New SqlCommand(sql, Me.sqlCn) + Dim dr As SqlDataReader = cmd.ExecuteReader() + ' Fill the DataTable with data from the reader and clean up. + inv.Load(dr) + dr.Close() + End Using + Return inv + End Function +#End Region + +#Region "Trigger stored proc logic" + Public Function LookUpPetName(ByVal carID As Integer) As String + Dim carPetName As String = String.Empty + + ' Establish name of stored proc. + Using cmd As New SqlCommand("GetPetName", Me.sqlCn) + cmd.CommandType = CommandType.StoredProcedure + + ' Input param. + Dim param As New SqlParameter() + param.ParameterName = "@carID" + param.SqlDbType = SqlDbType.Int + param.Value = carID + param.Direction = ParameterDirection.Input + cmd.Parameters.Add(param) + + ' Output param. + param = New SqlParameter() + param.ParameterName = "@petName" + param.SqlDbType = SqlDbType.[Char] + param.Size = 10 + param.Direction = ParameterDirection.Output + cmd.Parameters.Add(param) + + ' Execute the stored proc. + cmd.ExecuteNonQuery() + + ' Return output param. + carPetName = DirectCast(cmd.Parameters("@petName").Value, String).Trim() + End Using + Return carPetName + End Function +#End Region + +#Region "Tx Method" + ' A new member of the InventoryDAL class. + Public Sub ProcessCreditRisk(ByVal throwEx As Boolean, ByVal custID As Integer) + ' First, look up current name based on customer ID. + Dim fName As String = String.Empty + Dim lName As String = String.Empty + + Dim cmdSelect As New SqlCommand(String.Format("Select * from Customers where CustID = {0}", custID), sqlCn) + Using dr As SqlDataReader = cmdSelect.ExecuteReader() + While dr.Read() + fName = DirectCast(dr("FirstName"), String) + lName = DirectCast(dr("LastName"), String) + End While + End Using + + ' Create command objects which represent each step of the operation. + Dim cmdRemove As New SqlCommand(String.Format("Delete from Customers where CustID = {0}", custID), sqlCn) + + Dim cmdInsert As New SqlCommand(String.Format("Insert Into CreditRisks" & _ + "(CustID, FirstName, LastName) Values" & _ + "({0}, '{1}', '{2}')", custID, fName, lName), sqlCn) + + ' We will get this from the Connection object. + Dim tx As SqlTransaction = Nothing + Try + tx = sqlCn.BeginTransaction() + + ' Enlist the commands into this transaction. + cmdInsert.Transaction = tx + cmdRemove.Transaction = tx + + ' Execute the commands. + cmdInsert.ExecuteNonQuery() + cmdRemove.ExecuteNonQuery() + + ' Simulate error. + If throwEx Then + Throw New ApplicationException("Sorry! Database error! Tx failed...") + End If + + ' Commit it! + tx.Commit() + Catch ex As Exception + Console.WriteLine(ex.Message) + ' Any error will rollback transaction. + tx.Rollback() + End Try + End Sub +#End Region + + End Class +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDALDisconnected.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDALDisconnected.vb new file mode 100644 index 0000000..6b673ad --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/InventoryDALDisconnected.vb @@ -0,0 +1,35 @@ +Imports System.Data.SqlClient + +Namespace AutoLotDisconnectedLayer + Public Class InventoryDALDisLayer + ' Field data. + Private cnString As String = String.Empty + Private dAdapt As SqlDataAdapter = Nothing + + Public Sub New(ByVal connectionString As String) + cnString = connectionString + + ' Configure the SqlDataAdapter. + ConfigureAdapter(dAdapt) + End Sub + + Private Sub ConfigureAdapter(ByRef dAdapt As SqlDataAdapter) + ' Create the adapter and set up the SelectCommand + dAdapt = New SqlDataAdapter("Select * From Inventory", cnString) + + ' Obtain the remaining Command objects dynamically at runime + ' using the SqlCommandBuilder. + Dim builder As New SqlCommandBuilder(dAdapt) + End Sub + + Public Function GetAllInventory() As DataTable + Dim inv As New DataTable("Inventory") + dAdapt.Fill(inv) + Return inv + End Function + + Public Sub UpdateInventory(ByVal modifiedTable As DataTable) + dAdapt.Update(modifiedTable) + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.myapp b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/AssemblyInfo.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7ba989c --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5036910 --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.resx b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.Designer.vb b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.Designer.vb new file mode 100644 index 0000000..acafd9e --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.Designer.vb @@ -0,0 +1,84 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property AutoLotConnectionString() As String + Get + Return CType(Me("AutoLotConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.My.MySettings + Get + Return Global.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.settings b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.settings new file mode 100644 index 0000000..03c3afc --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/Wizard Generated DB Objects.cd b/Code/Chapter 23/AutoLotDAL (Part 3)/Wizard Generated DB Objects.cd new file mode 100644 index 0000000..a0c25be --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/Wizard Generated DB Objects.cd @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BAEAAAAAAwAAgAJABAACQAAAIAgCQDgAAAAiAgEAFBA= + + + + + + AAAAAAAAASAABAAAAAAAABAAASABAIAgAAAAAAAAAAA= + InventoryDAL.vb + + + + + + AAAAAAAAAAAABAAAEAAAAAAAAAAAAAAAAEACACAAAAA= + InventoryDALDisconnected.vb + + + + + + AAAAAAAAAAAAAAAAAAAAIAAAAAABAAAgAAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAAAAAABEAAAAQAAAAAAAAAAAAAAAIA= + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAA= + + + + \ No newline at end of file diff --git a/Code/Chapter 23/AutoLotDAL (Part 3)/app.config b/Code/Chapter 23/AutoLotDAL (Part 3)/app.config new file mode 100644 index 0000000..0e2c3dc --- /dev/null +++ b/Code/Chapter 23/AutoLotDAL (Part 3)/app.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.sln b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.sln new file mode 100644 index 0000000..3951249 --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FillDataSetWithSqlDataAdapter", "FillDataSetWithSqlDataAdapter.vbproj", "{31DC28F5-D9A7-4F1C-A736-E15EB6A2894A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {31DC28F5-D9A7-4F1C-A736-E15EB6A2894A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31DC28F5-D9A7-4F1C-A736-E15EB6A2894A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31DC28F5-D9A7-4F1C-A736-E15EB6A2894A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31DC28F5-D9A7-4F1C-A736-E15EB6A2894A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.suo b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/FillDataSetWithSqlDataAdapter.suo new file mode 100644 index 0000000000000000000000000000000000000000..654dfb285ec5b87aa0cd95170bf668fe3276384e GIT binary patch literal 16896 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 x8-lo#wkUyS`|tc8%2rAL|I6Jd7 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {31DC28F5-D9A7-4F1C-A736-E15EB6A2894A} + Exe + FillDataSetWithSqlDataAdapter.Program + FillDataSetWithSqlDataAdapter + FillDataSetWithSqlDataAdapter + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + FillDataSetWithSqlDataAdapter.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FillDataSetWithSqlDataAdapter.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.Designer.vb b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.myapp b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/AssemblyInfo.vb b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..08c28bd --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.Designer.vb b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.Designer.vb new file mode 100644 index 0000000..40bda28 --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FillDataSetWithSqlDataAdapter.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.resx b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.Designer.vb b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5c1eabb --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FillDataSetWithSqlDataAdapter.My.MySettings + Get + Return Global.FillDataSetWithSqlDataAdapter.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.settings b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/FillDataSetWithSqlDataAdapter/Program.vb b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/Program.vb new file mode 100644 index 0000000..9b0947f --- /dev/null +++ b/Code/Chapter 23/FillDataSetWithSqlDataAdapter/Program.vb @@ -0,0 +1,68 @@ +Imports System.Data.SqlClient +Imports System.Data.Common + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Data Adapters *****" & vbLf) + + ' Hard-coded connection string (modify if needed). + Dim cnStr As String = "Integrated Security = SSPI;Initial Catalog=AutoLot;" & "Data Source=(local)\SQLEXPRESS" + + ' Caller creates the DataSet object. + Dim ds As New DataSet("AutoLot") + + ' Inform adapter of the Select command text and connection. + Dim dAdapt As New SqlDataAdapter("Select * From Inventory", cnStr) + + ' Now map DB column names to user-friendly names. + Dim custMap As DataTableMapping = _ + dAdapt.TableMappings.Add("Inventory", "Current Inventory") + custMap.ColumnMappings.Add("CarID", "Car ID") + custMap.ColumnMappings.Add("PetName", "Name") + + ' Fill our DataSet with a new table, named Inventory. + dAdapt.Fill(ds, "Inventory") + + ' Display contents of DataSet. + PrintDataSet(ds) + Console.ReadLine() + End Sub + +#Region "Print out DataSet" + Sub PrintDataSet(ByVal ds As DataSet) + ' Print out any name and extended properties. + Console.WriteLine("DataSet is named: {0}", ds.DataSetName) + For Each de As System.Collections.DictionaryEntry In ds.ExtendedProperties + Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value) + Next + Console.WriteLine() + + For Each dt As DataTable In ds.Tables + Console.WriteLine("=> {0} Table:", dt.TableName) + For curCol As Integer = 0 To dt.Columns.Count - 1 + + ' Print out the column names. + Console.Write(dt.Columns(curCol).ColumnName.Trim() & vbTab) + Next + Console.WriteLine("" & Chr(10) & "----------------------------------") + PrintTable(dt) + Next + End Sub + + Sub PrintTable(ByVal dt As DataTable) + ' Get the DataTableReader type. + Dim dtReader As DataTableReader = dt.CreateDataReader() + + ' The DataTableReader works just like the DataReader. + While dtReader.Read() + For i As Integer = 0 To dtReader.FieldCount - 1 + Console.Write("{0}" & vbTab, dtReader.GetValue(i).ToString().Trim()) + Next + Console.WriteLine() + End While + dtReader.Close() + End Sub +#End Region + +End Module diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.Designer.vb new file mode 100644 index 0000000..6f73694 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.Designer.vb @@ -0,0 +1,174 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.groupBox1 = New System.Windows.Forms.GroupBox + Me.btnGetOrderInfo = New System.Windows.Forms.Button + Me.label4 = New System.Windows.Forms.Label + Me.txtCustID = New System.Windows.Forms.TextBox + Me.label3 = New System.Windows.Forms.Label + Me.btnUpdateDatabase = New System.Windows.Forms.Button + Me.dataGridViewOrders = New System.Windows.Forms.DataGridView + Me.label2 = New System.Windows.Forms.Label + Me.dataGridViewCustomers = New System.Windows.Forms.DataGridView + Me.label1 = New System.Windows.Forms.Label + Me.dataGridViewInventory = New System.Windows.Forms.DataGridView + Me.groupBox1.SuspendLayout() + CType(Me.dataGridViewOrders, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.dataGridViewCustomers, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.dataGridViewInventory, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'groupBox1 + ' + Me.groupBox1.Controls.Add(Me.btnGetOrderInfo) + Me.groupBox1.Controls.Add(Me.label4) + Me.groupBox1.Controls.Add(Me.txtCustID) + Me.groupBox1.Location = New System.Drawing.Point(26, 348) + Me.groupBox1.Name = "groupBox1" + Me.groupBox1.Size = New System.Drawing.Size(200, 100) + Me.groupBox1.TabIndex = 18 + Me.groupBox1.TabStop = False + Me.groupBox1.Text = "Lookup Customer Order" + ' + 'btnGetOrderInfo + ' + Me.btnGetOrderInfo.Location = New System.Drawing.Point(84, 71) + Me.btnGetOrderInfo.Name = "btnGetOrderInfo" + Me.btnGetOrderInfo.Size = New System.Drawing.Size(110, 23) + Me.btnGetOrderInfo.TabIndex = 7 + Me.btnGetOrderInfo.Text = "Get Order Details" + ' + 'label4 + ' + Me.label4.AutoSize = True + Me.label4.Location = New System.Drawing.Point(10, 29) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(68, 13) + Me.label4.TabIndex = 9 + Me.label4.Text = "Customer ID:" + ' + 'txtCustID + ' + Me.txtCustID.Location = New System.Drawing.Point(84, 29) + Me.txtCustID.Name = "txtCustID" + Me.txtCustID.Size = New System.Drawing.Size(110, 20) + Me.txtCustID.TabIndex = 8 + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(23, 224) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(75, 13) + Me.label3.TabIndex = 16 + Me.label3.Text = "Current Orders" + ' + 'btnUpdateDatabase + ' + Me.btnUpdateDatabase.Location = New System.Drawing.Point(418, 348) + Me.btnUpdateDatabase.Name = "btnUpdateDatabase" + Me.btnUpdateDatabase.Size = New System.Drawing.Size(114, 23) + Me.btnUpdateDatabase.TabIndex = 17 + Me.btnUpdateDatabase.Text = "Update Database" + ' + 'dataGridViewOrders + ' + Me.dataGridViewOrders.Location = New System.Drawing.Point(24, 240) + Me.dataGridViewOrders.Name = "dataGridViewOrders" + Me.dataGridViewOrders.Size = New System.Drawing.Size(509, 90) + Me.dataGridViewOrders.TabIndex = 15 + Me.dataGridViewOrders.Text = "dataGridView3" + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(23, 106) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(93, 13) + Me.label2.TabIndex = 14 + Me.label2.Text = "Current Customers" + ' + 'dataGridViewCustomers + ' + Me.dataGridViewCustomers.Location = New System.Drawing.Point(24, 122) + Me.dataGridViewCustomers.Name = "dataGridViewCustomers" + Me.dataGridViewCustomers.Size = New System.Drawing.Size(509, 90) + Me.dataGridViewCustomers.TabIndex = 13 + Me.dataGridViewCustomers.Text = "dataGridView2" + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(22, -2) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(88, 13) + Me.label1.TabIndex = 12 + Me.label1.Text = "Current Inventory" + ' + 'dataGridViewInventory + ' + Me.dataGridViewInventory.Location = New System.Drawing.Point(23, 14) + Me.dataGridViewInventory.Name = "dataGridViewInventory" + Me.dataGridViewInventory.Size = New System.Drawing.Size(509, 82) + Me.dataGridViewInventory.TabIndex = 11 + Me.dataGridViewInventory.Text = "dataGridView1" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(545, 462) + Me.Controls.Add(Me.groupBox1) + Me.Controls.Add(Me.label3) + Me.Controls.Add(Me.btnUpdateDatabase) + Me.Controls.Add(Me.dataGridViewOrders) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.dataGridViewCustomers) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.dataGridViewInventory) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "AutoLot Database Manipulator" + Me.groupBox1.ResumeLayout(False) + Me.groupBox1.PerformLayout() + CType(Me.dataGridViewOrders, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.dataGridViewCustomers, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.dataGridViewInventory, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents groupBox1 As System.Windows.Forms.GroupBox + Private WithEvents btnGetOrderInfo As System.Windows.Forms.Button + Private WithEvents label4 As System.Windows.Forms.Label + Private WithEvents txtCustID As System.Windows.Forms.TextBox + Private WithEvents label3 As System.Windows.Forms.Label + Private WithEvents btnUpdateDatabase As System.Windows.Forms.Button + Private WithEvents dataGridViewOrders As System.Windows.Forms.DataGridView + Private WithEvents label2 As System.Windows.Forms.Label + Private WithEvents dataGridViewCustomers As System.Windows.Forms.DataGridView + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents dataGridViewInventory As System.Windows.Forms.DataGridView + +End Class diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.resx b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.vb new file mode 100644 index 0000000..405abe4 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MainForm.vb @@ -0,0 +1,88 @@ +Imports System.Data.SqlClient +Imports System.Configuration + +Imports AutoLotDataSetTableAdapters +Imports AutoLotDataSet + +Public Class MainForm + ' Form wide strongly typed DataSet. + Private autoLotDS As New AutoLotDataSet() + + ' Custom data adapters (for each table). + Private invTableAdapter As InventoryTableAdapter + Private custTableAdapter As CustomersTableAdapter + Private ordersTableAdapter As OrdersTableAdapter + + +#Region "Ctor logic" + Public Sub New() + InitializeComponent() + + ' Get Adapters. + invTableAdapter = New InventoryTableAdapter() + custTableAdapter = New CustomersTableAdapter() + ordersTableAdapter = New OrdersTableAdapter() + + ' Add tables to DS. + invTableAdapter.Fill(autoLotDS.Inventory) + custTableAdapter.Fill(autoLotDS.Customers) + ordersTableAdapter.Fill(autoLotDS.Orders) + + ' Bind to grids + dataGridViewInventory.DataSource = autoLotDS.Tables("Inventory") + dataGridViewCustomers.DataSource = autoLotDS.Tables("Customers") + dataGridViewOrders.DataSource = autoLotDS.Tables("Orders") + End Sub +#End Region + +#Region "Button Click handlers" + Private Sub btnUpdateDatabase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdateDatabase.Click + Try + invTableAdapter.Update(autoLotDS.Inventory) + custTableAdapter.Update(autoLotDS.Customers) + ordersTableAdapter.Update(autoLotDS.Orders) + Catch ex As Exception + MessageBox.Show(ex.Message) + End Try + End Sub + + Private Sub btnGetOrderInfo_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnGetOrderInfo.Click + Dim strOrderInfo As String = String.Empty + Dim drsCust As DataRow() = Nothing + Dim drsOrder As DataRow() = Nothing + + ' Get the customer ID in the text box. + Dim custID As Integer = Integer.Parse(Me.txtCustID.Text) + + ' Now based on custID, get the correct row in Customers table. + drsCust = autoLotDS.Tables("Customers").Select( _ + String.Format("CustID = {0}", custID)) + strOrderInfo += String.Format("Customer {0}: {1} {2}" & Chr(10), _ + drsCust(0)("CustID").ToString(), _ + drsCust(0)("FirstName").ToString().Trim(), _ + drsCust(0)("LastName").ToString().Trim()) + + ' Navigate from customer table to order table. + drsOrder = drsCust(0).GetChildRows(autoLotDS.Relations("FK_Orders_Customers")) + + ' Get order number. + For Each r As DataRow In drsOrder + strOrderInfo += String.Format("Order Number: {0}" & Chr(10), r("OrderID")) + Next + + ' Now navigate from order table to inventory table. + Dim drsInv As DataRow() = _ + drsOrder(0).GetParentRows(autoLotDS.Relations("FK_Orders_Inventory")) + + ' Get Car info. + For Each r As DataRow In drsInv + strOrderInfo += String.Format("Make: {0}" & Chr(10), r("Make")) + strOrderInfo += String.Format("Color: {0}" & Chr(10), r("Color")) + strOrderInfo += String.Format("Pet Name: {0}" & Chr(10), r("PetName")) + Next + MessageBox.Show(strOrderInfo, "Order Details") + End Sub +#End Region + +End Class diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.sln b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.sln new file mode 100644 index 0000000..c21462c --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MultitabledDataSetApp", "MultitabledDataSetApp.vbproj", "{943DE939-E2E7-4E86-9037-87772E45AC75}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {943DE939-E2E7-4E86-9037-87772E45AC75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.suo b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..f891eeb55500b9ce5cce53a5ec47913eb6292f32 GIT binary patch literal 22528 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj new file mode 100644 index 0000000..070a57f --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj @@ -0,0 +1,127 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {943DE939-E2E7-4E86-9037-87772E45AC75} + WinExe + MultitabledDataSetApp.My.MyApplication + MultitabledDataSetApp + MultitabledDataSetApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MultitabledDataSetApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MultitabledDataSetApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\AutoLotDAL (Part 3)\bin\Debug\AutoLotDAL.dll + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj.user b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/MultitabledDataSetApp.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.Designer.vb new file mode 100644 index 0000000..1928afb --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.MultitabledDataSetApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.myapp b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/AssemblyInfo.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3e47486 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1ba789f --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MultitabledDataSetApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.resx b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8d361cc --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MultitabledDataSetApp.My.MySettings + Get + Return Global.MultitabledDataSetApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.settings b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp - Redux/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/MultitabledDataSetApp/MainForm.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp/MainForm.Designer.vb new file mode 100644 index 0000000..6f73694 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/MainForm.Designer.vb @@ -0,0 +1,174 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.groupBox1 = New System.Windows.Forms.GroupBox + Me.btnGetOrderInfo = New System.Windows.Forms.Button + Me.label4 = New System.Windows.Forms.Label + Me.txtCustID = New System.Windows.Forms.TextBox + Me.label3 = New System.Windows.Forms.Label + Me.btnUpdateDatabase = New System.Windows.Forms.Button + Me.dataGridViewOrders = New System.Windows.Forms.DataGridView + Me.label2 = New System.Windows.Forms.Label + Me.dataGridViewCustomers = New System.Windows.Forms.DataGridView + Me.label1 = New System.Windows.Forms.Label + Me.dataGridViewInventory = New System.Windows.Forms.DataGridView + Me.groupBox1.SuspendLayout() + CType(Me.dataGridViewOrders, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.dataGridViewCustomers, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.dataGridViewInventory, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'groupBox1 + ' + Me.groupBox1.Controls.Add(Me.btnGetOrderInfo) + Me.groupBox1.Controls.Add(Me.label4) + Me.groupBox1.Controls.Add(Me.txtCustID) + Me.groupBox1.Location = New System.Drawing.Point(26, 348) + Me.groupBox1.Name = "groupBox1" + Me.groupBox1.Size = New System.Drawing.Size(200, 100) + Me.groupBox1.TabIndex = 18 + Me.groupBox1.TabStop = False + Me.groupBox1.Text = "Lookup Customer Order" + ' + 'btnGetOrderInfo + ' + Me.btnGetOrderInfo.Location = New System.Drawing.Point(84, 71) + Me.btnGetOrderInfo.Name = "btnGetOrderInfo" + Me.btnGetOrderInfo.Size = New System.Drawing.Size(110, 23) + Me.btnGetOrderInfo.TabIndex = 7 + Me.btnGetOrderInfo.Text = "Get Order Details" + ' + 'label4 + ' + Me.label4.AutoSize = True + Me.label4.Location = New System.Drawing.Point(10, 29) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(68, 13) + Me.label4.TabIndex = 9 + Me.label4.Text = "Customer ID:" + ' + 'txtCustID + ' + Me.txtCustID.Location = New System.Drawing.Point(84, 29) + Me.txtCustID.Name = "txtCustID" + Me.txtCustID.Size = New System.Drawing.Size(110, 20) + Me.txtCustID.TabIndex = 8 + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(23, 224) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(75, 13) + Me.label3.TabIndex = 16 + Me.label3.Text = "Current Orders" + ' + 'btnUpdateDatabase + ' + Me.btnUpdateDatabase.Location = New System.Drawing.Point(418, 348) + Me.btnUpdateDatabase.Name = "btnUpdateDatabase" + Me.btnUpdateDatabase.Size = New System.Drawing.Size(114, 23) + Me.btnUpdateDatabase.TabIndex = 17 + Me.btnUpdateDatabase.Text = "Update Database" + ' + 'dataGridViewOrders + ' + Me.dataGridViewOrders.Location = New System.Drawing.Point(24, 240) + Me.dataGridViewOrders.Name = "dataGridViewOrders" + Me.dataGridViewOrders.Size = New System.Drawing.Size(509, 90) + Me.dataGridViewOrders.TabIndex = 15 + Me.dataGridViewOrders.Text = "dataGridView3" + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(23, 106) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(93, 13) + Me.label2.TabIndex = 14 + Me.label2.Text = "Current Customers" + ' + 'dataGridViewCustomers + ' + Me.dataGridViewCustomers.Location = New System.Drawing.Point(24, 122) + Me.dataGridViewCustomers.Name = "dataGridViewCustomers" + Me.dataGridViewCustomers.Size = New System.Drawing.Size(509, 90) + Me.dataGridViewCustomers.TabIndex = 13 + Me.dataGridViewCustomers.Text = "dataGridView2" + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(22, -2) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(88, 13) + Me.label1.TabIndex = 12 + Me.label1.Text = "Current Inventory" + ' + 'dataGridViewInventory + ' + Me.dataGridViewInventory.Location = New System.Drawing.Point(23, 14) + Me.dataGridViewInventory.Name = "dataGridViewInventory" + Me.dataGridViewInventory.Size = New System.Drawing.Size(509, 82) + Me.dataGridViewInventory.TabIndex = 11 + Me.dataGridViewInventory.Text = "dataGridView1" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(545, 462) + Me.Controls.Add(Me.groupBox1) + Me.Controls.Add(Me.label3) + Me.Controls.Add(Me.btnUpdateDatabase) + Me.Controls.Add(Me.dataGridViewOrders) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.dataGridViewCustomers) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.dataGridViewInventory) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "AutoLot Database Manipulator" + Me.groupBox1.ResumeLayout(False) + Me.groupBox1.PerformLayout() + CType(Me.dataGridViewOrders, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.dataGridViewCustomers, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.dataGridViewInventory, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents groupBox1 As System.Windows.Forms.GroupBox + Private WithEvents btnGetOrderInfo As System.Windows.Forms.Button + Private WithEvents label4 As System.Windows.Forms.Label + Private WithEvents txtCustID As System.Windows.Forms.TextBox + Private WithEvents label3 As System.Windows.Forms.Label + Private WithEvents btnUpdateDatabase As System.Windows.Forms.Button + Private WithEvents dataGridViewOrders As System.Windows.Forms.DataGridView + Private WithEvents label2 As System.Windows.Forms.Label + Private WithEvents dataGridViewCustomers As System.Windows.Forms.DataGridView + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents dataGridViewInventory As System.Windows.Forms.DataGridView + +End Class diff --git a/Code/Chapter 23/MultitabledDataSetApp/MainForm.resx b/Code/Chapter 23/MultitabledDataSetApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp/MainForm.vb b/Code/Chapter 23/MultitabledDataSetApp/MainForm.vb new file mode 100644 index 0000000..a7abdca --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/MainForm.vb @@ -0,0 +1,120 @@ +Imports System.Data.SqlClient +Imports System.Configuration + +Public Class MainForm + ' Form wide DataSet. + Private autoLotDS As New DataSet("AutoLot") + + ' Make use of command builders to simplify data adapter configuration. + Private sqlCBInventory As SqlCommandBuilder + Private sqlCBCustomers As SqlCommandBuilder + Private sqlCBOrders As SqlCommandBuilder + + ' Our data adapters (for each table). + Private invTableAdapter As SqlDataAdapter + Private custTableAdapter As SqlDataAdapter + Private ordersTableAdapter As SqlDataAdapter + + ' Form wide connection string. + Private cnStr As String = String.Empty + + +#Region "Ctor logic" + Public Sub New() + InitializeComponent() + + ' Get connection string. + cnStr = ConfigurationManager.ConnectionStrings("AutoLotSqlProvider").ConnectionString + + ' Create adapters. + invTableAdapter = New SqlDataAdapter("Select * from Inventory", cnStr) + custTableAdapter = New SqlDataAdapter("Select * from Customers", cnStr) + ordersTableAdapter = New SqlDataAdapter("Select * from Orders", cnStr) + + ' Autogenerate commands. + sqlCBInventory = New SqlCommandBuilder(invTableAdapter) + sqlCBOrders = New SqlCommandBuilder(ordersTableAdapter) + sqlCBCustomers = New SqlCommandBuilder(custTableAdapter) + + ' Add tables to DS. + invTableAdapter.Fill(autoLotDS, "Inventory") + custTableAdapter.Fill(autoLotDS, "Customers") + ordersTableAdapter.Fill(autoLotDS, "Orders") + + ' Build relations between tables. + BuildTableRelationship() + + ' Bind to grids + dataGridViewInventory.DataSource = autoLotDS.Tables("Inventory") + dataGridViewCustomers.DataSource = autoLotDS.Tables("Customers") + dataGridViewOrders.DataSource = autoLotDS.Tables("Orders") + End Sub +#End Region + +#Region "Build table relationships" + Private Sub BuildTableRelationship() + ' Create CustomerOrder data relation object. + Dim dr As New DataRelation("CustomerOrder", _ + autoLotDS.Tables("Customers").Columns("CustID"), _ + autoLotDS.Tables("Orders").Columns("CustID")) + autoLotDS.Relations.Add(dr) + + ' Create InventoryOrder data relation object. + dr = New DataRelation("InventoryOrder", _ + autoLotDS.Tables("Inventory").Columns("CarID"), _ + autoLotDS.Tables("Orders").Columns("CarID")) + autoLotDS.Relations.Add(dr) + End Sub +#End Region + +#Region "Button Click handlers" + Private Sub btnUpdateDatabase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdateDatabase.Click + Try + invTableAdapter.Update(autoLotDS, "Inventory") + custTableAdapter.Update(autoLotDS, "Customers") + ordersTableAdapter.Update(autoLotDS, "Orders") + Catch ex As Exception + MessageBox.Show(ex.Message) + End Try + End Sub + + Private Sub btnGetOrderInfo_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnGetOrderInfo.Click + Dim strOrderInfo As String = String.Empty + Dim drsCust As DataRow() = Nothing + Dim drsOrder As DataRow() = Nothing + + ' Get the customer ID in the text box. + Dim custID As Integer = Integer.Parse(Me.txtCustID.Text) + + ' Now based on custID, get the correct row in Customers table. + drsCust = autoLotDS.Tables("Customers").Select( _ + String.Format("CustID = {0}", custID)) + strOrderInfo += String.Format("Customer {0}: {1} {2}" & Chr(10), _ + drsCust(0)("CustID").ToString(), _ + drsCust(0)("FirstName").ToString().Trim(), _ + drsCust(0)("LastName").ToString().Trim()) + + ' Navigate from customer table to order table. + drsOrder = drsCust(0).GetChildRows(autoLotDS.Relations("CustomerOrder")) + + ' Get order number. + For Each r As DataRow In drsOrder + strOrderInfo += String.Format("Order Number: {0}" & Chr(10), r("OrderID")) + Next + + ' Now navigate from order table to inventory table. + Dim drsInv As DataRow() = _ + drsOrder(0).GetParentRows(autoLotDS.Relations("InventoryOrder")) + + ' Get Car info. + For Each r As DataRow In drsInv + strOrderInfo += String.Format("Make: {0}" & Chr(10), r("Make")) + strOrderInfo += String.Format("Color: {0}" & Chr(10), r("Color")) + strOrderInfo += String.Format("Pet Name: {0}" & Chr(10), r("PetName")) + Next + MessageBox.Show(strOrderInfo, "Order Details") + End Sub +#End Region + +End Class diff --git a/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.sln b/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.sln new file mode 100644 index 0000000..c21462c --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MultitabledDataSetApp", "MultitabledDataSetApp.vbproj", "{943DE939-E2E7-4E86-9037-87772E45AC75}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {943DE939-E2E7-4E86-9037-87772E45AC75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {943DE939-E2E7-4E86-9037-87772E45AC75}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.suo b/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..7e1c1b391dace4e5ddad1d822aa2199513b945d0 GIT binary patch literal 20480 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {943DE939-E2E7-4E86-9037-87772E45AC75} + WinExe + MultitabledDataSetApp.My.MyApplication + MultitabledDataSetApp + MultitabledDataSetApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MultitabledDataSetApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MultitabledDataSetApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.vbproj.user b/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/MultitabledDataSetApp.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..1928afb --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.MultitabledDataSetApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.myapp b/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/AssemblyInfo.vb b/Code/Chapter 23/MultitabledDataSetApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3e47486 --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1ba789f --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MultitabledDataSetApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.resx b/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.Designer.vb b/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8d361cc --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MultitabledDataSetApp.My.MySettings + Get + Return Global.MultitabledDataSetApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.settings b/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/MultitabledDataSetApp/app.config b/Code/Chapter 23/MultitabledDataSetApp/app.config new file mode 100644 index 0000000..4e833eb --- /dev/null +++ b/Code/Chapter 23/MultitabledDataSetApp/app.config @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Application.Designer.vb b/Code/Chapter 23/SimpleDataSet/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Application.myapp b/Code/Chapter 23/SimpleDataSet/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 23/SimpleDataSet/My Project/AssemblyInfo.vb b/Code/Chapter 23/SimpleDataSet/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..779915d --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Resources.Designer.vb b/Code/Chapter 23/SimpleDataSet/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1f47daf --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleDataSet.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Resources.resx b/Code/Chapter 23/SimpleDataSet/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Settings.Designer.vb b/Code/Chapter 23/SimpleDataSet/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9dca6ae --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleDataSet.My.MySettings + Get + Return Global.SimpleDataSet.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/SimpleDataSet/My Project/Settings.settings b/Code/Chapter 23/SimpleDataSet/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/SimpleDataSet/Program.vb b/Code/Chapter 23/SimpleDataSet/Program.vb new file mode 100644 index 0000000..54167f4 --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/Program.vb @@ -0,0 +1,182 @@ +Option Explicit On +Option Strict On + +Imports System.IO +Imports System.Runtime.Serialization.Formatters.Binary + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with DataSets *****" & vbLf) + + ' Create the DataSet object and add a few properties. + Dim carsInventoryDS As New DataSet("Car Inventory") + + carsInventoryDS.ExtendedProperties("TimeStamp") = DateTime.Now + carsInventoryDS.ExtendedProperties("DataSetID") = Guid.NewGuid() + carsInventoryDS.ExtendedProperties("Company") = "Intertech Training" + + ' Create data columns that map to the + ' 'real' columns in the Inventory table + ' of the AutoLot database. + Dim carIDColumn As New DataColumn("CarID", GetType(Integer)) + carIDColumn.Caption = "Car ID" + carIDColumn.ReadOnly = True + carIDColumn.AllowDBNull = False + carIDColumn.Unique = True + carIDColumn.AutoIncrement = True + carIDColumn.AutoIncrementSeed = 0 + carIDColumn.AutoIncrementStep = 1 + + Dim carMakeColumn As New DataColumn("Make", GetType(String)) + Dim carColorColumn As New DataColumn("Color", GetType(String)) + Dim carPetNameColumn As New DataColumn("PetName", GetType(String)) + carPetNameColumn.Caption = "Pet Name" + + ' Now add DataColumns to a DataTable. + Dim inventoryTable As New DataTable("Inventory") + inventoryTable.Columns.AddRange(New DataColumn() {carIDColumn, carMakeColumn, _ + carColorColumn, carPetNameColumn}) + + ' Now add some rows to the Inventory Table. + Dim carRow As DataRow = inventoryTable.NewRow() + carRow("Make") = "BMW" + carRow("Color") = "Black" + carRow("PetName") = "Hamlet" + inventoryTable.Rows.Add(carRow) + + carRow = inventoryTable.NewRow() + ' Column 0 is the autoincremented ID field, + ' so start at 1. + + carRow(1) = "Saab" + carRow(2) = "Red" + carRow(3) = "Sea Breeze" + inventoryTable.Rows.Add(carRow) + + ' Mark the primary key of this table. + inventoryTable.PrimaryKey = New DataColumn() {inventoryTable.Columns(0)} + + ' Finally, add our table to the DataSet. + carsInventoryDS.Tables.Add(inventoryTable) + + ' Now print the DataSet. + PrintDataSet(carsInventoryDS) + + ' Save and load as XML. + DataSetAsXml(carsInventoryDS) + + ' Save and load as binary. + DataSetAsBinary(carsInventoryDS) + + ' Uncomment to test. + ManipulateDataRowState() + Console.ReadLine() + End Sub + +#Region "DataSet as XML" + Private Sub DataSetAsXml(ByVal carsInventoryDS As DataSet) + ' Save this DataSet as XML. + carsInventoryDS.WriteXml("carsDataSet.xml") + carsInventoryDS.WriteXmlSchema("carsDataSet.xsd") + + ' Clear out DataSet. + carsInventoryDS.Clear() + + ' Load DataSet from XML file. + carsInventoryDS.ReadXml("carsDataSet.xml") + End Sub +#End Region + +#Region "DataSet as Binary" + Private Sub DataSetAsBinary(ByVal carsInventoryDS As DataSet) + ' Set binary serialization flag. + carsInventoryDS.RemotingFormat = SerializationFormat.Binary + + ' Save this DataSet as binary. + Dim fs As New FileStream("BinaryCars.bin", FileMode.Create) + Dim bFormat As New BinaryFormatter() + bFormat.Serialize(fs, carsInventoryDS) + fs.Close() + + ' Clear out DataSet. + carsInventoryDS.Clear() + + ' Load DataSet from binary file. + fs = New FileStream("BinaryCars.bin", FileMode.Open) + Dim data As DataSet = DirectCast(bFormat.Deserialize(fs), DataSet) + End Sub +#End Region + +#Region "DataRowState manipulation test" + Private Sub ManipulateDataRowState() + Console.WriteLine(vbLf & vbLf & "***** Fun with RowState *****" & vbLf) + ' Create a temp DataTable for testing. + Dim temp As New DataTable("Temp") + temp.Columns.Add(New DataColumn("TempColumn", GetType(Integer))) + + ' RowState = Detatched. + Dim row As DataRow = temp.NewRow() + Console.WriteLine("After calling NewRow(): {0}", row.RowState) + + ' RowState = Added. + temp.Rows.Add(row) + Console.WriteLine("After calling Rows.Add(): {0}", row.RowState) + + ' RowState = Added. + row("TempColumn") = 10 + Console.WriteLine("After first assignment: {0}", row.RowState) + + ' RowState = Unchanged. + temp.AcceptChanges() + Console.WriteLine("After calling AcceptChanges: {0}", row.RowState) + + ' RowState = Modified. + row("TempColumn") = 11 + Console.WriteLine("After second assignment: {0}", row.RowState) + + ' RowState = Deleted. + temp.Rows(0).Delete() + Console.WriteLine("After calling Delete: {0}", row.RowState) + End Sub +#End Region + +#Region "Print out DataSet" + Private Sub PrintDataSet(ByVal ds As DataSet) + ' Print out any name and extended properties. + Console.WriteLine("DataSet is named: {0}", ds.DataSetName) + For Each de As System.Collections.DictionaryEntry In ds.ExtendedProperties + Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value) + Next + Console.WriteLine() + + For Each dt As DataTable In ds.Tables + Console.WriteLine("=> {0} Table:", dt.TableName) + For curCol As Integer = 0 To dt.Columns.Count - 1 + + ' Print out the column names. + Console.Write(dt.Columns(curCol).ColumnName + "" & vbTab) + Next + Console.WriteLine("" & vbLf & "----------------------------------") + PrintTable(dt) + Next + End Sub +#End Region + +#Region "Print out DataTable using DataTableReader" + Private Sub PrintTable(ByVal dt As DataTable) + ' Get the DataTableReader type. + Dim dtReader As DataTableReader = dt.CreateDataReader() + + ' The DataTableReader works just like the DataReader. + While dtReader.Read() + For i As Integer = 0 To dtReader.FieldCount - 1 + Console.Write("{0}" & vbTab, dtReader.GetValue(i).ToString().Trim()) + Next + Console.WriteLine() + End While + dtReader.Close() + End Sub +#End Region + +End Module diff --git a/Code/Chapter 23/SimpleDataSet/SimpleDataSet.sln b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.sln new file mode 100644 index 0000000..11a21d6 --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleDataSet", "SimpleDataSet.vbproj", "{00A45FAE-1DC2-41E4-9FD9-23B08F49428A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {00A45FAE-1DC2-41E4-9FD9-23B08F49428A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00A45FAE-1DC2-41E4-9FD9-23B08F49428A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00A45FAE-1DC2-41E4-9FD9-23B08F49428A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00A45FAE-1DC2-41E4-9FD9-23B08F49428A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/SimpleDataSet/SimpleDataSet.suo b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.suo new file mode 100644 index 0000000000000000000000000000000000000000..ac63511739a230d602c37a6d1dcb8f2d061e7fa6 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj new file mode 100644 index 0000000..58695c4 --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {00A45FAE-1DC2-41E4-9FD9-23B08F49428A} + Exe + SimpleDataSet.Program + SimpleDataSet + SimpleDataSet + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + SimpleDataSet.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleDataSet.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj.user b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 23/SimpleDataSet/SimpleDataSet.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.Designer.vb b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.Designer.vb new file mode 100644 index 0000000..e42807e --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.Designer.vb @@ -0,0 +1,1406 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + + + +'''

+'''Represents a strongly typed in-memory cache of data. +''' + _ +Partial Public Class InventoryDataSet + Inherits Global.System.Data.DataSet + + Private tableInventory As InventoryDataTable + + Private _schemaSerializationMode As Global.System.Data.SchemaSerializationMode = Global.System.Data.SchemaSerializationMode.IncludeSchema + + _ + Public Sub New() + MyBase.New + Me.BeginInit + Me.InitClass + Dim schemaChangedHandler As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler MyBase.Relations.CollectionChanged, schemaChangedHandler + Me.EndInit + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context, false) + If (Me.IsBinarySerialized(info, context) = true) Then + Me.InitVars(false) + Dim schemaChangedHandler1 As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler Me.Tables.CollectionChanged, schemaChangedHandler1 + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler1 + Return + End If + Dim strSchema As String = CType(info.GetValue("XmlSchema", GetType(String)),String) + If (Me.DetermineSchemaSerializationMode(info, context) = Global.System.Data.SchemaSerializationMode.IncludeSchema) Then + Dim ds As Global.System.Data.DataSet = New Global.System.Data.DataSet + ds.ReadXmlSchema(New Global.System.Xml.XmlTextReader(New Global.System.IO.StringReader(strSchema))) + If (Not (ds.Tables("Inventory")) Is Nothing) Then + MyBase.Tables.Add(New InventoryDataTable(ds.Tables("Inventory"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, Global.System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXmlSchema(New Global.System.Xml.XmlTextReader(New Global.System.IO.StringReader(strSchema))) + End If + Me.GetSerializationData(info, context) + Dim schemaChangedHandler As Global.System.ComponentModel.CollectionChangeEventHandler = AddressOf Me.SchemaChanged + AddHandler MyBase.Tables.CollectionChanged, schemaChangedHandler + AddHandler Me.Relations.CollectionChanged, schemaChangedHandler + End Sub + + _ + Public ReadOnly Property Inventory() As InventoryDataTable + Get + Return Me.tableInventory + End Get + End Property + + _ + Public Overrides Property SchemaSerializationMode() As Global.System.Data.SchemaSerializationMode + Get + Return Me._schemaSerializationMode + End Get + Set + Me._schemaSerializationMode = value + End Set + End Property + + _ + Public Shadows ReadOnly Property Tables() As Global.System.Data.DataTableCollection + Get + Return MyBase.Tables + End Get + End Property + + _ + Public Shadows ReadOnly Property Relations() As Global.System.Data.DataRelationCollection + Get + Return MyBase.Relations + End Get + End Property + + _ + Protected Overrides Sub InitializeDerivedDataSet() + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Public Overrides Function Clone() As Global.System.Data.DataSet + Dim cln As InventoryDataSet = CType(MyBase.Clone,InventoryDataSet) + cln.InitVars + cln.SchemaSerializationMode = Me.SchemaSerializationMode + Return cln + End Function + + _ + Protected Overrides Function ShouldSerializeTables() As Boolean + Return false + End Function + + _ + Protected Overrides Function ShouldSerializeRelations() As Boolean + Return false + End Function + + _ + Protected Overrides Sub ReadXmlSerializable(ByVal reader As Global.System.Xml.XmlReader) + If (Me.DetermineSchemaSerializationMode(reader) = Global.System.Data.SchemaSerializationMode.IncludeSchema) Then + Me.Reset + Dim ds As Global.System.Data.DataSet = New Global.System.Data.DataSet + ds.ReadXml(reader) + If (Not (ds.Tables("Inventory")) Is Nothing) Then + MyBase.Tables.Add(New InventoryDataTable(ds.Tables("Inventory"))) + End If + Me.DataSetName = ds.DataSetName + Me.Prefix = ds.Prefix + Me.Namespace = ds.Namespace + Me.Locale = ds.Locale + Me.CaseSensitive = ds.CaseSensitive + Me.EnforceConstraints = ds.EnforceConstraints + Me.Merge(ds, false, Global.System.Data.MissingSchemaAction.Add) + Me.InitVars + Else + Me.ReadXml(reader) + Me.InitVars + End If + End Sub + + _ + Protected Overrides Function GetSchemaSerializable() As Global.System.Xml.Schema.XmlSchema + Dim stream As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Me.WriteXmlSchema(New Global.System.Xml.XmlTextWriter(stream, Nothing)) + stream.Position = 0 + Return Global.System.Xml.Schema.XmlSchema.Read(New Global.System.Xml.XmlTextReader(stream), Nothing) + End Function + + _ + Friend Overloads Sub InitVars() + Me.InitVars(true) + End Sub + + _ + Friend Overloads Sub InitVars(ByVal initTable As Boolean) + Me.tableInventory = CType(MyBase.Tables("Inventory"),InventoryDataTable) + If (initTable = true) Then + If (Not (Me.tableInventory) Is Nothing) Then + Me.tableInventory.InitVars + End If + End If + End Sub + + _ + Private Sub InitClass() + Me.DataSetName = "InventoryDataSet" + Me.Prefix = "" + Me.Namespace = "http://tempuri.org/InventoryDataSet.xsd" + Me.EnforceConstraints = true + Me.SchemaSerializationMode = Global.System.Data.SchemaSerializationMode.IncludeSchema + Me.tableInventory = New InventoryDataTable + MyBase.Tables.Add(Me.tableInventory) + End Sub + + _ + Private Function ShouldSerializeInventory() As Boolean + Return false + End Function + + _ + Private Sub SchemaChanged(ByVal sender As Object, ByVal e As Global.System.ComponentModel.CollectionChangeEventArgs) + If (e.Action = Global.System.ComponentModel.CollectionChangeAction.Remove) Then + Me.InitVars + End If + End Sub + + _ + Public Shared Function GetTypedDataSetSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim ds As InventoryDataSet = New InventoryDataSet + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim any As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any.Namespace = ds.Namespace + sequence.Items.Add(any) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + + Public Delegate Sub InventoryRowChangeEventHandler(ByVal sender As Object, ByVal e As InventoryRowChangeEvent) + + ''' + '''Represents the strongly named DataTable class. + ''' + _ + Partial Public Class InventoryDataTable + Inherits Global.System.Data.TypedTableBase(Of InventoryRow) + + Private columnCarID As Global.System.Data.DataColumn + + Private columnMake As Global.System.Data.DataColumn + + Private columnColor As Global.System.Data.DataColumn + + Private columnPetName As Global.System.Data.DataColumn + + _ + Public Sub New() + MyBase.New + Me.TableName = "Inventory" + Me.BeginInit + Me.InitClass + Me.EndInit + End Sub + + _ + Friend Sub New(ByVal table As Global.System.Data.DataTable) + MyBase.New + Me.TableName = table.TableName + If (table.CaseSensitive <> table.DataSet.CaseSensitive) Then + Me.CaseSensitive = table.CaseSensitive + End If + If (table.Locale.ToString <> table.DataSet.Locale.ToString) Then + Me.Locale = table.Locale + End If + If (table.Namespace <> table.DataSet.Namespace) Then + Me.Namespace = table.Namespace + End If + Me.Prefix = table.Prefix + Me.MinimumCapacity = table.MinimumCapacity + End Sub + + _ + Protected Sub New(ByVal info As Global.System.Runtime.Serialization.SerializationInfo, ByVal context As Global.System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + Me.InitVars + End Sub + + _ + Public ReadOnly Property CarIDColumn() As Global.System.Data.DataColumn + Get + Return Me.columnCarID + End Get + End Property + + _ + Public ReadOnly Property MakeColumn() As Global.System.Data.DataColumn + Get + Return Me.columnMake + End Get + End Property + + _ + Public ReadOnly Property ColorColumn() As Global.System.Data.DataColumn + Get + Return Me.columnColor + End Get + End Property + + _ + Public ReadOnly Property PetNameColumn() As Global.System.Data.DataColumn + Get + Return Me.columnPetName + End Get + End Property + + _ + Public ReadOnly Property Count() As Integer + Get + Return Me.Rows.Count + End Get + End Property + + _ + Public Default ReadOnly Property Item(ByVal index As Integer) As InventoryRow + Get + Return CType(Me.Rows(index),InventoryRow) + End Get + End Property + + Public Event InventoryRowChanging As InventoryRowChangeEventHandler + + Public Event InventoryRowChanged As InventoryRowChangeEventHandler + + Public Event InventoryRowDeleting As InventoryRowChangeEventHandler + + Public Event InventoryRowDeleted As InventoryRowChangeEventHandler + + _ + Public Overloads Sub AddInventoryRow(ByVal row As InventoryRow) + Me.Rows.Add(row) + End Sub + + _ + Public Overloads Function AddInventoryRow(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String) As InventoryRow + Dim rowInventoryRow As InventoryRow = CType(Me.NewRow,InventoryRow) + Dim columnValuesArray() As Object = New Object() {CarID, Make, Color, PetName} + rowInventoryRow.ItemArray = columnValuesArray + Me.Rows.Add(rowInventoryRow) + Return rowInventoryRow + End Function + + _ + Public Function FindByCarID(ByVal CarID As Integer) As InventoryRow + Return CType(Me.Rows.Find(New Object() {CarID}),InventoryRow) + End Function + + _ + Public Overrides Function Clone() As Global.System.Data.DataTable + Dim cln As InventoryDataTable = CType(MyBase.Clone,InventoryDataTable) + cln.InitVars + Return cln + End Function + + _ + Protected Overrides Function CreateInstance() As Global.System.Data.DataTable + Return New InventoryDataTable + End Function + + _ + Friend Sub InitVars() + Me.columnCarID = MyBase.Columns("CarID") + Me.columnMake = MyBase.Columns("Make") + Me.columnColor = MyBase.Columns("Color") + Me.columnPetName = MyBase.Columns("PetName") + End Sub + + _ + Private Sub InitClass() + Me.columnCarID = New Global.System.Data.DataColumn("CarID", GetType(Integer), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnCarID) + Me.columnMake = New Global.System.Data.DataColumn("Make", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnMake) + Me.columnColor = New Global.System.Data.DataColumn("Color", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnColor) + Me.columnPetName = New Global.System.Data.DataColumn("PetName", GetType(String), Nothing, Global.System.Data.MappingType.Element) + MyBase.Columns.Add(Me.columnPetName) + Me.Constraints.Add(New Global.System.Data.UniqueConstraint("Constraint1", New Global.System.Data.DataColumn() {Me.columnCarID}, true)) + Me.columnCarID.AllowDBNull = false + Me.columnCarID.Unique = true + Me.columnMake.AllowDBNull = false + Me.columnMake.MaxLength = 50 + Me.columnColor.AllowDBNull = false + Me.columnColor.MaxLength = 50 + Me.columnPetName.MaxLength = 50 + End Sub + + _ + Public Function NewInventoryRow() As InventoryRow + Return CType(Me.NewRow,InventoryRow) + End Function + + _ + Protected Overrides Function NewRowFromBuilder(ByVal builder As Global.System.Data.DataRowBuilder) As Global.System.Data.DataRow + Return New InventoryRow(builder) + End Function + + _ + Protected Overrides Function GetRowType() As Global.System.Type + Return GetType(InventoryRow) + End Function + + _ + Protected Overrides Sub OnRowChanged(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanged(e) + If (Not (Me.InventoryRowChangedEvent) Is Nothing) Then + RaiseEvent InventoryRowChanged(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowChanging(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowChanging(e) + If (Not (Me.InventoryRowChangingEvent) Is Nothing) Then + RaiseEvent InventoryRowChanging(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleted(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleted(e) + If (Not (Me.InventoryRowDeletedEvent) Is Nothing) Then + RaiseEvent InventoryRowDeleted(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Protected Overrides Sub OnRowDeleting(ByVal e As Global.System.Data.DataRowChangeEventArgs) + MyBase.OnRowDeleting(e) + If (Not (Me.InventoryRowDeletingEvent) Is Nothing) Then + RaiseEvent InventoryRowDeleting(Me, New InventoryRowChangeEvent(CType(e.Row,InventoryRow), e.Action)) + End If + End Sub + + _ + Public Sub RemoveInventoryRow(ByVal row As InventoryRow) + Me.Rows.Remove(row) + End Sub + + _ + Public Shared Function GetTypedTableSchema(ByVal xs As Global.System.Xml.Schema.XmlSchemaSet) As Global.System.Xml.Schema.XmlSchemaComplexType + Dim type As Global.System.Xml.Schema.XmlSchemaComplexType = New Global.System.Xml.Schema.XmlSchemaComplexType + Dim sequence As Global.System.Xml.Schema.XmlSchemaSequence = New Global.System.Xml.Schema.XmlSchemaSequence + Dim ds As InventoryDataSet = New InventoryDataSet + Dim any1 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any1.Namespace = "http://www.w3.org/2001/XMLSchema" + any1.MinOccurs = New Decimal(0) + any1.MaxOccurs = Decimal.MaxValue + any1.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any1) + Dim any2 As Global.System.Xml.Schema.XmlSchemaAny = New Global.System.Xml.Schema.XmlSchemaAny + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1" + any2.MinOccurs = New Decimal(1) + any2.ProcessContents = Global.System.Xml.Schema.XmlSchemaContentProcessing.Lax + sequence.Items.Add(any2) + Dim attribute1 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute1.Name = "namespace" + attribute1.FixedValue = ds.Namespace + type.Attributes.Add(attribute1) + Dim attribute2 As Global.System.Xml.Schema.XmlSchemaAttribute = New Global.System.Xml.Schema.XmlSchemaAttribute + attribute2.Name = "tableTypeName" + attribute2.FixedValue = "InventoryDataTable" + type.Attributes.Add(attribute2) + type.Particle = sequence + Dim dsSchema As Global.System.Xml.Schema.XmlSchema = ds.GetSchemaSerializable + If xs.Contains(dsSchema.TargetNamespace) Then + Dim s1 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Dim s2 As Global.System.IO.MemoryStream = New Global.System.IO.MemoryStream + Try + Dim schema As Global.System.Xml.Schema.XmlSchema = Nothing + dsSchema.Write(s1) + Dim schemas As Global.System.Collections.IEnumerator = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator + Do While schemas.MoveNext + schema = CType(schemas.Current,Global.System.Xml.Schema.XmlSchema) + s2.SetLength(0) + schema.Write(s2) + If (s1.Length = s2.Length) Then + s1.Position = 0 + s2.Position = 0 + + Do While ((s1.Position <> s1.Length) _ + AndAlso (s1.ReadByte = s2.ReadByte)) + + + Loop + If (s1.Position = s1.Length) Then + Return type + End If + End If + + Loop + Finally + If (Not (s1) Is Nothing) Then + s1.Close + End If + If (Not (s2) Is Nothing) Then + s2.Close + End If + End Try + End If + xs.Add(dsSchema) + Return type + End Function + End Class + + ''' + '''Represents strongly named DataRow class. + ''' + _ + Partial Public Class InventoryRow + Inherits Global.System.Data.DataRow + + Private tableInventory As InventoryDataTable + + _ + Friend Sub New(ByVal rb As Global.System.Data.DataRowBuilder) + MyBase.New(rb) + Me.tableInventory = CType(Me.Table,InventoryDataTable) + End Sub + + _ + Public Property CarID() As Integer + Get + Return CType(Me(Me.tableInventory.CarIDColumn),Integer) + End Get + Set + Me(Me.tableInventory.CarIDColumn) = value + End Set + End Property + + _ + Public Property Make() As String + Get + Return CType(Me(Me.tableInventory.MakeColumn),String) + End Get + Set + Me(Me.tableInventory.MakeColumn) = value + End Set + End Property + + _ + Public Property Color() As String + Get + Return CType(Me(Me.tableInventory.ColorColumn),String) + End Get + Set + Me(Me.tableInventory.ColorColumn) = value + End Set + End Property + + _ + Public Property PetName() As String + Get + Try + Return CType(Me(Me.tableInventory.PetNameColumn),String) + Catch e As Global.System.InvalidCastException + Throw New Global.System.Data.StrongTypingException("The value for column 'PetName' in table 'Inventory' is DBNull.", e) + End Try + End Get + Set + Me(Me.tableInventory.PetNameColumn) = value + End Set + End Property + + _ + Public Function IsPetNameNull() As Boolean + Return Me.IsNull(Me.tableInventory.PetNameColumn) + End Function + + _ + Public Sub SetPetNameNull() + Me(Me.tableInventory.PetNameColumn) = Global.System.Convert.DBNull + End Sub + End Class + + ''' + '''Row event argument class + ''' + _ + Public Class InventoryRowChangeEvent + Inherits Global.System.EventArgs + + Private eventRow As InventoryRow + + Private eventAction As Global.System.Data.DataRowAction + + _ + Public Sub New(ByVal row As InventoryRow, ByVal action As Global.System.Data.DataRowAction) + MyBase.New + Me.eventRow = row + Me.eventAction = action + End Sub + + _ + Public ReadOnly Property Row() As InventoryRow + Get + Return Me.eventRow + End Get + End Property + + _ + Public ReadOnly Property Action() As Global.System.Data.DataRowAction + Get + Return Me.eventAction + End Get + End Property + End Class +End Class + +Namespace InventoryDataSetTableAdapters + + ''' + '''Represents the connection and commands used to retrieve and save data. + ''' + _ + Partial Public Class InventoryTableAdapter + Inherits Global.System.ComponentModel.Component + + Private WithEvents _adapter As Global.System.Data.SqlClient.SqlDataAdapter + + Private _connection As Global.System.Data.SqlClient.SqlConnection + + Private _transaction As Global.System.Data.SqlClient.SqlTransaction + + Private _commandCollection() As Global.System.Data.SqlClient.SqlCommand + + Private _clearBeforeFill As Boolean + + _ + Public Sub New() + MyBase.New + Me.ClearBeforeFill = true + End Sub + + _ + Protected Friend ReadOnly Property Adapter() As Global.System.Data.SqlClient.SqlDataAdapter + Get + If (Me._adapter Is Nothing) Then + Me.InitAdapter + End If + Return Me._adapter + End Get + End Property + + _ + Friend Property Connection() As Global.System.Data.SqlClient.SqlConnection + Get + If (Me._connection Is Nothing) Then + Me.InitConnection + End If + Return Me._connection + End Get + Set + Me._connection = value + If (Not (Me.Adapter.InsertCommand) Is Nothing) Then + Me.Adapter.InsertCommand.Connection = value + End If + If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then + Me.Adapter.DeleteCommand.Connection = value + End If + If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then + Me.Adapter.UpdateCommand.Connection = value + End If + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + If (Not (Me.CommandCollection(i)) Is Nothing) Then + CType(Me.CommandCollection(i),Global.System.Data.SqlClient.SqlCommand).Connection = value + End If + i = (i + 1) + Loop + End Set + End Property + + _ + Friend Property Transaction() As Global.System.Data.SqlClient.SqlTransaction + Get + Return Me._transaction + End Get + Set + Me._transaction = value + Dim i As Integer = 0 + Do While (i < Me.CommandCollection.Length) + Me.CommandCollection(i).Transaction = Me._transaction + i = (i + 1) + Loop + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.DeleteCommand) Is Nothing)) Then + Me.Adapter.DeleteCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.InsertCommand) Is Nothing)) Then + Me.Adapter.InsertCommand.Transaction = Me._transaction + End If + If ((Not (Me.Adapter) Is Nothing) _ + AndAlso (Not (Me.Adapter.UpdateCommand) Is Nothing)) Then + Me.Adapter.UpdateCommand.Transaction = Me._transaction + End If + End Set + End Property + + _ + Protected ReadOnly Property CommandCollection() As Global.System.Data.SqlClient.SqlCommand() + Get + If (Me._commandCollection Is Nothing) Then + Me.InitCommandCollection + End If + Return Me._commandCollection + End Get + End Property + + _ + Public Property ClearBeforeFill() As Boolean + Get + Return Me._clearBeforeFill + End Get + Set + Me._clearBeforeFill = value + End Set + End Property + + _ + Private Sub InitAdapter() + Me._adapter = New Global.System.Data.SqlClient.SqlDataAdapter + Dim tableMapping As Global.System.Data.Common.DataTableMapping = New Global.System.Data.Common.DataTableMapping + tableMapping.SourceTable = "Table" + tableMapping.DataSetTable = "Inventory" + tableMapping.ColumnMappings.Add("CarID", "CarID") + tableMapping.ColumnMappings.Add("Make", "Make") + tableMapping.ColumnMappings.Add("Color", "Color") + tableMapping.ColumnMappings.Add("PetName", "PetName") + Me._adapter.TableMappings.Add(tableMapping) + Me._adapter.DeleteCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.DeleteCommand.Connection = Me.Connection + Me._adapter.DeleteCommand.CommandText = "DELETE FROM [dbo].[Inventory] WHERE (([CarID] = @Original_CarID) AND ([Make] = @O"& _ + "riginal_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [Pet"& _ + "Name] IS NULL) OR ([PetName] = @Original_PetName)))" + Me._adapter.DeleteCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@IsNull_PetName", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.DeleteCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.InsertCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.InsertCommand.Connection = Me.Connection + Me._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Inventory] ([CarID], [Make], [Color], [PetName]) VALUES (@CarI"& _ + "D, @Make, @Color, @PetName);"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CarID, Make, Color, PetName FROM Inventory "& _ + "WHERE (CarID = @CarID)" + Me._adapter.InsertCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.InsertCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand = New Global.System.Data.SqlClient.SqlCommand + Me._adapter.UpdateCommand.Connection = Me.Connection + Me._adapter.UpdateCommand.CommandText = "UPDATE [dbo].[Inventory] SET [CarID] = @CarID, [Make] = @Make, [Color] = @Color, "& _ + "[PetName] = @PetName WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_"& _ + "Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS"& _ + " NULL) OR ([PetName] = @Original_PetName)));"&Global.Microsoft.VisualBasic.ChrW(13)&Global.Microsoft.VisualBasic.ChrW(10)&"SELECT CarID, Make, Color, PetName"& _ + " FROM Inventory WHERE (CarID = @CarID)" + Me._adapter.UpdateCommand.CommandType = Global.System.Data.CommandType.Text + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Current, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_CarID", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "CarID", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Make", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Make", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_Color", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "Color", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@IsNull_PetName", Global.System.Data.SqlDbType.Int, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, true, Nothing, "", "", "")) + Me._adapter.UpdateCommand.Parameters.Add(New Global.System.Data.SqlClient.SqlParameter("@Original_PetName", Global.System.Data.SqlDbType.VarChar, 0, Global.System.Data.ParameterDirection.Input, 0, 0, "PetName", Global.System.Data.DataRowVersion.Original, false, Nothing, "", "", "")) + End Sub + + _ + Private Sub InitConnection() + Me._connection = New Global.System.Data.SqlClient.SqlConnection + Me._connection.ConnectionString = Global.VisualDataGridViewApp.My.MySettings.Default.AutoLotConnectionString + End Sub + + _ + Private Sub InitCommandCollection() + Me._commandCollection = New Global.System.Data.SqlClient.SqlCommand(0) {} + Me._commandCollection(0) = New Global.System.Data.SqlClient.SqlCommand + Me._commandCollection(0).Connection = Me.Connection + Me._commandCollection(0).CommandText = "SELECT CarID, Make, Color, PetName FROM dbo.Inventory" + Me._commandCollection(0).CommandType = Global.System.Data.CommandType.Text + End Sub + + _ + Public Overloads Overridable Function Fill(ByVal dataTable As InventoryDataSet.InventoryDataTable) As Integer + Me.Adapter.SelectCommand = Me.CommandCollection(0) + If (Me.ClearBeforeFill = true) Then + dataTable.Clear + End If + Dim returnValue As Integer = Me.Adapter.Fill(dataTable) + Return returnValue + End Function + + _ + Public Overloads Overridable Function GetData() As InventoryDataSet.InventoryDataTable + Me.Adapter.SelectCommand = Me.CommandCollection(0) + Dim dataTable As InventoryDataSet.InventoryDataTable = New InventoryDataSet.InventoryDataTable + Me.Adapter.Fill(dataTable) + Return dataTable + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataTable As InventoryDataSet.InventoryDataTable) As Integer + Return Me.Adapter.Update(dataTable) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataSet As InventoryDataSet) As Integer + Return Me.Adapter.Update(dataSet, "Inventory") + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRow As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(New Global.System.Data.DataRow() {dataRow}) + End Function + + _ + Public Overloads Overridable Function Update(ByVal dataRows() As Global.System.Data.DataRow) As Integer + Return Me.Adapter.Update(dataRows) + End Function + + _ + Public Overloads Overridable Function Delete(ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Me.Adapter.DeleteCommand.Parameters(0).Value = CType(Original_CarID,Integer) + If (Original_Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Make") + Else + Me.Adapter.DeleteCommand.Parameters(1).Value = CType(Original_Make,String) + End If + If (Original_Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Color") + Else + Me.Adapter.DeleteCommand.Parameters(2).Value = CType(Original_Color,String) + End If + If (Original_PetName Is Nothing) Then + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(1,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = Global.System.DBNull.Value + Else + Me.Adapter.DeleteCommand.Parameters(3).Value = CType(0,Object) + Me.Adapter.DeleteCommand.Parameters(4).Value = CType(Original_PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.DeleteCommand.Connection.State + If ((Me.Adapter.DeleteCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.DeleteCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.DeleteCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.DeleteCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Insert(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String) As Integer + Me.Adapter.InsertCommand.Parameters(0).Value = CType(CarID,Integer) + If (Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Make") + Else + Me.Adapter.InsertCommand.Parameters(1).Value = CType(Make,String) + End If + If (Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Color") + Else + Me.Adapter.InsertCommand.Parameters(2).Value = CType(Color,String) + End If + If (PetName Is Nothing) Then + Me.Adapter.InsertCommand.Parameters(3).Value = Global.System.DBNull.Value + Else + Me.Adapter.InsertCommand.Parameters(3).Value = CType(PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.InsertCommand.Connection.State + If ((Me.Adapter.InsertCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.InsertCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.InsertCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.InsertCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal CarID As Integer, ByVal Make As String, ByVal Color As String, ByVal PetName As String, ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Me.Adapter.UpdateCommand.Parameters(0).Value = CType(CarID,Integer) + If (Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Make") + Else + Me.Adapter.UpdateCommand.Parameters(1).Value = CType(Make,String) + End If + If (Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Color") + Else + Me.Adapter.UpdateCommand.Parameters(2).Value = CType(Color,String) + End If + If (PetName Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(3).Value = Global.System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(3).Value = CType(PetName,String) + End If + Me.Adapter.UpdateCommand.Parameters(4).Value = CType(Original_CarID,Integer) + If (Original_Make Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Make") + Else + Me.Adapter.UpdateCommand.Parameters(5).Value = CType(Original_Make,String) + End If + If (Original_Color Is Nothing) Then + Throw New Global.System.ArgumentNullException("Original_Color") + Else + Me.Adapter.UpdateCommand.Parameters(6).Value = CType(Original_Color,String) + End If + If (Original_PetName Is Nothing) Then + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(1,Object) + Me.Adapter.UpdateCommand.Parameters(8).Value = Global.System.DBNull.Value + Else + Me.Adapter.UpdateCommand.Parameters(7).Value = CType(0,Object) + Me.Adapter.UpdateCommand.Parameters(8).Value = CType(Original_PetName,String) + End If + Dim previousConnectionState As Global.System.Data.ConnectionState = Me.Adapter.UpdateCommand.Connection.State + If ((Me.Adapter.UpdateCommand.Connection.State And Global.System.Data.ConnectionState.Open) _ + <> Global.System.Data.ConnectionState.Open) Then + Me.Adapter.UpdateCommand.Connection.Open + End If + Try + Dim returnValue As Integer = Me.Adapter.UpdateCommand.ExecuteNonQuery + Return returnValue + Finally + If (previousConnectionState = Global.System.Data.ConnectionState.Closed) Then + Me.Adapter.UpdateCommand.Connection.Close + End If + End Try + End Function + + _ + Public Overloads Overridable Function Update(ByVal Make As String, ByVal Color As String, ByVal PetName As String, ByVal Original_CarID As Integer, ByVal Original_Make As String, ByVal Original_Color As String, ByVal Original_PetName As String) As Integer + Return Me.Update(Original_CarID, Make, Color, PetName, Original_CarID, Original_Make, Original_Color, Original_PetName) + End Function + End Class + + ''' + '''TableAdapterManager is used to coordinate TableAdapters in the dataset to enable Hierarchical Update scenarios + ''' + _ + Partial Public Class TableAdapterManager + Inherits Global.System.ComponentModel.Component + + Private _updateOrder As UpdateOrderOption + + Private _inventoryTableAdapter As InventoryTableAdapter + + Private _backupDataSetBeforeUpdate As Boolean + + Private _connection As Global.System.Data.IDbConnection + + _ + Public Property UpdateOrder() As UpdateOrderOption + Get + Return Me._updateOrder + End Get + Set + Me._updateOrder = value + End Set + End Property + + _ + Public Property InventoryTableAdapter() As InventoryTableAdapter + Get + Return Me._inventoryTableAdapter + End Get + Set + If ((Not (Me._inventoryTableAdapter) Is Nothing) _ + AndAlso (Me.TableAdapterInstanceCount = 1)) Then + Me._inventoryTableAdapter = value + Return + End If + If ((Not (value) Is Nothing) _ + AndAlso (Me.MatchTableAdapterConnection(value.Connection) = false)) Then + Throw New Global.System.ArgumentException("All TableAdapters managed by a TableAdapterManager must use the same connection s"& _ + "tring.") + End If + Me._inventoryTableAdapter = value + End Set + End Property + + _ + Public Property BackupDataSetBeforeUpdate() As Boolean + Get + Return Me._backupDataSetBeforeUpdate + End Get + Set + Me._backupDataSetBeforeUpdate = value + End Set + End Property + + _ + Public Property Connection() As Global.System.Data.IDbConnection + Get + If (Not (Me._connection) Is Nothing) Then + Return Me._connection + End If + If ((Not (Me._inventoryTableAdapter) Is Nothing) _ + AndAlso (Not (Me._inventoryTableAdapter.Connection) Is Nothing)) Then + Return Me._inventoryTableAdapter.Connection + End If + Return Nothing + End Get + Set + Me._connection = value + End Set + End Property + + _ + Public ReadOnly Property TableAdapterInstanceCount() As Integer + Get + Dim count As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + count = (count + 1) + End If + Return count + End Get + End Property + + ''' + '''Update rows in top-down order. + ''' + _ + Private Function UpdateUpdatedRows(ByVal dataSet As InventoryDataSet, ByVal allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow), ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim updatedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.ModifiedCurrent) + updatedRows = Me.GetRealUpdatedRows(updatedRows, allAddedRows) + If ((Not (updatedRows) Is Nothing) _ + AndAlso (0 < updatedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(updatedRows)) + allChangedRows.AddRange(updatedRows) + End If + End If + Return result + End Function + + ''' + '''Insert rows in top-down order. + ''' + _ + Private Function UpdateInsertedRows(ByVal dataSet As InventoryDataSet, ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim addedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Added) + If ((Not (addedRows) Is Nothing) _ + AndAlso (0 < addedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(addedRows)) + allAddedRows.AddRange(addedRows) + End If + End If + Return result + End Function + + ''' + '''Delete rows in bottom-up order. + ''' + _ + Private Function UpdateDeletedRows(ByVal dataSet As InventoryDataSet, ByVal allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Integer + Dim result As Integer = 0 + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Dim deletedRows() As Global.System.Data.DataRow = dataSet.Inventory.Select(Nothing, Nothing, Global.System.Data.DataViewRowState.Deleted) + If ((Not (deletedRows) Is Nothing) _ + AndAlso (0 < deletedRows.Length)) Then + result = (result + Me._inventoryTableAdapter.Update(deletedRows)) + allChangedRows.AddRange(deletedRows) + End If + End If + Return result + End Function + + ''' + '''Remove inserted rows that become updated rows after calling TableAdapter.Update(inserted rows) first + ''' + _ + Private Function GetRealUpdatedRows(ByVal updatedRows() As Global.System.Data.DataRow, ByVal allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow)) As Global.System.Data.DataRow() + If ((updatedRows Is Nothing) _ + OrElse (updatedRows.Length < 1)) Then + Return updatedRows + End If + If ((allAddedRows Is Nothing) _ + OrElse (allAddedRows.Count < 1)) Then + Return updatedRows + End If + Dim realUpdatedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim i As Integer = 0 + Do While (i < updatedRows.Length) + Dim row As Global.System.Data.DataRow = updatedRows(i) + If (allAddedRows.Contains(row) = false) Then + realUpdatedRows.Add(row) + End If + i = (i + 1) + Loop + Return realUpdatedRows.ToArray + End Function + + ''' + '''Update all changes to the dataset. + ''' + _ + Public Overridable Function UpdateAll(ByVal dataSet As InventoryDataSet) As Integer + If (dataSet Is Nothing) Then + Throw New Global.System.ArgumentNullException("dataSet") + End If + If (dataSet.HasChanges = false) Then + Return 0 + End If + Dim workConnection As Global.System.Data.IDbConnection = Me.Connection + If (workConnection Is Nothing) Then + Throw New Global.System.ApplicationException("TableAdapterManager contains no connection information. Set each TableAdapterMana"& _ + "ger TableAdapter property to a valid TableAdapter instance.") + End If + Dim workConnOpened As Boolean = false + If ((workConnection.State And Global.System.Data.ConnectionState.Closed) _ + = Global.System.Data.ConnectionState.Closed) Then + workConnection.Open + workConnOpened = true + End If + Dim workTransaction As Global.System.Data.IDbTransaction = workConnection.BeginTransaction + If (workTransaction Is Nothing) Then + Throw New Global.System.ApplicationException("The transaction cannot begin. The current data connection does not support transa"& _ + "ctions or the current state is not allowing the transaction to begin.") + End If + Dim allChangedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim allAddedRows As Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) = New Global.System.Collections.Generic.List(Of Global.System.Data.DataRow) + Dim adaptersWithAcceptChangesDuringUpdate As Global.System.Collections.Generic.List(Of Global.System.Data.Common.DataAdapter) = New Global.System.Collections.Generic.List(Of Global.System.Data.Common.DataAdapter) + Dim revertConnections As Global.System.Collections.Generic.Dictionary(Of Object, Global.System.Data.IDbConnection) = New Global.System.Collections.Generic.Dictionary(Of Object, Global.System.Data.IDbConnection) + Dim result As Integer = 0 + Dim backupDataSet As Global.System.Data.DataSet = Nothing + If Me.BackupDataSetBeforeUpdate Then + backupDataSet = New Global.System.Data.DataSet + backupDataSet.Merge(dataSet) + End If + Try + '---- Prepare for update ----------- + ' + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + revertConnections.Add(Me._inventoryTableAdapter, Me._inventoryTableAdapter.Connection) + Me._inventoryTableAdapter.Connection = CType(workConnection,Global.System.Data.SqlClient.SqlConnection) + Me._inventoryTableAdapter.Transaction = CType(workTransaction,Global.System.Data.SqlClient.SqlTransaction) + If Me._inventoryTableAdapter.Adapter.AcceptChangesDuringUpdate Then + Me._inventoryTableAdapter.Adapter.AcceptChangesDuringUpdate = false + adaptersWithAcceptChangesDuringUpdate.Add(Me._inventoryTableAdapter.Adapter) + End If + End If + ' + '---- Perform updates ----------- + ' + If (Me.UpdateOrder = UpdateOrderOption.UpdateInsertDelete) Then + result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)) + result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows)) + Else + result = (result + Me.UpdateInsertedRows(dataSet, allAddedRows)) + result = (result + Me.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows)) + End If + result = (result + Me.UpdateDeletedRows(dataSet, allChangedRows)) + ' + '---- Commit updates ----------- + ' + workTransaction.Commit + If (0 < allAddedRows.Count) Then + Dim rows((allAddedRows.Count) - 1) As Global.System.Data.DataRow + allAddedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + i = (i + 1) + Loop + End If + If (0 < allChangedRows.Count) Then + Dim rows((allChangedRows.Count) - 1) As Global.System.Data.DataRow + allChangedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + i = (i + 1) + Loop + End If + Catch ex As Global.System.Exception + workTransaction.Rollback + '---- Restore the dataset ----------- + If Me.BackupDataSetBeforeUpdate Then + Global.System.Diagnostics.Debug.Assert((Not (backupDataSet) Is Nothing)) + dataSet.Clear + dataSet.Merge(backupDataSet) + Else + If (0 < allAddedRows.Count) Then + Dim rows((allAddedRows.Count) - 1) As Global.System.Data.DataRow + allAddedRows.CopyTo(rows) + Dim i As Integer = 0 + Do While (i < rows.Length) + Dim row As Global.System.Data.DataRow = rows(i) + row.AcceptChanges + row.SetAdded + i = (i + 1) + Loop + End If + End If + Throw ex + Finally + If workConnOpened Then + workConnection.Close + End If + If (Not (Me._inventoryTableAdapter) Is Nothing) Then + Me._inventoryTableAdapter.Connection = CType(revertConnections(Me._inventoryTableAdapter),Global.System.Data.SqlClient.SqlConnection) + Me._inventoryTableAdapter.Transaction = Nothing + End If + If (0 < adaptersWithAcceptChangesDuringUpdate.Count) Then + Dim adapters((adaptersWithAcceptChangesDuringUpdate.Count) - 1) As Global.System.Data.Common.DataAdapter + adaptersWithAcceptChangesDuringUpdate.CopyTo(adapters) + Dim i As Integer = 0 + Do While (i < adapters.Length) + Dim adapter As Global.System.Data.Common.DataAdapter = adapters(i) + adapter.AcceptChangesDuringUpdate = true + i = (i + 1) + Loop + End If + End Try + Return result + End Function + + _ + Protected Overridable Sub SortSelfReferenceRows(ByVal rows() As Global.System.Data.DataRow, ByVal relation As Global.System.Data.DataRelation, ByVal childFirst As Boolean) + Global.System.Array.Sort(Of Global.System.Data.DataRow)(rows, New SelfReferenceComparer(relation, childFirst)) + End Sub + + _ + Protected Overridable Function MatchTableAdapterConnection(ByVal inputConnection As Global.System.Data.IDbConnection) As Boolean + If (Not (Me._connection) Is Nothing) Then + Return true + End If + If ((Me.Connection Is Nothing) _ + OrElse (inputConnection Is Nothing)) Then + Return true + End If + If String.Equals(Me.Connection.ConnectionString, inputConnection.ConnectionString, Global.System.StringComparison.Ordinal) Then + Return true + End If + Return false + End Function + + ''' + '''Update Order Option + ''' + _ + Public Enum UpdateOrderOption + + InsertUpdateDelete = 0 + + UpdateInsertDelete = 1 + End Enum + + ''' + '''Used to sort self-referenced table's rows + ''' + _ + Private Class SelfReferenceComparer + Inherits Object + Implements Global.System.Collections.Generic.IComparer(Of Global.System.Data.DataRow) + + Private _relation As Global.System.Data.DataRelation + + Private _childFirst As Integer + + _ + Friend Sub New(ByVal relation As Global.System.Data.DataRelation, ByVal childFirst As Boolean) + MyBase.New + Me._relation = relation + If childFirst Then + Me._childFirst = -1 + Else + Me._childFirst = 1 + End If + End Sub + + _ + Private Function IsChildAndParent(ByVal child As Global.System.Data.DataRow, ByVal parent As Global.System.Data.DataRow) As Boolean + Global.System.Diagnostics.Debug.Assert((Not (child) Is Nothing)) + Global.System.Diagnostics.Debug.Assert((Not (parent) Is Nothing)) + Dim newParent As Global.System.Data.DataRow = child.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.[Default]) + + Do While ((Not (newParent) Is Nothing) _ + AndAlso ((Object.ReferenceEquals(newParent, child) = false) _ + AndAlso (Object.ReferenceEquals(newParent, parent) = false))) + newParent = newParent.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.[Default]) + + Loop + If (newParent Is Nothing) Then + newParent = child.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.Original) + Do While ((Not (newParent) Is Nothing) _ + AndAlso ((Object.ReferenceEquals(newParent, child) = false) _ + AndAlso (Object.ReferenceEquals(newParent, parent) = false))) + newParent = newParent.GetParentRow(Me._relation, Global.System.Data.DataRowVersion.Original) + + Loop + End If + If Object.ReferenceEquals(newParent, parent) Then + Return true + End If + Return false + End Function + + _ + Public Function Compare(ByVal row1 As Global.System.Data.DataRow, ByVal row2 As Global.System.Data.DataRow) As Integer Implements Global.System.Collections.Generic.IComparer(Of Global.System.Data.DataRow).Compare + If Object.ReferenceEquals(row1, row2) Then + Return 0 + End If + If (row1 Is Nothing) Then + Return -1 + End If + If (row2 Is Nothing) Then + Return 1 + End If + + 'Is row1 the child or grandchild of row2 + If Me.IsChildAndParent(row1, row2) Then + Return Me._childFirst + End If + + 'Is row2 the child or grandchild of row1 + If Me.IsChildAndParent(row2, row1) Then + Return (-1 * Me._childFirst) + End If + Return 0 + End Function + End Class + End Class +End Namespace diff --git a/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.vb b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.vb new file mode 100644 index 0000000..5a8647e --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.vb @@ -0,0 +1,2 @@ +Partial Class InventoryDataSet +End Class diff --git a/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsc b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsc new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsc @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsd b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsd new file mode 100644 index 0000000..7032eb4 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xsd @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + DELETE FROM [dbo].[Inventory] WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS NULL) OR ([PetName] = @Original_PetName))) + + + + + + + + + + + + INSERT INTO [dbo].[Inventory] ([CarID], [Make], [Color], [PetName]) VALUES (@CarID, @Make, @Color, @PetName); +SELECT CarID, Make, Color, PetName FROM Inventory WHERE (CarID = @CarID) + + + + + + + + + + + SELECT CarID, Make, Color, PetName FROM dbo.Inventory + + + + + + UPDATE [dbo].[Inventory] SET [CarID] = @CarID, [Make] = @Make, [Color] = @Color, [PetName] = @PetName WHERE (([CarID] = @Original_CarID) AND ([Make] = @Original_Make) AND ([Color] = @Original_Color) AND ((@IsNull_PetName = 1 AND [PetName] IS NULL) OR ([PetName] = @Original_PetName))); +SELECT CarID, Make, Color, PetName FROM Inventory WHERE (CarID = @CarID) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xss b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xss new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/InventoryDataSet.xss @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/MainForm.Designer.vb b/Code/Chapter 23/VisualDataGridViewApp/MainForm.Designer.vb new file mode 100644 index 0000000..8de1db8 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/MainForm.Designer.vb @@ -0,0 +1,253 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.Label1 = New System.Windows.Forms.Label + Me.DataGridView1 = New System.Windows.Forms.DataGridView + Me.InventoryDataSet = New VisualDataGridViewApp.InventoryDataSet + Me.InventoryBindingSource = New System.Windows.Forms.BindingSource(Me.components) + Me.InventoryTableAdapter = New VisualDataGridViewApp.InventoryDataSetTableAdapters.InventoryTableAdapter + Me.CarIDDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn + Me.MakeDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn + Me.ColorDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn + Me.PetNameDataGridViewTextBoxColumn = New System.Windows.Forms.DataGridViewTextBoxColumn + Me.btnUpdateInventory = New System.Windows.Forms.Button + Me.groupBox1 = New System.Windows.Forms.GroupBox + Me.btnAddRow = New System.Windows.Forms.Button + Me.txtMake = New System.Windows.Forms.TextBox + Me.txtPetName = New System.Windows.Forms.TextBox + Me.txtColor = New System.Windows.Forms.TextBox + Me.txtCarID = New System.Windows.Forms.TextBox + Me.label5 = New System.Windows.Forms.Label + Me.label4 = New System.Windows.Forms.Label + Me.label3 = New System.Windows.Forms.Label + Me.label2 = New System.Windows.Forms.Label + CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.InventoryDataSet, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.InventoryBindingSource, System.ComponentModel.ISupportInitialize).BeginInit() + Me.groupBox1.SuspendLayout() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(12, 9) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(218, 20) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "The AutoLot Inventory Viewer" + ' + 'DataGridView1 + ' + Me.DataGridView1.AutoGenerateColumns = False + Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.CarIDDataGridViewTextBoxColumn, Me.MakeDataGridViewTextBoxColumn, Me.ColorDataGridViewTextBoxColumn, Me.PetNameDataGridViewTextBoxColumn}) + Me.DataGridView1.DataSource = Me.InventoryBindingSource + Me.DataGridView1.Location = New System.Drawing.Point(16, 48) + Me.DataGridView1.Name = "DataGridView1" + Me.DataGridView1.Size = New System.Drawing.Size(476, 220) + Me.DataGridView1.TabIndex = 1 + ' + 'InventoryDataSet + ' + Me.InventoryDataSet.DataSetName = "InventoryDataSet" + Me.InventoryDataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema + ' + 'InventoryBindingSource + ' + Me.InventoryBindingSource.DataMember = "Inventory" + Me.InventoryBindingSource.DataSource = Me.InventoryDataSet + ' + 'InventoryTableAdapter + ' + Me.InventoryTableAdapter.ClearBeforeFill = True + ' + 'CarIDDataGridViewTextBoxColumn + ' + Me.CarIDDataGridViewTextBoxColumn.DataPropertyName = "CarID" + Me.CarIDDataGridViewTextBoxColumn.HeaderText = "CarID" + Me.CarIDDataGridViewTextBoxColumn.Name = "CarIDDataGridViewTextBoxColumn" + ' + 'MakeDataGridViewTextBoxColumn + ' + Me.MakeDataGridViewTextBoxColumn.DataPropertyName = "Make" + Me.MakeDataGridViewTextBoxColumn.HeaderText = "Make" + Me.MakeDataGridViewTextBoxColumn.Name = "MakeDataGridViewTextBoxColumn" + ' + 'ColorDataGridViewTextBoxColumn + ' + Me.ColorDataGridViewTextBoxColumn.DataPropertyName = "Color" + Me.ColorDataGridViewTextBoxColumn.HeaderText = "Color" + Me.ColorDataGridViewTextBoxColumn.Name = "ColorDataGridViewTextBoxColumn" + ' + 'PetNameDataGridViewTextBoxColumn + ' + Me.PetNameDataGridViewTextBoxColumn.DataPropertyName = "PetName" + Me.PetNameDataGridViewTextBoxColumn.HeaderText = "PetName" + Me.PetNameDataGridViewTextBoxColumn.Name = "PetNameDataGridViewTextBoxColumn" + ' + 'btnUpdateInventory + ' + Me.btnUpdateInventory.Location = New System.Drawing.Point(417, 283) + Me.btnUpdateInventory.Name = "btnUpdateInventory" + Me.btnUpdateInventory.Size = New System.Drawing.Size(75, 23) + Me.btnUpdateInventory.TabIndex = 2 + Me.btnUpdateInventory.Text = "Update!" + Me.btnUpdateInventory.UseVisualStyleBackColor = True + ' + 'groupBox1 + ' + Me.groupBox1.Controls.Add(Me.btnAddRow) + Me.groupBox1.Controls.Add(Me.txtMake) + Me.groupBox1.Controls.Add(Me.txtPetName) + Me.groupBox1.Controls.Add(Me.txtColor) + Me.groupBox1.Controls.Add(Me.txtCarID) + Me.groupBox1.Controls.Add(Me.label5) + Me.groupBox1.Controls.Add(Me.label4) + Me.groupBox1.Controls.Add(Me.label3) + Me.groupBox1.Controls.Add(Me.label2) + Me.groupBox1.Location = New System.Drawing.Point(16, 283) + Me.groupBox1.Name = "groupBox1" + Me.groupBox1.Size = New System.Drawing.Size(321, 161) + Me.groupBox1.TabIndex = 4 + Me.groupBox1.TabStop = False + Me.groupBox1.Text = "Manually Adding New Row" + ' + 'btnAddRow + ' + Me.btnAddRow.Location = New System.Drawing.Point(222, 122) + Me.btnAddRow.Name = "btnAddRow" + Me.btnAddRow.Size = New System.Drawing.Size(88, 23) + Me.btnAddRow.TabIndex = 4 + Me.btnAddRow.Text = "Add Row" + Me.btnAddRow.UseVisualStyleBackColor = True + ' + 'txtMake + ' + Me.txtMake.Location = New System.Drawing.Point(82, 58) + Me.txtMake.Name = "txtMake" + Me.txtMake.Size = New System.Drawing.Size(118, 20) + Me.txtMake.TabIndex = 1 + ' + 'txtPetName + ' + Me.txtPetName.Location = New System.Drawing.Point(82, 124) + Me.txtPetName.Name = "txtPetName" + Me.txtPetName.Size = New System.Drawing.Size(118, 20) + Me.txtPetName.TabIndex = 3 + ' + 'txtColor + ' + Me.txtColor.Location = New System.Drawing.Point(82, 91) + Me.txtColor.Name = "txtColor" + Me.txtColor.Size = New System.Drawing.Size(118, 20) + Me.txtColor.TabIndex = 2 + ' + 'txtCarID + ' + Me.txtCarID.Location = New System.Drawing.Point(82, 25) + Me.txtCarID.Name = "txtCarID" + Me.txtCarID.Size = New System.Drawing.Size(118, 20) + Me.txtCarID.TabIndex = 0 + ' + 'label5 + ' + Me.label5.AutoSize = True + Me.label5.Location = New System.Drawing.Point(12, 94) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(31, 13) + Me.label5.TabIndex = 3 + Me.label5.Text = "Color" + ' + 'label4 + ' + Me.label4.AutoSize = True + Me.label4.Location = New System.Drawing.Point(12, 127) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(51, 13) + Me.label4.TabIndex = 2 + Me.label4.Text = "PetName" + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(12, 61) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(34, 13) + Me.label3.TabIndex = 1 + Me.label3.Text = "Make" + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(12, 28) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(37, 13) + Me.label2.TabIndex = 0 + Me.label2.Text = "Car ID" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(504, 464) + Me.Controls.Add(Me.groupBox1) + Me.Controls.Add(Me.btnUpdateInventory) + Me.Controls.Add(Me.DataGridView1) + Me.Controls.Add(Me.Label1) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Inventory Viewer Redux" + CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.InventoryDataSet, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.InventoryBindingSource, System.ComponentModel.ISupportInitialize).EndInit() + Me.groupBox1.ResumeLayout(False) + Me.groupBox1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents DataGridView1 As System.Windows.Forms.DataGridView + Friend WithEvents InventoryDataSet As VisualDataGridViewApp.InventoryDataSet + Friend WithEvents InventoryBindingSource As System.Windows.Forms.BindingSource + Friend WithEvents InventoryTableAdapter As VisualDataGridViewApp.InventoryDataSetTableAdapters.InventoryTableAdapter + Friend WithEvents CarIDDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents MakeDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents ColorDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents PetNameDataGridViewTextBoxColumn As System.Windows.Forms.DataGridViewTextBoxColumn + Friend WithEvents btnUpdateInventory As System.Windows.Forms.Button + Private WithEvents groupBox1 As System.Windows.Forms.GroupBox + Private WithEvents btnAddRow As System.Windows.Forms.Button + Private WithEvents txtMake As System.Windows.Forms.TextBox + Private WithEvents txtPetName As System.Windows.Forms.TextBox + Private WithEvents txtColor As System.Windows.Forms.TextBox + Private WithEvents txtCarID As System.Windows.Forms.TextBox + Private WithEvents label5 As System.Windows.Forms.Label + Private WithEvents label4 As System.Windows.Forms.Label + Private WithEvents label3 As System.Windows.Forms.Label + Private WithEvents label2 As System.Windows.Forms.Label + +End Class diff --git a/Code/Chapter 23/VisualDataGridViewApp/MainForm.resx b/Code/Chapter 23/VisualDataGridViewApp/MainForm.resx new file mode 100644 index 0000000..3f39894 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/MainForm.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 163, 17 + + + 17, 17 + + + 163, 17 + + + 17, 17 + + + 345, 17 + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/MainForm.vb b/Code/Chapter 23/VisualDataGridViewApp/MainForm.vb new file mode 100644 index 0000000..ea5cbb5 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/MainForm.vb @@ -0,0 +1,49 @@ +Public Class MainForm + Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load + 'TODO: This line of code loads data into the 'InventoryDataSet.Inventory' table. You can move, or remove it, as needed. + Me.InventoryTableAdapter.Fill(Me.InventoryDataSet.Inventory) + End Sub + + Private Sub btnUpdateInventory_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnUpdateInventory.Click + ' This will push any changes within the Inventory table back to + ' the database for processing. + Me.InventoryTableAdapter.Update(Me.InventoryDataSet.Inventory) + + ' Get fresh copy for grid. + Me.InventoryTableAdapter.Fill(Me.InventoryDataSet.Inventory) + End Sub + +#Region "Add new row" + Private Sub btnAddRow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddRow.Click + ' Get data from widgets + Dim id As Integer = Integer.Parse(txtCarID.Text) + Dim make As String = txtMake.Text + Dim color As String = txtColor.Text + Dim petName As String = txtPetName.Text + + ' Use custom adapter to add row. + InventoryTableAdapter.Insert(id, make, color, petName) + + ' Refill table data. + Me.InventoryTableAdapter.Fill(Me.InventoryDataSet.Inventory) + End Sub + + 'Private Sub btnAddRow_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddRow.Click + ' ' Get new Row. + ' Dim newRow As InventoryDataSet.InventoryRow = InventoryDataSet.Inventory.NewInventoryRow() + ' newRow.CarID = Integer.Parse(txtCarID.Text) + ' newRow.Make = txtMake.Text + ' newRow.Color = txtColor.Text + ' newRow.PetName = txtPetName.Text + ' InventoryDataSet.Inventory.AddInventoryRow(newRow) + + ' ' Use custom adapter to add row. + ' InventoryTableAdapter.Update(InventoryDataSet.Inventory) + + ' ' Refill table data. + ' Me.InventoryTableAdapter.Fill(Me.InventoryDataSet.Inventory) + 'End Sub +#End Region + +End Class diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.Designer.vb b/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..9c9e3c1 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.VisualDataGridViewApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.myapp b/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/AssemblyInfo.vb b/Code/Chapter 23/VisualDataGridViewApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a858452 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.Designer.vb b/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7b93c66 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("VisualDataGridViewApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.resx b/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.Designer.vb b/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..459976d --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.Designer.vb @@ -0,0 +1,84 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property AutoLotConnectionString() As String + Get + Return CType(Me("AutoLotConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.VisualDataGridViewApp.My.MySettings + Get + Return Global.VisualDataGridViewApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.settings b/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.settings new file mode 100644 index 0000000..03c3afc --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True + + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.sln b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.sln new file mode 100644 index 0000000..c5b3417 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VisualDataGridViewApp", "VisualDataGridViewApp.vbproj", "{F109F023-1057-4C0B-91C5-342EB870E983}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F109F023-1057-4C0B-91C5-342EB870E983}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F109F023-1057-4C0B-91C5-342EB870E983}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F109F023-1057-4C0B-91C5-342EB870E983}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F109F023-1057-4C0B-91C5-342EB870E983}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.suo b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..9c8eb50f5109b1e98aea366bcd91a5470a7343ca GIT binary patch literal 23552 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 H;=lg^_;Q1@ literal 0 HcmV?d00001 diff --git a/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj new file mode 100644 index 0000000..90025a1 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj @@ -0,0 +1,144 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F109F023-1057-4C0B-91C5-342EB870E983} + WinExe + VisualDataGridViewApp.My.MyApplication + VisualDataGridViewApp + VisualDataGridViewApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + VisualDataGridViewApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + VisualDataGridViewApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + True + InventoryDataSet.xsd + + + InventoryDataSet.xsd + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + + InventoryDataSet.xsd + + + MSDataSetGenerator + InventoryDataSet.Designer.vb + Designer + + + InventoryDataSet.xsd + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj.user b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/VisualDataGridViewApp.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/Wizard Generated DB Objects.cd b/Code/Chapter 23/VisualDataGridViewApp/Wizard Generated DB Objects.cd new file mode 100644 index 0000000..52108b0 --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/Wizard Generated DB Objects.cd @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + AAAAAAAAAwAAAAJABAACQAAAAAgCQBgAAAAAAgEAFBA= + InventoryDataSet.vb + + + + + + BCAAAEAgECoAABAQAACCEAAGAAgAIIGIACAAAAAAAAA= + MainForm.vb + + + + + + EASAAGAAEAAAAAcAIAAAAAAAACEICAAAAAAAAAAABBA= + + + + + + AQAAACAAAABABAEBAAAAMAAgAAACgACAAAQABAAABAQ= + + + + + + AAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAQAABAAIAAABAABAAAgAAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAAAAAABEAAAAQAAAAAAAAAAAAAAAIA= + + + + \ No newline at end of file diff --git a/Code/Chapter 23/VisualDataGridViewApp/app.config b/Code/Chapter 23/VisualDataGridViewApp/app.config new file mode 100644 index 0000000..f72ae3b --- /dev/null +++ b/Code/Chapter 23/VisualDataGridViewApp/app.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/Car.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/Car.vb new file mode 100644 index 0000000..399a7b8 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/Car.vb @@ -0,0 +1,12 @@ +Class Car + ' Public for simplicity. + Public carPetName As String + Public carMake As String + Public carColor As String + + Public Sub New(ByVal petName As String, ByVal make As String, ByVal color As String) + carPetName = petName + carColor = color + carMake = make + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.Designer.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.Designer.vb new file mode 100644 index 0000000..4f75b13 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.Designer.vb @@ -0,0 +1,176 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.label2 = New System.Windows.Forms.Label + Me.btnDisplayMakes = New System.Windows.Forms.Button + Me.dataGridColtsView = New System.Windows.Forms.DataGridView + Me.txtMakeToView = New System.Windows.Forms.TextBox + Me.groupBox2 = New System.Windows.Forms.GroupBox + Me.groupBox1 = New System.Windows.Forms.GroupBox + Me.txtRowToRemove = New System.Windows.Forms.TextBox + Me.btnRemoveRow = New System.Windows.Forms.Button + Me.label1 = New System.Windows.Forms.Label + Me.carInventoryGridView = New System.Windows.Forms.DataGridView + Me.btnChangeBeemersToYugos = New System.Windows.Forms.Button + CType(Me.dataGridColtsView, System.ComponentModel.ISupportInitialize).BeginInit() + Me.groupBox2.SuspendLayout() + Me.groupBox1.SuspendLayout() + CType(Me.carInventoryGridView, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(26, 299) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(95, 13) + Me.label2.TabIndex = 13 + Me.label2.Text = "Here are the Colts:" + ' + 'btnDisplayMakes + ' + Me.btnDisplayMakes.Location = New System.Drawing.Point(6, 48) + Me.btnDisplayMakes.Name = "btnDisplayMakes" + Me.btnDisplayMakes.Size = New System.Drawing.Size(135, 23) + Me.btnDisplayMakes.TabIndex = 0 + Me.btnDisplayMakes.Text = "Display Makes" + Me.btnDisplayMakes.UseVisualStyleBackColor = True + ' + 'dataGridColtsView + ' + Me.dataGridColtsView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.dataGridColtsView.Location = New System.Drawing.Point(26, 325) + Me.dataGridColtsView.Name = "dataGridColtsView" + Me.dataGridColtsView.Size = New System.Drawing.Size(402, 95) + Me.dataGridColtsView.TabIndex = 12 + ' + 'txtMakeToView + ' + Me.txtMakeToView.Location = New System.Drawing.Point(6, 22) + Me.txtMakeToView.Name = "txtMakeToView" + Me.txtMakeToView.Size = New System.Drawing.Size(135, 20) + Me.txtMakeToView.TabIndex = 1 + ' + 'groupBox2 + ' + Me.groupBox2.Controls.Add(Me.txtMakeToView) + Me.groupBox2.Controls.Add(Me.btnDisplayMakes) + Me.groupBox2.Location = New System.Drawing.Point(251, 206) + Me.groupBox2.Name = "groupBox2" + Me.groupBox2.Size = New System.Drawing.Size(177, 85) + Me.groupBox2.TabIndex = 10 + Me.groupBox2.TabStop = False + Me.groupBox2.Text = "Enter make To view" + ' + 'groupBox1 + ' + Me.groupBox1.Controls.Add(Me.txtRowToRemove) + Me.groupBox1.Controls.Add(Me.btnRemoveRow) + Me.groupBox1.Location = New System.Drawing.Point(26, 206) + Me.groupBox1.Name = "groupBox1" + Me.groupBox1.Size = New System.Drawing.Size(177, 85) + Me.groupBox1.TabIndex = 9 + Me.groupBox1.TabStop = False + Me.groupBox1.Text = "Enter row number to delete" + ' + 'txtRowToRemove + ' + Me.txtRowToRemove.Location = New System.Drawing.Point(6, 22) + Me.txtRowToRemove.Name = "txtRowToRemove" + Me.txtRowToRemove.Size = New System.Drawing.Size(135, 20) + Me.txtRowToRemove.TabIndex = 1 + ' + 'btnRemoveRow + ' + Me.btnRemoveRow.Location = New System.Drawing.Point(6, 48) + Me.btnRemoveRow.Name = "btnRemoveRow" + Me.btnRemoveRow.Size = New System.Drawing.Size(135, 23) + Me.btnRemoveRow.TabIndex = 0 + Me.btnRemoveRow.Text = "Remove" + Me.btnRemoveRow.UseVisualStyleBackColor = True + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(26, 14) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(141, 13) + Me.label1.TabIndex = 8 + Me.label1.Text = "The Current List of Inventory" + ' + 'carInventoryGridView + ' + Me.carInventoryGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.carInventoryGridView.Location = New System.Drawing.Point(26, 50) + Me.carInventoryGridView.Name = "carInventoryGridView" + Me.carInventoryGridView.Size = New System.Drawing.Size(402, 135) + Me.carInventoryGridView.TabIndex = 7 + ' + 'btnChangeBeemersToYugos + ' + Me.btnChangeBeemersToYugos.Location = New System.Drawing.Point(251, 14) + Me.btnChangeBeemersToYugos.Name = "btnChangeBeemersToYugos" + Me.btnChangeBeemersToYugos.Size = New System.Drawing.Size(177, 23) + Me.btnChangeBeemersToYugos.TabIndex = 14 + Me.btnChangeBeemersToYugos.Text = "Change all BMWs to Yugos" + Me.btnChangeBeemersToYugos.UseVisualStyleBackColor = True + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(458, 443) + Me.Controls.Add(Me.btnChangeBeemersToYugos) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.dataGridColtsView) + Me.Controls.Add(Me.groupBox2) + Me.Controls.Add(Me.groupBox1) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.carInventoryGridView) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "DataTable Viewer" + CType(Me.dataGridColtsView, System.ComponentModel.ISupportInitialize).EndInit() + Me.groupBox2.ResumeLayout(False) + Me.groupBox2.PerformLayout() + Me.groupBox1.ResumeLayout(False) + Me.groupBox1.PerformLayout() + CType(Me.carInventoryGridView, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents label2 As System.Windows.Forms.Label + Private WithEvents btnDisplayMakes As System.Windows.Forms.Button + Private WithEvents dataGridColtsView As System.Windows.Forms.DataGridView + Private WithEvents txtMakeToView As System.Windows.Forms.TextBox + Private WithEvents groupBox2 As System.Windows.Forms.GroupBox + Private WithEvents groupBox1 As System.Windows.Forms.GroupBox + Private WithEvents txtRowToRemove As System.Windows.Forms.TextBox + Private WithEvents btnRemoveRow As System.Windows.Forms.Button + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents carInventoryGridView As System.Windows.Forms.DataGridView + Friend WithEvents btnChangeBeemersToYugos As System.Windows.Forms.Button + +End Class diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.resx b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.vb new file mode 100644 index 0000000..b9ddd1f --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/MainForm.vb @@ -0,0 +1,157 @@ +Option Strict On +Option Explicit On + +Public Class MainForm + ' A collection of Car objects. + Private listCars As New List(Of Car)() + + ' View of the DataTable. + Private coltsOnlyView As DataView + + ' Our DataTable. + Private inventoryTable As New DataTable("Inventory") + + Public Sub New() + InitializeComponent() + + ' Fill the list with some cars. + listCars.Add(New Car("Chucky", "BMW", "Green")) + listCars.Add(New Car("Tiny", "Yugo", "White")) + listCars.Add(New Car("Ami", "Jeep", "Tan")) + listCars.Add(New Car("Pain Inducer", "Caravan", "Pink")) + listCars.Add(New Car("Fred", "BMW", "Pea Soup Green")) + listCars.Add(New Car("Sidd", "BMW", "Black")) + listCars.Add(New Car("Mel", "Firebird", "Red")) + listCars.Add(New Car("Sarah", "Colt", "Black")) + + ' Make a data table. + CreateDataTable() + + ' Make a view. + CreateDataView() + End Sub + +#Region "Create the DataTable object and bind to grid." + Private Sub CreateDataTable() + ' Create table schema + Dim carMakeColumn As New DataColumn("Make", GetType(String)) + Dim carColorColumn As New DataColumn("Color", GetType(String)) + Dim carPetNameColumn As New DataColumn("PetName", GetType(String)) + carPetNameColumn.Caption = "Pet Name" + inventoryTable.Columns.AddRange(New DataColumn() {carMakeColumn, carColorColumn, carPetNameColumn}) + + ' Iterate over the array list to make rows. + For Each c As Car In listCars + Dim newRow As DataRow = inventoryTable.NewRow() + newRow("Make") = c.carMake + newRow("Color") = c.carColor + newRow("PetName") = c.carPetName + inventoryTable.Rows.Add(newRow) + Next + + ' Bind the DataTable to the carInventoryGridView. + carInventoryGridView.DataSource = inventoryTable + End Sub +#End Region + +#Region "Handler for Remove Button's Click event." + ' Remove this row from the DataRowCollection. + Private Sub btnRemoveRow_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnRemoveRow.Click + Try + inventoryTable.Rows((Integer.Parse(txtRowToRemove.Text))).Delete() + inventoryTable.AcceptChanges() + Catch ex As Exception + MessageBox.Show(ex.Message) + End Try + End Sub +#End Region + +#Region "Handler / helper function for filtering logic" + Private Sub btnDisplayMakes_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDisplayMakes.Click + ' Build a filter based on user input. + Dim filterStr As String = String.Format("Make= '{0}'", txtMakeToView.Text) + + ' Find all rows matching the filter. + Dim makes As DataRow() = inventoryTable.Select(filterStr) + + ' Show what we got! + If makes.Length = 0 Then + MessageBox.Show("Sorry, no cars...", "Selection error!") + Else + Dim strMake As String = String.Empty + For i As Integer = 0 To makes.Length - 1 + Dim temp As DataRow = makes(i) + strMake &= temp("PetName").ToString() & Chr(10) + Next + MessageBox.Show(strMake, String.Format("{0} type(s):", txtMakeToView.Text)) + End If + End Sub +#End Region + +#Region "Change BMWs to Yugos (oh, the horror...)" + Private Sub btnChangeBeemersToYugos_Click(ByVal sender As Object, _ + ByVal e As EventArgs) Handles btnChangeBeemersToYugos.Click + ' Make sure user has not lost his or her mind. + If DialogResult.Yes = MessageBox.Show("Are you sure?? BMWs are much nicer than Yugos!", _ + "Please Confirm!", MessageBoxButtons.YesNo) Then + ' Build a filter. + Dim filterStr As String = "Make='BMW'" + + ' Find all rows matching the filter. + Dim makes As DataRow() = inventoryTable.Select(filterStr) + For i As Integer = 0 To makes.Length - 1 + + ' Change all Beemers to Yugos! + makes(i)("Make") = "Yugo" + Next + End If + End Sub +#End Region + +#Region "Create our view object." + Private Sub CreateDataView() + ' Set the table that is used to construct this view. + coltsOnlyView = New DataView(inventoryTable) + + ' Now configure the views using a filter. + coltsOnlyView.RowFilter = "Make = 'Colt'" + + ' Bind to the new grid. + dataGridColtsView.DataSource = coltsOnlyView + End Sub +#End Region + +#Region "car ID > 5 (not called, but here for example...)" + Private Sub ShowCarsWithIdGreaterThanFive() + ' Now show the pet names of all cars with ID greater than 5. + ' (Assuming you did have an ID column!) + Dim properIDs As DataRow() + Dim newFilterStr As String = "ID > 5" + properIDs = inventoryTable.Select(newFilterStr) + + Dim strIDs As String = String.Empty + For i As Integer = 0 To properIDs.Length - 1 + Dim temp As DataRow = properIDs(i) + strIDs &= temp("PetName").ToString() & " is ID " & temp("ID").ToString() & Chr(10) + Next + MessageBox.Show(strIDs, "Pet names of cars where ID > 5") + End Sub +#End Region + +#Region "This is just to see the row numbers" + Private Sub carInventoryGridView_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles carInventoryGridView.RowPostPaint + ' This extra code will simply make it easier to visualize the # of the rows. + Using b As New SolidBrush(Color.Black) + e.Graphics.DrawString((e.RowIndex).ToString(), e.InheritedRowStyle.Font, b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 4) + End Using + End Sub + + Private Sub dataGridColtsView_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles dataGridColtsView.RowPostPaint + ' A more funky font. + Using b As New SolidBrush(Color.Green) + e.Graphics.DrawString((e.RowIndex).ToString(), New Font("Times New Roman", 11, FontStyle.Italic Or FontStyle.Bold), b, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 4) + End Using + End Sub +#End Region + +End Class diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.Designer.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.Designer.vb new file mode 100644 index 0000000..7ce2ce5 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.WindowsFormsDataTableViewer.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.myapp b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/AssemblyInfo.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4918e3b --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.Designer.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.Designer.vb new file mode 100644 index 0000000..9259d30 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowsFormsDataTableViewer.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.resx b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.Designer.vb b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.Designer.vb new file mode 100644 index 0000000..510f393 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WindowsFormsDataTableViewer.My.MySettings + Get + Return Global.WindowsFormsDataTableViewer.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.settings b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.sln b/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.sln new file mode 100644 index 0000000..3fd195a --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFormsDataTableViewer", "WindowsFormsDataTableViewer.vbproj", "{DDF81A37-DFB5-4903-BB6D-C16F9C37472B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DDF81A37-DFB5-4903-BB6D-C16F9C37472B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DDF81A37-DFB5-4903-BB6D-C16F9C37472B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DDF81A37-DFB5-4903-BB6D-C16F9C37472B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DDF81A37-DFB5-4903-BB6D-C16F9C37472B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.suo b/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.suo new file mode 100644 index 0000000000000000000000000000000000000000..0a4398012c644518098f2e2bce71d7cd9665fb79 GIT binary patch literal 18432 zcmeHOTWlOx89t7akWxzM1w%s`rb!xFk}SR@cH)qBch+&!`i9qWs%lZR-W_i?S?{{D z>o`#o36S6g^_e^r(Mm-^DMAVo5)!DQeL&#>rQ!vt2ti*E5)$PJRYlyz-FP=_>EQH9@8?2(b+p zykA~fSy6>T;POFgBME#8S|4-z@CoE3oqhfpz%IZ;fX@OR27C_i2;lR8-2kY7cobj& z9tV68&;|Gs;LCuo0G_{!fUb`0vGaH?Df{i{k1+iOOkEyC@2flTIhawhrn(#{%il<$k%_ zUN(n62FwY7RcfC2o8^B8-X7=RMABoB`F7l&1aSQ8ay|a_eXa4&uA~fTKUj}8K-Xu^ z@lSLd|Fi>o{2RD_8bF)CdIz2S5c01%*UusUI^Zzi2;e9n1o#G^8_)yj1@r;>0mlHx z0RsRx4MVs;1^A{@{yg#sAPhJIFafNu(@4d=F5hbTvD~${?qvTF`R%QN-o5{Q=T)%X zRQiue4H4p3f9pK^oB8+hZw!nao@IxxQ|bU7+LPDJlku@@MkJrVT!_y^j6^PF6fasv zXnc6um`r4gb9sB-=(AJCa4K%*Q&!x(m{=%Uw$a-cKcC5^@=Jv?s8Wa~iizpOY}T5| zSWA}8Mknq3B`aBsPg#ZhqMft~A=@fQGqv;7={FUlE6dEO*`pYtv=9?w0pm0$rtv?I z>pW~n0+10|*w_hJyE$BCP{V?i;iygsjzA`QTiWB4tjAGrqgDd#R3`Gj2I=P=*Fi)S zLtzj@DvaSYfT70w2!_;A46PFwZhg3l;CCEPj$+8rc%8u$Q`YatJH2>%Q``{eC1WWt zy#!&Lk<8EIN;5hQW@f>@C1z05LM;m{hQt+=F5rqT;f6@U9L2%(HDREfj_NYnh|5|A zTA+Xo2@xi+t9j<`|Ihl-mqfnGt z!~kh@Y8VPf)ifdfbI3)@*eygomiQi8Xg7K1A&pBIGG)26-UnAPfU+2zTSE$4g^z9M z4@PdSjY!68t-To%v^wfP3=_Qo-N-;YXo54aLpkx1)RYM^4hM5qj3Bn#@6yBlh!>-< zjuDJaKBJjE0$VwSaciPnmt2r|rh$w8nr+mhmn}}hzlYJv8F=O?yvh2?4k#l zBJZm2ono1t$G;l&=iuDvhUntRCEcI}u34HxnUaEbp>g2Pqu#u9IcYo}lk(wP1;89y zh)efcfW4x3U>vasZ$RnA;YvbqDXbAI&2KEox9H%hly*qAo(HurlvjbM97tRtFy5Az zVz-k&?d1EN{D6~pJ9)p8A9V6(ocxfJtJZ`#jSD3oZ@<*yHw0avKa8V)7;Vi%a!cUW zM&Q7(p$|MC!xf$X9G)*iDn*nnNg4LR9n*#9a5skoA+()-y~xS)*5Eq^UW@oq zf73o(M~6qxvd1S%oGS^Y9Y1A2`?)ee$PJ0JHyO)wzKu@+N9f=Yhn?q(g z0;7hj1p%c6T)U=RbC9o!P&o>!7HR{qgcj`^Wvx$~sDG`II{zl}|IU2aGE@1EWt!B4=Ihh*VqZkY{!l!Mn5@N%;o% zQoXI$*OS_`Y6;Y)m3E)@Ud;@&wPIZ?{#9VET{nbTHLVG~l%|@y#%`+F9(TsvWg$`7 zN4ifoyKk)42kkxSF`3BkR`6Eb$ME)<_H;pfo?99l>s6|IO!MKUar5|N?xa@Az1n-b zY2OH6Svktx^n}5|`uR?;&DOC*Birt#ceDBWX6(M3k5*%KZp0O^I!13npQYCzbvf6* z{L(?3KcL6pjwScT{p#vxq+6dA@y;U|tGd@_^c(ea!#V%J^F~4ObDv+gI0Jms@P+h- z++w_n@kfuwjXlo08m0Zf&+|^~x1jjBXu92LSouQk-X+lsj2V&FUJtR_(A#Ba;_ zZ(6*J>qe)Mh@a#$mz4Xfjbu-5pnnqgQw|L*Ym{g|DKn-@ z{1MQ=o&L+1v*jTV_JbcC&w_t?IqFnU`E%^O3t*xe{1VV^t1+aVNsl9S*ZM!(u>ndB zesh`XINtEY@dhkNd7s5_?X#Fz^GE^<_hkymlgNem&N^VFPG>RupOZK>Zr)ewAJ;Hw z_jn{i&k8_b-E;_=M}2+-5LEx@E42Nu#Lrc*9ISxbF4aYj2f#1Szj1FqD1MHYE@$Ve zK7Ov2&?ER;K=Q9`Pf+}R_Gb*Tp9fZ+!}QMhYD?ir3;5})rk&{G?2gXu*o<9S`N=kE+F3gI?GH=T7;#>2 zE8SzaRIORskOlXM%d61d$V|rsYW=Y6k#PQWmHMAYA1szuCfzzeiE+Sa(9aTeJL8}H z2OWQm*Jy*7qQFrPzmA3VoKd~u{SP_(^BjCo{ESt#-=dwP25KIaoaexGTE=A@AIc7U z@#;H_{|?S~ICBh&|4G!n;-~;)Cu-0*@*e=0|M8vv$39;E_X>p5@cbY79s{M^N6$#l z$Nfn9zlG8s5l`KALQX;q$uqiZdDM_|zNHGhJbB6Zl31CB*=Jb^PXXSagMzrwE zNEl;}dUFN5n4mo^sof=`iTW)MVGl|FV&dS#pN0>={@#msKD>SJ@t>aGJu2)!ycB-! z)}@z!_UAXhJGK1l+h`OiCI;u8cz^l*eWP#xIQ5Gk?fdvdy_y2rTYbK72%0efFd^Y? zM0LH`%epDPWiWnDw%I||@`)sl|JxfD{m0PvJR41o)>c;SrNtfVq4!7C2^BTZxw~QX zy1i5IW6j*9tvunt69CE!Y^?MrK*uG}M>$ve_!%5VZj`wG!P9~K3LvQeIe@w|PQxbp zp0=zY=TJPYRY`?Yu};SMKk;&hB`AJ({H>!L#zAVAl=E-f@hIHQ^-si4e@fg;{xj&u~R8d0Xe%CbZMgMaR zh2AWv{5h&f1Cw57)$6Y@tUPh{M-NWPH0ps?_~)L1o`2V~zGI*w1qx`Hd$5bD>=ilP zIP2@@EoPsdk=={#woz8iYC?R<&*#Gk;|mrUM|T>QWI@P1)&uxbPp z1lO||U$Ni$@0VV=N6l|NcdgZPdJ86=iija^ytY0CZ?it<9yJI0 zl#JdxZhTrrbH!6DWr&%>_>xYt+tiW+ky(vd!S!>sGm%f0TKRE?{`1{>2)ww2qZTo`aXT0%Ao%UKOZWezl LIQ-sO4gUWFV^0xp literal 0 HcmV?d00001 diff --git a/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.vbproj b/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.vbproj new file mode 100644 index 0000000..921130e --- /dev/null +++ b/Code/Chapter 23/WindowsFormsDataTableViewer/WindowsFormsDataTableViewer.vbproj @@ -0,0 +1,124 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DDF81A37-DFB5-4903-BB6D-C16F9C37472B} + WinExe + WindowsFormsDataTableViewer.My.MyApplication + WindowsFormsDataTableViewer + WindowsFormsDataTableViewer + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + WindowsFormsDataTableViewer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + WindowsFormsDataTableViewer.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.Designer.vb b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.Designer.vb new file mode 100644 index 0000000..748153c --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.Designer.vb @@ -0,0 +1,76 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.btnUpdateInventory = New System.Windows.Forms.Button + Me.label1 = New System.Windows.Forms.Label + Me.inventoryGrid = New System.Windows.Forms.DataGridView + CType(Me.inventoryGrid, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'btnUpdateInventory + ' + Me.btnUpdateInventory.Location = New System.Drawing.Point(12, 363) + Me.btnUpdateInventory.Name = "btnUpdateInventory" + Me.btnUpdateInventory.Size = New System.Drawing.Size(93, 23) + Me.btnUpdateInventory.TabIndex = 5 + Me.btnUpdateInventory.Text = "Update!" + Me.btnUpdateInventory.UseVisualStyleBackColor = True + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(11, 19) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(366, 13) + Me.label1.TabIndex = 4 + Me.label1.Text = "Make Changes to the Grid and Click the Update Button to Process Changes" + ' + 'inventoryGrid + ' + Me.inventoryGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize + Me.inventoryGrid.Location = New System.Drawing.Point(12, 47) + Me.inventoryGrid.Name = "inventoryGrid" + Me.inventoryGrid.Size = New System.Drawing.Size(414, 298) + Me.inventoryGrid.TabIndex = 3 + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(436, 405) + Me.Controls.Add(Me.btnUpdateInventory) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.inventoryGrid) + Me.Name = "MainForm" + Me.Text = "Inventory GUI" + CType(Me.inventoryGrid, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents btnUpdateInventory As System.Windows.Forms.Button + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents inventoryGrid As System.Windows.Forms.DataGridView + +End Class diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.resx b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.vb b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.vb new file mode 100644 index 0000000..e894424 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/MainForm.vb @@ -0,0 +1,29 @@ +Imports AutoLotDisconnectedLayer +Imports System.Configuration + +Public Class MainForm + Private dal As InventoryDALDisLayer = Nothing + + Sub New() + + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + ' Assume we have an App.config file + ' storing the connection string. + Dim cnStr As String = ConfigurationManager.ConnectionStrings("AutoLotSqlProvider").ConnectionString + + ' Create our data access object. + dal = New InventoryDALDisLayer(cnStr) + + ' Fill up our grid! + inventoryGrid.DataSource = dal.GetAllInventory() + End Sub + + Private Sub btnUpdateInventory_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdateInventory.Click + Dim changedDT As DataTable = DirectCast(inventoryGrid.DataSource, DataTable) + ' Commit our changes. + dal.UpdateInventory(changedDT) + End Sub +End Class diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.Designer.vb b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.Designer.vb new file mode 100644 index 0000000..c107a78 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.WindowsFormsInventoryUI.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.myapp b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/AssemblyInfo.vb b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5d3e480 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.Designer.vb b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.Designer.vb new file mode 100644 index 0000000..877d4ca --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowsFormsInventoryUI.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.resx b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.Designer.vb b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.Designer.vb new file mode 100644 index 0000000..313178e --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WindowsFormsInventoryUI.My.MySettings + Get + Return Global.WindowsFormsInventoryUI.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.settings b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.sln b/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.sln new file mode 100644 index 0000000..0a17c8d --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFormsInventoryUI", "WindowsFormsInventoryUI.vbproj", "{2F160F3F-920C-485A-85FA-078B3167BFC5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2F160F3F-920C-485A-85FA-078B3167BFC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F160F3F-920C-485A-85FA-078B3167BFC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F160F3F-920C-485A-85FA-078B3167BFC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F160F3F-920C-485A-85FA-078B3167BFC5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.suo b/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.suo new file mode 100644 index 0000000000000000000000000000000000000000..6b822e52c3ea4b097df68a734958727849280853 GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.vbproj b/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.vbproj new file mode 100644 index 0000000..b94f923 --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/WindowsFormsInventoryUI.vbproj @@ -0,0 +1,129 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2F160F3F-920C-485A-85FA-078B3167BFC5} + WinExe + WindowsFormsInventoryUI.My.MyApplication + WindowsFormsInventoryUI + WindowsFormsInventoryUI + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + WindowsFormsInventoryUI.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + WindowsFormsInventoryUI.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\AutoLotDAL (Part 2)\bin\Debug\AutoLotDAL.dll + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 23/WindowsFormsInventoryUI/app.config b/Code/Chapter 23/WindowsFormsInventoryUI/app.config new file mode 100644 index 0000000..4e833eb --- /dev/null +++ b/Code/Chapter 23/WindowsFormsInventoryUI/app.config @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.sln b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.sln new file mode 100644 index 0000000..99d7e16 --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithLinqToXml", "FunWithLinqToXml.vbproj", "{864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.suo b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.suo new file mode 100644 index 0000000000000000000000000000000000000000..f394ff2332e03497d94c9394f2451c026b7f4725 GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj new file mode 100644 index 0000000..c8abdf9 --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {864CD281-CCF0-4EB8-AA24-A79C0B0FEE2C} + Exe + FunWithLinqToXml.Program + FunWithLinqToXml + FunWithLinqToXml + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + FunWithLinqToXml.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithLinqToXml.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj.user b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/FunWithLinqToXml.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Application.Designer.vb b/Code/Chapter 24/FunWithLinqToXml/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Application.myapp b/Code/Chapter 24/FunWithLinqToXml/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/AssemblyInfo.vb b/Code/Chapter 24/FunWithLinqToXml/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..077531b --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.Designer.vb b/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.Designer.vb new file mode 100644 index 0000000..ace40d3 --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithLinqToXml.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.resx b/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.Designer.vb b/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5fc5e3a --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithLinqToXml.My.MySettings + Get + Return Global.FunWithLinqToXml.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.settings b/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/FunWithLinqToXml/Program.vb b/Code/Chapter 24/FunWithLinqToXml/Program.vb new file mode 100644 index 0000000..f0a1871 --- /dev/null +++ b/Code/Chapter 24/FunWithLinqToXml/Program.vb @@ -0,0 +1,175 @@ +' Simple helper class to populate +' a List(Of T). +Class Car + Public PetName As String + Public ID As Integer +End Class + +' Comment / uncomment method calls to test. +Module Program + Sub Main() + Console.WriteLine("*****Fun with LINQ to XML*****") + 'Console.WriteLine() + 'CreateXmlElementWithObjectModel() + + 'Console.WriteLine() + 'CreateXmlElementWithXmlLiteral() + + 'Console.WriteLine() + 'CreateFunctionalXmlDoc() + + 'Console.WriteLine() + CreateFunctionalXmlDocWithLiteral() + + CreateXmlDocFromArray() + Console.WriteLine() + + LoadExistingXml() + Console.ReadLine() + End Sub + +#Region "Create a single XML element" + Sub CreateXmlElementWithXmlLiteral() + Dim inventory As XElement = _ + + + Green + BMW + Stan + + + + ' Call ToString() on our XElement. + Console.WriteLine(inventory) + End Sub + + Sub CreateXmlElementWithObjectModel() + ' A "functional" approach to build an + ' XML element in memory. + Dim inventory As XElement = _ + New XElement("Inventory", _ + New XElement("Car", New XAttribute("ID", "1"), _ + New XElement("Color", "Green"), _ + New XElement("Make", "BMW"), _ + New XElement("PetName", "Stan") _ + ) _ + ) + ' Call ToString() on our XElement. + Console.WriteLine(inventory) + End Sub +#End Region + +#Region "Create XML doc" + Sub CreateFunctionalXmlDoc() + ' Create an in-memory XML document. + Dim inventoryDoc As XDocument = _ + New XDocument( _ + New XDeclaration("1.0", "utf-8", "yes"), _ + New XComment("Current Inventory of AutoLot"), _ + New XElement("Inventory", _ + New XElement("Car", New XAttribute("ID", "1"), _ + New XElement("Color", "Green"), _ + New XElement("Make", "BMW"), _ + New XElement("PetName", "Stan") _ + ), _ + New XElement("Car", New XAttribute("ID", "2"), _ + New XElement("Color", "Pink"), _ + New XElement("Make", "Yugo"), _ + New XElement("PetName", "Melvin") _ + ) _ + ) _ + ) + ' Display the document and save to disk. + Console.WriteLine(inventoryDoc) + inventoryDoc.Save("SimpleInventory.xml") + End Sub + + Sub CreateFunctionalXmlDocWithLiteral() + ' Create an in-memory XML document. + Dim inventoryDoc As XDocument = _ + + + + + Green + BMW + Stan + + + Pink + Yugo + Melvin + + + + ' Display the document and save to disk. + Console.WriteLine(inventoryDoc) + inventoryDoc.Save("SimpleInventory.xml") + End Sub +#End Region + +#Region "Create XML doc from array" + Sub CreateXmlDocFromArray() + ' Create an List of Car types. + Dim data As New List(Of Car) + data.Add(New Car With {.PetName = "Melvin", .ID = 10}) + data.Add(New Car With {.PetName = "Pat", .ID = 11}) + data.Add(New Car With {.PetName = "Danny", .ID = 12}) + data.Add(New Car With {.PetName = "Clunker", .ID = 13}) + + ' Now enumerate over the array to build + ' an XElement. + Dim vehicles As XElement = _ + New XElement("Inventory", _ + From c In data _ + Select New XElement("Car", _ + New XAttribute("ID", c.ID), _ + New XElement("PetName", c.PetName) _ + ) _ + ) + Console.WriteLine(vehicles) + End Sub + + Sub CreateXmlDocFromArrayUsingLiteral() + ' Create an List of Car types. + Dim data As New List(Of Car) + data.Add(New Car With {.PetName = "Melvin", .ID = 10}) + data.Add(New Car With {.PetName = "Pat", .ID = 11}) + data.Add(New Car With {.PetName = "Danny", .ID = 12}) + data.Add(New Car With {.PetName = "Clunker", .ID = 13}) + + Dim vehicles As XElement = _ + + <%= From c In data _ + Select > + <%= c.PetName %> + %> + + + Console.WriteLine(vehicles) + End Sub + +#End Region + +#Region "XML from Strings and files" + Sub LoadExistingXml() + + ' Build an XElement from string. + Dim myElement As String = _ + "" & _ + "Yellow" & _ + "Yugo" & _ + "" + + Dim newElement As XElement = XElement.Parse(myElement) + Console.WriteLine(newElement) + Console.WriteLine() + + ' Load the SimpleInventory.xml file. + Dim myDoc As XDocument = XDocument.Load("SimpleInventory.xml") + Console.WriteLine(myDoc) + End Sub + +#End Region + +End Module diff --git a/Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.sln b/Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.sln new file mode 100644 index 0000000..c497a7c --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqOverDataSet", "LinqOverDataSet.vbproj", "{8E47E211-2697-45A8-963A-98CFA33CFDFC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8E47E211-2697-45A8-963A-98CFA33CFDFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8E47E211-2697-45A8-963A-98CFA33CFDFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8E47E211-2697-45A8-963A-98CFA33CFDFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8E47E211-2697-45A8-963A-98CFA33CFDFC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.suo b/Code/Chapter 24/LinqOverDataSet/LinqOverDataSet.suo new file mode 100644 index 0000000000000000000000000000000000000000..37c39102eade947717457f48d689b72a96fae9ea GIT binary patch literal 15872 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {8E47E211-2697-45A8-963A-98CFA33CFDFC} + Exe + LinqOverDataSet.Program + LinqOverDataSet + LinqOverDataSet + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqOverDataSet.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqOverDataSet.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\..\Chapter 23\AutoLotDAL (Part 3)\bin\Debug\AutoLotDAL.dll + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Application.Designer.vb b/Code/Chapter 24/LinqOverDataSet/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Application.myapp b/Code/Chapter 24/LinqOverDataSet/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/AssemblyInfo.vb b/Code/Chapter 24/LinqOverDataSet/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..89814bc --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Resources.Designer.vb b/Code/Chapter 24/LinqOverDataSet/My Project/Resources.Designer.vb new file mode 100644 index 0000000..322e4b1 --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqOverDataSet.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Resources.resx b/Code/Chapter 24/LinqOverDataSet/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Settings.Designer.vb b/Code/Chapter 24/LinqOverDataSet/My Project/Settings.Designer.vb new file mode 100644 index 0000000..85b1a6e --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqOverDataSet.My.MySettings + Get + Return Global.LinqOverDataSet.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqOverDataSet/My Project/Settings.settings b/Code/Chapter 24/LinqOverDataSet/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/LinqOverDataSet/Program.vb b/Code/Chapter 24/LinqOverDataSet/Program.vb new file mode 100644 index 0000000..c81a7b1 --- /dev/null +++ b/Code/Chapter 24/LinqOverDataSet/Program.vb @@ -0,0 +1,81 @@ +Option Strict On +Option Explicit On + +Imports AutoLotDisconnectedLayer + +Module Program + Sub Main() + Console.WriteLine("***** LINQ over DataSet *****" & vbLf) + ' Get a DataTable containing the current Inventory + ' of the AutoLot database. + Dim dal As New InventoryDALDisLayer _ + ("Data Source=(local)\SQLEXPRESS;Initial Catalog=AutoLot;" & _ + "Integrated Security=True") + Dim data As DataTable = dal.GetAllInventory() + + ' Invoke the methods that follow here! + PrintAllCarIDs(data) + Console.WriteLine() + + ApplyLinqQuery(data) + Console.WriteLine() + + BuildDataTableFromQuery(data) + Console.WriteLine() + + Console.ReadLine() + End Sub + +#Region "Print all car IDs" + Sub PrintAllCarIDs(ByVal data As DataTable) + Console.WriteLine("All Car IDs:") + + ' Get enumerable version of DataTable. + Dim enumData As EnumerableRowCollection = data.AsEnumerable() + + ' Print the car ID values. + For Each r As DataRow In enumData + Console.WriteLine("Car ID = {0}", r("CarID")) + Next + End Sub +#End Region + +#Region "Apply LINQ query" + Sub ApplyLinqQuery(ByVal data As DataTable) + ' Project a new result set containing + ' the ID/color for rows with a CarID > 5 + Dim cars = From car In data Where _ + car.Field(Of Integer)("CarID") > 5 _ + Select New With _ + { _ + .ID = car.Field(Of Integer)("CarID"), _ + .Color = car.Field(Of String)("Color") _ + } + + Console.WriteLine("Cars with ID greater than 5:") + For Each item In cars + Console.WriteLine("-> CarID = {0} is {1}", item.ID, item.Color) + Next + End Sub +#End Region + +#Region "DataTable from Query" + Sub BuildDataTableFromQuery(ByVal data As DataTable) + Dim cars = From car In data _ + Where car.Field(Of Integer)("CarID") > 5 _ + Select car + + ' Use this result set to build a new DataTable. + Dim newTable As DataTable = cars.CopyToDataTable() + For curRow As Integer = 0 To newTable.Rows.Count - 1 + + ' Print the DataTable. + For curCol As Integer = 0 To newTable.Columns.Count - 1 + Console.Write(newTable.Rows(curRow)(curCol).ToString().Trim() & vbTab) + Next + Console.WriteLine() + Next + End Sub +#End Region + +End Module diff --git a/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml new file mode 100644 index 0000000..55dc052 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml @@ -0,0 +1,42 @@ + + + + + + + + + +
+ + + + + + + +
+ + + + + + + + +
+ + + + + + + + +
+ + + + + +
\ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml.layout b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml.layout new file mode 100644 index 0000000..646185a --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.dbml.layout @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.designer.vb b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.designer.vb new file mode 100644 index 0000000..78225cc --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.designer.vb @@ -0,0 +1,683 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Data.Linq +Imports System.Data.Linq.Mapping +Imports System.Linq +Imports System.Linq.Expressions +Imports System.Reflection + + + _ +Partial Public Class AutoLotObjectsDataContext + Inherits System.Data.Linq.DataContext + + Private Shared mappingSource As System.Data.Linq.Mapping.MappingSource = New AttributeMappingSource + + #Region "Extensibility Method Definitions" + Partial Private Sub OnCreated() + End Sub + Partial Private Sub InsertCreditRisk(instance As CreditRisk) + End Sub + Partial Private Sub UpdateCreditRisk(instance As CreditRisk) + End Sub + Partial Private Sub DeleteCreditRisk(instance As CreditRisk) + End Sub + Partial Private Sub InsertCustomer(instance As Customer) + End Sub + Partial Private Sub UpdateCustomer(instance As Customer) + End Sub + Partial Private Sub DeleteCustomer(instance As Customer) + End Sub + Partial Private Sub InsertInventory(instance As Inventory) + End Sub + Partial Private Sub UpdateInventory(instance As Inventory) + End Sub + Partial Private Sub DeleteInventory(instance As Inventory) + End Sub + Partial Private Sub InsertOrder(instance As [Order]) + End Sub + Partial Private Sub UpdateOrder(instance As [Order]) + End Sub + Partial Private Sub DeleteOrder(instance As [Order]) + End Sub + #End Region + + Public Sub New() + MyBase.New(Global.LinqToSqlCrud.My.MySettings.Default.AutoLotConnectionString, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As String) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As System.Data.IDbConnection) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As String, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As System.Data.IDbConnection, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public ReadOnly Property CreditRisks() As System.Data.Linq.Table(Of CreditRisk) + Get + Return Me.GetTable(Of CreditRisk) + End Get + End Property + + Public ReadOnly Property Customers() As System.Data.Linq.Table(Of Customer) + Get + Return Me.GetTable(Of Customer) + End Get + End Property + + Public ReadOnly Property Inventories() As System.Data.Linq.Table(Of Inventory) + Get + Return Me.GetTable(Of Inventory) + End Get + End Property + + Public ReadOnly Property Orders() As System.Data.Linq.Table(Of [Order]) + Get + Return Me.GetTable(Of [Order]) + End Get + End Property + + _ + Public Function GetPetName( _ + ByVal carID As System.Nullable(Of Integer), _ + ByRef petName As String) As Integer + + Dim result As IExecuteResult = _ + Me.ExecuteMethodCall(Me, _ + CType(MethodInfo.GetCurrentMethod, MethodInfo), carID, petName) + + petName = CType(result.GetParameterValue(1), String) + Return CType(result.ReturnValue, Integer) + End Function +End Class + + _ +Partial Public Class CreditRisk + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CustID As Integer + + Private _FirstName As String + + Private _LastName As String + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnFirstNameChanging(value As String) + End Sub + Partial Private Sub OnFirstNameChanged() + End Sub + Partial Private Sub OnLastNameChanging(value As String) + End Sub + Partial Private Sub OnLastNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + OnCreated + End Sub + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return Me._FirstName + End Get + Set + If (String.Equals(Me._FirstName, value) = false) Then + Me.OnFirstNameChanging(value) + Me.SendPropertyChanging + Me._FirstName = value + Me.SendPropertyChanged("FirstName") + Me.OnFirstNameChanged + End If + End Set + End Property + + _ + Public Property LastName() As String + Get + Return Me._LastName + End Get + Set + If (String.Equals(Me._LastName, value) = false) Then + Me.OnLastNameChanging(value) + Me.SendPropertyChanging + Me._LastName = value + Me.SendPropertyChanged("LastName") + Me.OnLastNameChanged + End If + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub +End Class + + _ +Partial Public Class Customer + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CustID As Integer + + Private _FirstName As String + + Private _LastName As String + + Private _Orders As EntitySet(Of [Order]) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnFirstNameChanging(value As String) + End Sub + Partial Private Sub OnFirstNameChanged() + End Sub + Partial Private Sub OnLastNameChanging(value As String) + End Sub + Partial Private Sub OnLastNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Orders = New EntitySet(Of [Order])(AddressOf Me.attach_Orders, AddressOf Me.detach_Orders) + OnCreated + End Sub + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return Me._FirstName + End Get + Set + If (String.Equals(Me._FirstName, value) = false) Then + Me.OnFirstNameChanging(value) + Me.SendPropertyChanging + Me._FirstName = value + Me.SendPropertyChanged("FirstName") + Me.OnFirstNameChanged + End If + End Set + End Property + + _ + Public Property LastName() As String + Get + Return Me._LastName + End Get + Set + If (String.Equals(Me._LastName, value) = false) Then + Me.OnLastNameChanging(value) + Me.SendPropertyChanging + Me._LastName = value + Me.SendPropertyChanged("LastName") + Me.OnLastNameChanged + End If + End Set + End Property + + _ + Public Property Orders() As EntitySet(Of [Order]) + Get + Return Me._Orders + End Get + Set + Me._Orders.Assign(value) + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + + Private Sub attach_Orders(ByVal entity As [Order]) + Me.SendPropertyChanging + entity.Customer = Me + End Sub + + Private Sub detach_Orders(ByVal entity As [Order]) + Me.SendPropertyChanging + entity.Customer = Nothing + End Sub +End Class + + _ +Partial Public Class Inventory + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CarID As Integer + + Private _Make As String + + Private _Color As String + + Private _PetName As String + + Private _Orders As EntitySet(Of [Order]) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCarIDChanging(value As Integer) + End Sub + Partial Private Sub OnCarIDChanged() + End Sub + Partial Private Sub OnMakeChanging(value As String) + End Sub + Partial Private Sub OnMakeChanged() + End Sub + Partial Private Sub OnColorChanging(value As String) + End Sub + Partial Private Sub OnColorChanged() + End Sub + Partial Private Sub OnPetNameChanging(value As String) + End Sub + Partial Private Sub OnPetNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Orders = New EntitySet(Of [Order])(AddressOf Me.attach_Orders, AddressOf Me.detach_Orders) + OnCreated + End Sub + + _ + Public Property CarID() As Integer + Get + Return Me._CarID + End Get + Set + If ((Me._CarID = value) _ + = false) Then + Me.OnCarIDChanging(value) + Me.SendPropertyChanging + Me._CarID = value + Me.SendPropertyChanged("CarID") + Me.OnCarIDChanged + End If + End Set + End Property + + _ + Public Property Make() As String + Get + Return Me._Make + End Get + Set + If (String.Equals(Me._Make, value) = false) Then + Me.OnMakeChanging(value) + Me.SendPropertyChanging + Me._Make = value + Me.SendPropertyChanged("Make") + Me.OnMakeChanged + End If + End Set + End Property + + _ + Public Property Color() As String + Get + Return Me._Color + End Get + Set + If (String.Equals(Me._Color, value) = false) Then + Me.OnColorChanging(value) + Me.SendPropertyChanging + Me._Color = value + Me.SendPropertyChanged("Color") + Me.OnColorChanged + End If + End Set + End Property + + _ + Public Property PetName() As String + Get + Return Me._PetName + End Get + Set + If (String.Equals(Me._PetName, value) = false) Then + Me.OnPetNameChanging(value) + Me.SendPropertyChanging + Me._PetName = value + Me.SendPropertyChanged("PetName") + Me.OnPetNameChanged + End If + End Set + End Property + + _ + Public Property Orders() As EntitySet(Of [Order]) + Get + Return Me._Orders + End Get + Set + Me._Orders.Assign(value) + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + + Private Sub attach_Orders(ByVal entity As [Order]) + Me.SendPropertyChanging + entity.Inventory = Me + End Sub + + Private Sub detach_Orders(ByVal entity As [Order]) + Me.SendPropertyChanging + entity.Inventory = Nothing + End Sub +End Class + + _ +Partial Public Class [Order] + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _OrderID As Integer + + Private _CustID As Integer + + Private _CarID As Integer + + Private _Customer As EntityRef(Of Customer) + + Private _Inventory As EntityRef(Of Inventory) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnOrderIDChanging(value As Integer) + End Sub + Partial Private Sub OnOrderIDChanged() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnCarIDChanging(value As Integer) + End Sub + Partial Private Sub OnCarIDChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Customer = CType(Nothing, EntityRef(Of Customer)) + Me._Inventory = CType(Nothing, EntityRef(Of Inventory)) + OnCreated + End Sub + + _ + Public Property OrderID() As Integer + Get + Return Me._OrderID + End Get + Set + If ((Me._OrderID = value) _ + = false) Then + Me.OnOrderIDChanging(value) + Me.SendPropertyChanging + Me._OrderID = value + Me.SendPropertyChanged("OrderID") + Me.OnOrderIDChanged + End If + End Set + End Property + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + If Me._Customer.HasLoadedOrAssignedValue Then + Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException + End If + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property CarID() As Integer + Get + Return Me._CarID + End Get + Set + If ((Me._CarID = value) _ + = false) Then + If Me._Inventory.HasLoadedOrAssignedValue Then + Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException + End If + Me.OnCarIDChanging(value) + Me.SendPropertyChanging + Me._CarID = value + Me.SendPropertyChanged("CarID") + Me.OnCarIDChanged + End If + End Set + End Property + + _ + Public Property Customer() As Customer + Get + Return Me._Customer.Entity + End Get + Set + Dim previousValue As Customer = Me._Customer.Entity + If ((Object.Equals(previousValue, value) = false) _ + OrElse (Me._Customer.HasLoadedOrAssignedValue = false)) Then + Me.SendPropertyChanging + If ((previousValue Is Nothing) _ + = false) Then + Me._Customer.Entity = Nothing + previousValue.Orders.Remove(Me) + End If + Me._Customer.Entity = value + If ((value Is Nothing) _ + = false) Then + value.Orders.Add(Me) + Me._CustID = value.CustID + Else + Me._CustID = CType(Nothing, Integer) + End If + Me.SendPropertyChanged("Customer") + End If + End Set + End Property + + _ + Public Property Inventory() As Inventory + Get + Return Me._Inventory.Entity + End Get + Set + Dim previousValue As Inventory = Me._Inventory.Entity + If ((Object.Equals(previousValue, value) = false) _ + OrElse (Me._Inventory.HasLoadedOrAssignedValue = false)) Then + Me.SendPropertyChanging + If ((previousValue Is Nothing) _ + = false) Then + Me._Inventory.Entity = Nothing + previousValue.Orders.Remove(Me) + End If + Me._Inventory.Entity = value + If ((value Is Nothing) _ + = false) Then + value.Orders.Add(Me) + Me._CarID = value.CarID + Else + Me._CarID = CType(Nothing, Integer) + End If + Me.SendPropertyChanged("Inventory") + End If + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub +End Class diff --git a/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.vb b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.vb new file mode 100644 index 0000000..e096a77 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/AutoLotObjects.vb @@ -0,0 +1,4 @@ +Partial Class AutoLotObjectsDataContext + +End Class + diff --git a/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.sln b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.sln new file mode 100644 index 0000000..0417902 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqToSqlCrud", "LinqToSqlCrud.vbproj", "{5A308FF9-F0F4-427A-8546-B7D617A9764C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5A308FF9-F0F4-427A-8546-B7D617A9764C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A308FF9-F0F4-427A-8546-B7D617A9764C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A308FF9-F0F4-427A-8546-B7D617A9764C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A308FF9-F0F4-427A-8546-B7D617A9764C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.suo b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.suo new file mode 100644 index 0000000000000000000000000000000000000000..e61f7e9e224b9cccf4440d4c6ef328bba7512435 GIT binary patch literal 22528 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 mm$c%Lm8}MUYsRnnpLc0{b literal 0 HcmV?d00001 diff --git a/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj new file mode 100644 index 0000000..2b9dea5 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5A308FF9-F0F4-427A-8546-B7D617A9764C} + Exe + LinqToSqlCrud.Program + LinqToSqlCrud + LinqToSqlCrud + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqToSqlCrud.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqToSqlCrud.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + True + True + AutoLotObjects.dbml + + + AutoLotObjects.dbml + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + AutoLotObjects.dbml + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MSLinqToSQLGenerator + AutoLotObjects.designer.vb + Designer + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj.user b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/LinqToSqlCrud.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Application.Designer.vb b/Code/Chapter 24/LinqToSqlCrud/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Application.myapp b/Code/Chapter 24/LinqToSqlCrud/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/AssemblyInfo.vb b/Code/Chapter 24/LinqToSqlCrud/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..93bc1be --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.Designer.vb b/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.Designer.vb new file mode 100644 index 0000000..6fd5d74 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqToSqlCrud.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.resx b/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.Designer.vb b/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6f7eae6 --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.Designer.vb @@ -0,0 +1,84 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property AutoLotConnectionString() As String + Get + Return CType(Me("AutoLotConnectionString"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqToSqlCrud.My.MySettings + Get + Return Global.LinqToSqlCrud.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.settings b/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.settings new file mode 100644 index 0000000..03c3afc --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/My Project/Settings.settings @@ -0,0 +1,14 @@ + + + + + + <?xml version="1.0" encoding="utf-16"?> +<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <ConnectionString>Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True</ConnectionString> + <ProviderName>System.Data.SqlClient</ProviderName> +</SerializableConnectionString> + Data Source=INTERUBER\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqToSqlCrud/Program.vb b/Code/Chapter 24/LinqToSqlCrud/Program.vb new file mode 100644 index 0000000..f2a944b --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/Program.vb @@ -0,0 +1,68 @@ +Module Program + + Sub Main() + Console.WriteLine("***** CRUD with LINQ to SQL *****") + + Dim ctx As New AutoLotObjectsDataContext() + InsertNewCars(ctx) + UpdateCar(ctx) + DeleteCar(ctx) + Console.ReadLine() + End Sub + +#Region "Insert car" + Sub InsertNewCars(ByVal ctx As AutoLotObjectsDataContext) + + Console.WriteLine("***** Adding 2 Cars *****") + Dim newCarID As Integer = 0 + Console.Write("Enter ID for Betty: ") + newCarID = Integer.Parse(Console.ReadLine()) + + ' Add a new row using "longhand" notation. + Dim newCar As New Inventory() + newCar.Make = "Yugo" + newCar.Color = "Pink" + newCar.PetName = "Betty" + newCar.CarID = newCarID + ctx.Inventories.InsertOnSubmit(newCar) + ctx.SubmitChanges() + + Console.Write("Enter ID for Henry: ") + newCarID = Integer.Parse(Console.ReadLine()) + + ' Add another row using "shorthand" object init syntax. + newCar = New Inventory With {.Make = "BMW", .Color = "Silver", _ + .PetName = "Henry", .CarID = newCarID} + + ctx.Inventories.InsertOnSubmit(newCar) + ctx.SubmitChanges() + End Sub +#End Region + +#Region "Update car" + Sub UpdateCar(ByVal ctx As AutoLotObjectsDataContext) + Console.WriteLine("***** Updating color of 'Betty' *****") + + ' Update Betty's color to light pink. + Dim betty = (From c In ctx.Inventories Where _ + (c.PetName = "Betty") Select c).First() + betty.Color = "Pink" + ctx.SubmitChanges() + End Sub +#End Region + +#Region "Delete car" + Sub DeleteCar(ByVal ctx As AutoLotObjectsDataContext) + Dim carToDelete As Integer = 0 + Console.Write("Enter ID of car to delete: ") + carToDelete = Integer.Parse(Console.ReadLine()) + + ' Remove specified car. + ctx.Inventories.DeleteOnSubmit((From c In ctx.Inventories _ + Where c.CarID = carToDelete _ + Select c).First()) + ctx.SubmitChanges() + End Sub +#End Region + +End Module diff --git a/Code/Chapter 24/LinqToSqlCrud/app.config b/Code/Chapter 24/LinqToSqlCrud/app.config new file mode 100644 index 0000000..54db57d --- /dev/null +++ b/Code/Chapter 24/LinqToSqlCrud/app.config @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/LINQ to SQL types.cd b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LINQ to SQL types.cd new file mode 100644 index 0000000..0d1a474 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LINQ to SQL types.cd @@ -0,0 +1,94 @@ + + + + + + AQGCABkAAwAAIAIABAAAQAAAACAgAAEAAEgCAgIAAgA= + autoLotDB.vb + + + + + + + + + AAAgAEARAAEAAAIAQBEAAAABiCAAAABACAQCAAAAAAo= + autoLotDB.vb + + + + + + + + + + AAkgAEARAAEAAAIAQBEAAAABiCEAAABAKAQCAAAAAAo= + autoLotDB.vb + + + + + + + + + + AAkiIAABAAEgAAAAQAEAAgAhiSGIAgoAIAAAgAIABAA= + autoLotDB.vb + + + + + + + + + + AAFiABABAQAggAKAQAEAAABBiCAAAgBAAAACAgAAAAI= + autoLotDB.vb + + + + + + + IAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA= + autoLotDB.vb + + + + + + AAAEAACAAEAAiAAAAAAAoAQAAAAAAAAAAAAQAAAEAAA= + autoLotDB.vb + + + + + + AAAAAAAAAAAAAAAAAAAAIAAAAAABAAAAAAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAAAAAABEAAAAQAAAAAAAAAAAAAAAIA= + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAA= + + + + + + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + Program.vb + + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.sln b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.sln new file mode 100644 index 0000000..5a31696 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LinqWithSqlMetalGenedCode", "LinqWithSqlMetalGenedCode.vbproj", "{64B91391-F1D4-4BC8-9CCD-A21A3BCE9112}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {64B91391-F1D4-4BC8-9CCD-A21A3BCE9112}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {64B91391-F1D4-4BC8-9CCD-A21A3BCE9112}.Debug|Any CPU.Build.0 = Debug|Any CPU + {64B91391-F1D4-4BC8-9CCD-A21A3BCE9112}.Release|Any CPU.ActiveCfg = Release|Any CPU + {64B91391-F1D4-4BC8-9CCD-A21A3BCE9112}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.suo b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.suo new file mode 100644 index 0000000000000000000000000000000000000000..122294208a949a505eaec7742315547f6a493528 GIT binary patch literal 18432 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {64B91391-F1D4-4BC8-9CCD-A21A3BCE9112} + Exe + LinqWithSqlMetalGenedCode.Program + LinqWithSqlMetalGenedCode + LinqWithSqlMetalGenedCode + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + LinqWithSqlMetalGenedCode.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LinqWithSqlMetalGenedCode.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.vbproj.user b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/LinqWithSqlMetalGenedCode.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.Designer.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.myapp b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/AssemblyInfo.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4c33fee --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.Designer.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.Designer.vb new file mode 100644 index 0000000..b3aed02 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LinqWithSqlMetalGenedCode.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.resx b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.Designer.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.Designer.vb new file mode 100644 index 0000000..77b857c --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LinqWithSqlMetalGenedCode.My.MySettings + Get + Return Global.LinqWithSqlMetalGenedCode.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.settings b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/Program.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/Program.vb new file mode 100644 index 0000000..42bd762 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/Program.vb @@ -0,0 +1,56 @@ +Imports LinqWithSqlMetalGenedCode.AutoLotDatabase + +Module Program + Const cnStr As String = "Data Source=(local)\SQLEXPRESS;" & _ + "Initial Catalog=AutoLot;Integrated Security=True" + + Sub Main() + Console.WriteLine("***** More Fun with LINQ to SQL *****" & vbLf) + Dim carsDB As New AutoLot(cnStr) + + InvokeStoredProc(carsDB) + PrintOrderForCustomer(carsDB) + + Console.ReadLine() + End Sub + +#Region "Invoke stored proc" + Sub InvokeStoredProc(ByVal carsDB As AutoLot) + Dim carID As Integer = 0 + Dim petName As String = "" + Console.Write("Enter ID: ") + carID = Integer.Parse(Console.ReadLine()) + + ' Invoke stored proc and print out the petname. + carsDB.GetPetName(carID, petName) + Console.WriteLine("Car ID {0} has the petname: {1}", carID, petName) + End Sub +#End Region + +#Region "Printer order for customer" + Sub PrintOrderForCustomer(ByVal carsDB As AutoLot) + Dim custID As Integer = 0 + Console.Write("Enter customer ID: ") + custID = Integer.Parse(Console.ReadLine()) + + Dim customerOrders = _ + From cust In carsDB.Customers _ + From o In cust.Orders _ + Where cust.CustID = custID _ + Select New With {cust, o} + + Console.WriteLine("***** Order Info for Customer ID: {0}. *****", custID) + For Each q In customerOrders + + Console.WriteLine("{0} {1} is order ID # {2}.", _ + q.cust.FirstName.Trim(), _ + q.cust.LastName.Trim(), _ + q.o.OrderID) + Console.WriteLine("{0} bought Car ID # {1}.", _ + q.cust.FirstName.Trim(), q.o.CarID) + Next + Console.WriteLine("customerOrders as a string: {0}", customerOrders) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 24/LinqWithSqlMetalGenedCode/autoLotDB.vb b/Code/Chapter 24/LinqWithSqlMetalGenedCode/autoLotDB.vb new file mode 100644 index 0000000..cf59658 --- /dev/null +++ b/Code/Chapter 24/LinqWithSqlMetalGenedCode/autoLotDB.vb @@ -0,0 +1,821 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Data.Linq +Imports System.Data.Linq.Mapping +Imports System.Linq +Imports System.Linq.Expressions +Imports System.Reflection + +Namespace AutoLotDatabase + + Partial Public Class AutoLot + Inherits System.Data.Linq.DataContext + + Private Shared mappingSource As System.Data.Linq.Mapping.MappingSource = New AttributeMappingSource + + #Region "Extensibility Method Definitions" + Partial Private Sub OnCreated() + End Sub + Partial Private Sub InsertCreditRisks(instance As CreditRisks) + End Sub + Partial Private Sub UpdateCreditRisks(instance As CreditRisks) + End Sub + Partial Private Sub DeleteCreditRisks(instance As CreditRisks) + End Sub + Partial Private Sub InsertCustomers(instance As Customers) + End Sub + Partial Private Sub UpdateCustomers(instance As Customers) + End Sub + Partial Private Sub DeleteCustomers(instance As Customers) + End Sub + Partial Private Sub InsertInventory(instance As Inventory) + End Sub + Partial Private Sub UpdateInventory(instance As Inventory) + End Sub + Partial Private Sub DeleteInventory(instance As Inventory) + End Sub + Partial Private Sub InsertOrders(instance As Orders) + End Sub + Partial Private Sub UpdateOrders(instance As Orders) + End Sub + Partial Private Sub DeleteOrders(instance As Orders) + End Sub + #End Region + + Public Sub New(ByVal connection As String) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As System.Data.IDbConnection) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As String, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public Sub New(ByVal connection As System.Data.IDbConnection, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource) + MyBase.New(connection, mappingSource) + OnCreated + End Sub + + Public ReadOnly Property CreditRisks() As System.Data.Linq.Table(Of CreditRisks) + Get + Return Me.GetTable(Of CreditRisks) + End Get + End Property + + Public ReadOnly Property Customers() As System.Data.Linq.Table(Of Customers) + Get + Return Me.GetTable(Of Customers) + End Get + End Property + + Public ReadOnly Property Inventory() As System.Data.Linq.Table(Of Inventory) + Get + Return Me.GetTable(Of Inventory) + End Get + End Property + + Public ReadOnly Property Orders() As System.Data.Linq.Table(Of Orders) + Get + Return Me.GetTable(Of Orders) + End Get + End Property + + _ + Public Function GetPetName( ByVal carID As System.Nullable(Of Integer), ByRef petName As String) As Integer + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), carID, petName) + petName = CType(result.GetParameterValue(1),String) + Return CType(result.ReturnValue,Integer) + End Function + + _ + Public Function Sp_alterdiagram( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer), ByVal version As System.Nullable(Of Integer), ByVal definition As System.Data.Linq.Binary) As Integer + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id, version, definition) + Return CType(result.ReturnValue,Integer) + End Function + + _ + Public Function Sp_creatediagram( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer), ByVal version As System.Nullable(Of Integer), ByVal definition As System.Data.Linq.Binary) As Integer + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id, version, definition) + Return CType(result.ReturnValue,Integer) + End Function + + _ + Public Function Sp_dropdiagram( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer)) As Integer + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id) + Return CType(result.ReturnValue,Integer) + End Function + + _ + Public Function Sp_helpdiagramdefinition( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer)) As ISingleResult(Of Sp_helpdiagramdefinitionResult) + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id) + Return CType(result.ReturnValue,ISingleResult(Of Sp_helpdiagramdefinitionResult)) + End Function + + _ + Public Function Sp_helpdiagrams( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer)) As ISingleResult(Of Sp_helpdiagramsResult) + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id) + Return CType(result.ReturnValue,ISingleResult(Of Sp_helpdiagramsResult)) + End Function + + _ + Public Function Sp_renamediagram( ByVal diagramname As String, ByVal owner_id As System.Nullable(Of Integer), ByVal new_diagramname As String) As Integer + Dim result As IExecuteResult = Me.ExecuteMethodCall(Me, CType(MethodInfo.GetCurrentMethod,MethodInfo), diagramname, owner_id, new_diagramname) + Return CType(result.ReturnValue,Integer) + End Function + End Class + + _ + Partial Public Class CreditRisks + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CustID As Integer + + Private _FirstName As String + + Private _LastName As String + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnFirstNameChanging(value As String) + End Sub + Partial Private Sub OnFirstNameChanged() + End Sub + Partial Private Sub OnLastNameChanging(value As String) + End Sub + Partial Private Sub OnLastNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + OnCreated + End Sub + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return Me._FirstName + End Get + Set + If (String.Equals(Me._FirstName, value) = false) Then + Me.OnFirstNameChanging(value) + Me.SendPropertyChanging + Me._FirstName = value + Me.SendPropertyChanged("FirstName") + Me.OnFirstNameChanged + End If + End Set + End Property + + _ + Public Property LastName() As String + Get + Return Me._LastName + End Get + Set + If (String.Equals(Me._LastName, value) = false) Then + Me.OnLastNameChanging(value) + Me.SendPropertyChanging + Me._LastName = value + Me.SendPropertyChanged("LastName") + Me.OnLastNameChanged + End If + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class Customers + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CustID As Integer + + Private _FirstName As String + + Private _LastName As String + + Private _Orders As EntitySet(Of Orders) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnFirstNameChanging(value As String) + End Sub + Partial Private Sub OnFirstNameChanged() + End Sub + Partial Private Sub OnLastNameChanging(value As String) + End Sub + Partial Private Sub OnLastNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Orders = New EntitySet(Of Orders)(AddressOf Me.attach_Orders, AddressOf Me.detach_Orders) + OnCreated + End Sub + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property FirstName() As String + Get + Return Me._FirstName + End Get + Set + If (String.Equals(Me._FirstName, value) = false) Then + Me.OnFirstNameChanging(value) + Me.SendPropertyChanging + Me._FirstName = value + Me.SendPropertyChanged("FirstName") + Me.OnFirstNameChanged + End If + End Set + End Property + + _ + Public Property LastName() As String + Get + Return Me._LastName + End Get + Set + If (String.Equals(Me._LastName, value) = false) Then + Me.OnLastNameChanging(value) + Me.SendPropertyChanging + Me._LastName = value + Me.SendPropertyChanged("LastName") + Me.OnLastNameChanged + End If + End Set + End Property + + _ + Public Property Orders() As EntitySet(Of Orders) + Get + Return Me._Orders + End Get + Set + Me._Orders.Assign(value) + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + + Private Sub attach_Orders(ByVal entity As Orders) + Me.SendPropertyChanging + entity.Customers = Me + End Sub + + Private Sub detach_Orders(ByVal entity As Orders) + Me.SendPropertyChanging + entity.Customers = Nothing + End Sub + End Class + + _ + Partial Public Class Inventory + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _CarID As Integer + + Private _Make As String + + Private _Color As String + + Private _PetName As String + + Private _Orders As EntitySet(Of Orders) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnCarIDChanging(value As Integer) + End Sub + Partial Private Sub OnCarIDChanged() + End Sub + Partial Private Sub OnMakeChanging(value As String) + End Sub + Partial Private Sub OnMakeChanged() + End Sub + Partial Private Sub OnColorChanging(value As String) + End Sub + Partial Private Sub OnColorChanged() + End Sub + Partial Private Sub OnPetNameChanging(value As String) + End Sub + Partial Private Sub OnPetNameChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Orders = New EntitySet(Of Orders)(AddressOf Me.attach_Orders, AddressOf Me.detach_Orders) + OnCreated + End Sub + + _ + Public Property CarID() As Integer + Get + Return Me._CarID + End Get + Set + If ((Me._CarID = value) _ + = false) Then + Me.OnCarIDChanging(value) + Me.SendPropertyChanging + Me._CarID = value + Me.SendPropertyChanged("CarID") + Me.OnCarIDChanged + End If + End Set + End Property + + _ + Public Property Make() As String + Get + Return Me._Make + End Get + Set + If (String.Equals(Me._Make, value) = false) Then + Me.OnMakeChanging(value) + Me.SendPropertyChanging + Me._Make = value + Me.SendPropertyChanged("Make") + Me.OnMakeChanged + End If + End Set + End Property + + _ + Public Property Color() As String + Get + Return Me._Color + End Get + Set + If (String.Equals(Me._Color, value) = false) Then + Me.OnColorChanging(value) + Me.SendPropertyChanging + Me._Color = value + Me.SendPropertyChanged("Color") + Me.OnColorChanged + End If + End Set + End Property + + _ + Public Property PetName() As String + Get + Return Me._PetName + End Get + Set + If (String.Equals(Me._PetName, value) = false) Then + Me.OnPetNameChanging(value) + Me.SendPropertyChanging + Me._PetName = value + Me.SendPropertyChanged("PetName") + Me.OnPetNameChanged + End If + End Set + End Property + + _ + Public Property Orders() As EntitySet(Of Orders) + Get + Return Me._Orders + End Get + Set + Me._Orders.Assign(value) + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + + Private Sub attach_Orders(ByVal entity As Orders) + Me.SendPropertyChanging + entity.Inventory = Me + End Sub + + Private Sub detach_Orders(ByVal entity As Orders) + Me.SendPropertyChanging + entity.Inventory = Nothing + End Sub + End Class + + _ + Partial Public Class Orders + Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged + + Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) + + Private _OrderID As Integer + + Private _CustID As Integer + + Private _CarID As Integer + + Private _Customers As EntityRef(Of Customers) + + Private _Inventory As EntityRef(Of Inventory) + + #Region "Extensibility Method Definitions" + Partial Private Sub OnLoaded() + End Sub + Partial Private Sub OnValidate(action As System.Data.Linq.ChangeAction) + End Sub + Partial Private Sub OnCreated() + End Sub + Partial Private Sub OnOrderIDChanging(value As Integer) + End Sub + Partial Private Sub OnOrderIDChanged() + End Sub + Partial Private Sub OnCustIDChanging(value As Integer) + End Sub + Partial Private Sub OnCustIDChanged() + End Sub + Partial Private Sub OnCarIDChanging(value As Integer) + End Sub + Partial Private Sub OnCarIDChanged() + End Sub + #End Region + + Public Sub New() + MyBase.New + Me._Customers = CType(Nothing, EntityRef(Of Customers)) + Me._Inventory = CType(Nothing, EntityRef(Of Inventory)) + OnCreated + End Sub + + _ + Public Property OrderID() As Integer + Get + Return Me._OrderID + End Get + Set + If ((Me._OrderID = value) _ + = false) Then + Me.OnOrderIDChanging(value) + Me.SendPropertyChanging + Me._OrderID = value + Me.SendPropertyChanged("OrderID") + Me.OnOrderIDChanged + End If + End Set + End Property + + _ + Public Property CustID() As Integer + Get + Return Me._CustID + End Get + Set + If ((Me._CustID = value) _ + = false) Then + If Me._Customers.HasLoadedOrAssignedValue Then + Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException + End If + Me.OnCustIDChanging(value) + Me.SendPropertyChanging + Me._CustID = value + Me.SendPropertyChanged("CustID") + Me.OnCustIDChanged + End If + End Set + End Property + + _ + Public Property CarID() As Integer + Get + Return Me._CarID + End Get + Set + If ((Me._CarID = value) _ + = false) Then + If Me._Inventory.HasLoadedOrAssignedValue Then + Throw New System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException + End If + Me.OnCarIDChanging(value) + Me.SendPropertyChanging + Me._CarID = value + Me.SendPropertyChanged("CarID") + Me.OnCarIDChanged + End If + End Set + End Property + + _ + Public Property Customers() As Customers + Get + Return Me._Customers.Entity + End Get + Set + Dim previousValue As Customers = Me._Customers.Entity + If ((Object.Equals(previousValue, value) = false) _ + OrElse (Me._Customers.HasLoadedOrAssignedValue = false)) Then + Me.SendPropertyChanging + If ((previousValue Is Nothing) _ + = false) Then + Me._Customers.Entity = Nothing + previousValue.Orders.Remove(Me) + End If + Me._Customers.Entity = value + If ((value Is Nothing) _ + = false) Then + value.Orders.Add(Me) + Me._CustID = value.CustID + Else + Me._CustID = CType(Nothing, Integer) + End If + Me.SendPropertyChanged("Customers") + End If + End Set + End Property + + _ + Public Property Inventory() As Inventory + Get + Return Me._Inventory.Entity + End Get + Set + Dim previousValue As Inventory = Me._Inventory.Entity + If ((Object.Equals(previousValue, value) = false) _ + OrElse (Me._Inventory.HasLoadedOrAssignedValue = false)) Then + Me.SendPropertyChanging + If ((previousValue Is Nothing) _ + = false) Then + Me._Inventory.Entity = Nothing + previousValue.Orders.Remove(Me) + End If + Me._Inventory.Entity = value + If ((value Is Nothing) _ + = false) Then + value.Orders.Add(Me) + Me._CarID = value.CarID + Else + Me._CarID = CType(Nothing, Integer) + End If + Me.SendPropertyChanged("Inventory") + End If + End Set + End Property + + Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging + + Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Overridable Sub SendPropertyChanging() + If ((Me.PropertyChangingEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) + End If + End Sub + + Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) + If ((Me.PropertyChangedEvent Is Nothing) _ + = false) Then + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + Partial Public Class Sp_helpdiagramdefinitionResult + + Private _Version As System.Nullable(Of Integer) + + Private _Definition As System.Data.Linq.Binary + + Public Sub New() + MyBase.New + End Sub + + _ + Public Property Version() As System.Nullable(Of Integer) + Get + Return Me._Version + End Get + Set + If (Me._Version.Equals(value) = false) Then + Me._Version = value + End If + End Set + End Property + + _ + Public Property Definition() As System.Data.Linq.Binary + Get + Return Me._Definition + End Get + Set + If (Object.Equals(Me._Definition, value) = false) Then + Me._Definition = value + End If + End Set + End Property + End Class + + Partial Public Class Sp_helpdiagramsResult + + Private _Database As String + + Private _Name As String + + Private _ID As System.Nullable(Of Integer) + + Private _Owner As String + + Private _OwnerID As System.Nullable(Of Integer) + + Public Sub New() + MyBase.New + End Sub + + _ + Public Property Database() As String + Get + Return Me._Database + End Get + Set + If (String.Equals(Me._Database, value) = false) Then + Me._Database = value + End If + End Set + End Property + + _ + Public Property Name() As String + Get + Return Me._Name + End Get + Set + If (String.Equals(Me._Name, value) = false) Then + Me._Name = value + End If + End Set + End Property + + _ + Public Property ID() As System.Nullable(Of Integer) + Get + Return Me._ID + End Get + Set + If (Me._ID.Equals(value) = false) Then + Me._ID = value + End If + End Set + End Property + + _ + Public Property Owner() As String + Get + Return Me._Owner + End Get + Set + If (String.Equals(Me._Owner, value) = false) Then + Me._Owner = value + End If + End Set + End Property + + _ + Public Property OwnerID() As System.Nullable(Of Integer) + Get + Return Me._OwnerID + End Get + Set + If (Me._OwnerID.Equals(value) = false) Then + Me._OwnerID = value + End If + End Set + End Property + End Class +End Namespace diff --git a/Code/Chapter 24/NavigationWithAxisProperties/Inventory.xml b/Code/Chapter 24/NavigationWithAxisProperties/Inventory.xml new file mode 100644 index 0000000..a338452 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/Inventory.xml @@ -0,0 +1,28 @@ + + + + Ford + Blue + Chuck + + + VW + Silver + Mary + + + Yugo + Pink + Gipper + + + Ford + Yellow + Max + + + BMW + Black + Zippy + + diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.Designer.vb b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.myapp b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/AssemblyInfo.vb b/Code/Chapter 24/NavigationWithAxisProperties/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7c2d8ac --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.Designer.vb b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.Designer.vb new file mode 100644 index 0000000..0518ae7 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("NavigationWithAxisProperties.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.resx b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.Designer.vb b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a7c4a6c --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.NavigationWithAxisProperties.My.MySettings + Get + Return Global.NavigationWithAxisProperties.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.settings b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.sln b/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.sln new file mode 100644 index 0000000..62d3e23 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NavigationWithAxisProperties", "NavigationWithAxisProperties.vbproj", "{27B768CA-F75F-4D0A-9DAE-5A92F35C723E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {27B768CA-F75F-4D0A-9DAE-5A92F35C723E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27B768CA-F75F-4D0A-9DAE-5A92F35C723E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27B768CA-F75F-4D0A-9DAE-5A92F35C723E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27B768CA-F75F-4D0A-9DAE-5A92F35C723E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.suo b/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.suo new file mode 100644 index 0000000000000000000000000000000000000000..00ea0cf12cddf19b3e3c0a88c03405847ce1622b GIT binary patch literal 25088 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 HGQRwOQU6BN literal 0 HcmV?d00001 diff --git a/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.vbproj b/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.vbproj new file mode 100644 index 0000000..f812398 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/NavigationWithAxisProperties.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {27B768CA-F75F-4D0A-9DAE-5A92F35C723E} + Exe + NavigationWithAxisProperties.Program + NavigationWithAxisProperties + NavigationWithAxisProperties + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + NavigationWithAxisProperties.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + NavigationWithAxisProperties.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/NavigationWithAxisProperties/Program.vb b/Code/Chapter 24/NavigationWithAxisProperties/Program.vb new file mode 100644 index 0000000..a80ee77 --- /dev/null +++ b/Code/Chapter 24/NavigationWithAxisProperties/Program.vb @@ -0,0 +1,66 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with XML Axis Properties *****") + + ' Load the Inventory.xml document into memory. + Dim doc As XElement = XElement.Load("Inventory.xml") + + ' We will author each of these next... + PrintAllPetNames(doc) + Console.WriteLine() + GetAllFords(doc) + + Console.WriteLine() + GetAllIds(doc) + + Console.WriteLine() + PrintAllColors(doc) + + Console.ReadLine() + End Sub + +#Region "Helper methods" + Sub PrintAllPetNames(ByVal doc As XElement) + ' Use XML descendant axis property to + ' navigate to sub-element. + Dim petNames = From pn In doc... _ + Select pn.Value + + For Each name In petNames + Console.WriteLine("Name: {0}", name) + Next + End Sub + + Sub GetAllFords(ByVal doc As XElement) + Dim fords = From c In doc... _ + Where c.Value = "Ford" _ + Select c + + For Each f In fords + Console.WriteLine("Make: {0}", f) + Next + End Sub + + Sub GetAllIds(ByVal doc As XElement) + ' Navigate to element and + ' get carID attribute. + Dim ids = From c In doc. _ + Select c.@carID + + For Each id In ids + Console.WriteLine(id) + Next + End Sub + + Sub PrintAllColors(ByVal doc As XElement) + ' Get value of each color using indexer. + For i As Integer = 0 To doc.Nodes.Count - 1 + Console.WriteLine(doc.(i)..Value) + Next + End Sub + + +#End Region + +End Module diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Inventory.xml b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Inventory.xml new file mode 100644 index 0000000..a338452 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Inventory.xml @@ -0,0 +1,28 @@ + + + + Ford + Blue + Chuck + + + VW + Silver + Mary + + + Yugo + Pink + Gipper + + + Ford + Yellow + Max + + + BMW + Black + Zippy + + diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.Designer.vb b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.myapp b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/AssemblyInfo.vb b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..f3c2c06 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.Designer.vb b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f8ee011 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("NavigationWithLinqToXmlObjectModel.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.resx b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.Designer.vb b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.Designer.vb new file mode 100644 index 0000000..36ae2f4 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.NavigationWithLinqToXmlObjectModel.My.MySettings + Get + Return Global.NavigationWithLinqToXmlObjectModel.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.settings b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.sln b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.sln new file mode 100644 index 0000000..c1e5337 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NavigationWithLinqToXmlObjectModel", "NavigationWithLinqToXmlObjectModel.vbproj", "{83FC8A79-8A85-449D-A9A2-69A32158648D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {83FC8A79-8A85-449D-A9A2-69A32158648D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83FC8A79-8A85-449D-A9A2-69A32158648D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83FC8A79-8A85-449D-A9A2-69A32158648D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83FC8A79-8A85-449D-A9A2-69A32158648D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.suo b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.suo new file mode 100644 index 0000000000000000000000000000000000000000..553c8940f409ca1cd1fd983353bfcdec1d0868c2 GIT binary patch literal 26112 zcmeHQ?QdIG89!;aZewHJ)>2@M;-)X`r8RkNo3`s3J4qLoG$D4Ad@w?e?Ko~6JF}fE zVXYW1`@m4ezQLD?4u%8;O-z6^BtTH12@p_(CL!$;@M%J0odbe|AAaKgN{ zzP_$*3W3vBY9b80hqm5^!TTgK$NF~UJCN^0{t)tA$af>(i+m6Ahmr3`-i`bKGROX5 zquh(~Bgp%ZKZ^WuWIlfoB22toBrCtUj}~PwiA`kkywz% z0Wm8siD5vW#o3@(Q4c&G_dx<__$)oXCTWIsJH>I)BLXNpaO?wp1w4~1N>$=|FfQ!0lj$6YswkQ0L}jgaNdr55cv@DVdNvo zpGKx!A^-C|@;^&6|MObsZanWX>KsRT0{J9zAM#n`)5vF#A4ldpPoO+!oCi<_kq3-x zJa$bNP;U%*++%&$k2Uz=zx)0Zd-?F21HZU+&o{3`{AP8J-c?Wk4N^l0@%#%f4gB!C zsqY<_j$b`v&{p-gH(!JH2<1sScq%fw>I-DE^ZCeRz!%NLeTBJ%&wpVs>>H1!3$xkW zg0DLl_YKA)!E8Jc3C=|q3yGYst0!_Hx|~Wz3#n{oDpi;pNoAf6XQvm^V>6c$vBD@S zrz69ek1H}3oOLEo-Bm^bYm{^3I$cQkG3pme0c14j>A`KZo25CEsv#_i^kGE3tt&2D& zP)py>tIsw^KfllpQOY9&pSkTbQ)`Ply=WJOJ2vv?PgkvlZ2o&yc^g5xl}D z|LZSL0$v!n$pRNMIIf70guIMa#Bf$EwL|}q+-diCg-=;cS<5tyu}K39Q9zr=F$tI) zxdPy4fdw!4CtTWPUg48pzQI923IWOzFwMROaUM5HWeX51?up}1yN)`*D}36QT7!lF zIc87+aZdO-F@a-JJcVO5YlQGg^@PoY)2hil{-n4WU?3?mpA%CUg92JKhx^rVPe7zU z+PBo3Ug1+>QdcsS!w;bM3AABea%>6|P;hO>!=OLnllHh*__XW)gv>+;3ABQ}juxqs z+)R5gF69KR4%Mm!`HuNukdgUTP3L_7H^@P8N<_pc#@h!AjQlu{en-S4u6$@2+u}nz zI4(YT02k1{FwV$1Y22snm;*2QL^n#-9mFwGq-mbbp)NU#6y}44(}U+1aF2ACM5%dh z3fF{0nV1nzOZlMqbPTj|3GY)@jT+pN##c6;v>e#@7u1{l4&|l7qmrsg+=)t@4524! zw3`?m#d!=*vbf4t&>!t@$^x$v=*R}_Z~Bs2{+H7~TgtIE%O%xA`y=4D(JtjTz0yB< zWgmqwk~92OV2&EWT>@^T|8DYU6u4giRQh40L*gPUo^g}`N6~-wdk^~Jwg1$WVRjyA z7L@D*mr?sKfm+hIBEK&IE;W!37PKEe5IHf3BPpkVGLJHbQi$h}Yo)qcp^`V#z{{+J zsbTBuMz%q&ZZDi8_V$n9G*SHgMj$R~v%xCe@ZZQO^Cx8?9%rP&Z z@J<&Z3caYyn8Qgl=L&c$4(?Wdy@spoKLr)w0F@HUTE}WPv+kYJZ?3g%l=n&_W+eBQ zG=&ucZA023^eD_03E~e@?ojqHvAxxjRsLl`!%N_8^<}fn8wX5!16nWJ*<&4$f7B(U zAFuFfuk9|%e`omG7t+>|UBCQ*Pu(j!@3H?n7Rv8Y&yj<59~GWw(d#7cQh)0wcF-9U ztsVcg*JmWdF`g>fz?L>ogSzWY?X>J^iO@$)h|7SGkv3lt+;$P%FbjK+eWnE-K+QN> zK<;BYEuO%!Rtk6Pq2HwcYi)~?1dJ4#f5(bf?q}wAcvKKa^P*Kh9m{?zUfk^94E`ycuCrKf)I_iJCCSbP0C z03e0L$=SU()^6+{dF7?}tKZsxtIw$>+fyOvZ7JL@KIfzV5tH7>f}}*+eA@e1h6QNn zeb8s3-LxoWrk(eZ0OitJQXVzW?7R=k+;Z>Z87cARK>N!3DBv3_kdJAUCGUeaBDKEq zKBz*O7`5)f7}Kwe}bkf%l1UBJlauka}E??)$xoM&L^URymi+aKD>p&hg+d5n>coMCOz z-f>TaPivI0ncQour$O8jr5-qUB_SS zbeA_N7($CVuRv?gED=M9n5Ch67V%@WiF%6uRYK|$iX=6|cpaSHn3!K>YlFZzz37O+ ze>!reM5v0c{-j~;9YWhOG8$wbm2|=~=Oh>vbc>3j%MCSh-fS3F>l694r|<7%hu7#} zmZSn>&35AmCSr)Wx{;^!xRo$3!-0AhW?WDjYrQCG=pU0M@0OM@FhFqaB z5Jq9AoBZv9uTU*f|LjF2&S`j+|EEy*ZR5l4@Hva`o;d%evFsIoKR)@6@mY8H-s~T) zY2cbCukc4v_gw>iJ&IcUZ-yBNhQ?Q4_}^E{=kL!4Lcy=2VxweqeYmq8U$L6eH?RKu zZ$HHvChB~hfWsi?ADq2lS{(IhO9FOkLcECYHTTFUUp8XGS$*c>{D!Z5X1hn#9>QA1^N4)4n`pNkao7PFle;LNQSlyyZ9f4;8^ry` zr7Av(m4uw(4kL4I4!@ziUCzYPLgshIVNLg=&JgC_Cs3cYRFqW3NZZj8(>iQ@dn6 zqda7khmG=xQL3-0^??dM=GlkJxpMYbuRNeNr)Jj~v!KT|4_qw6!15!q8j=3uhOaP zdGkv&tDGqH?75~G(_zpeBl?`xQ>zZN2E{tun|mg#v8~EgIP`1G{A1mU)N{K#b)Y2+7 zQW-TQqw!qj!c~7(ZIZ%0dmUX(H;15!sClWE{L%s=6t2Wb<40?hnQi56fqGd6U4YPm z+>0Y;^S^(itubfU67E`g|5{Q>_n{*EtwC>^Gqlz&$C;KbTnTFBDUD@vGpBsY zpQb>++-<;>MwDT+SXh_wyh?A!Z}E0YRu12&gsod^51XDJ<&CnHHMg)X*9TeKXbgmg2jn!(EBc>&?xs6-L9^gKva=ces59YQvLRXhdd2@Rj zX|rKkc_lnZ9ltaNm%&Bd3Ka#c?oZ=EzdrbM+YWLY64U18E z?Rs4cJtVh1RQ9`~bSr3`bIpNT)4{zdjFF^^c1IjA^$JJ(mXZIPJz`=%$In&dH#UUx zdhA=<$Ozf@gOT-frhb%0bP`cp#lK;UJnduWXdYK+|IYN4t-OmbBID3bQBUrU+PZN` zdoJVd(~a?eJ!sL}O0a%J3>jk{LFP_x6*nNYseL8fhoa>fSEs$zB-G>-J#~w$a|cE( zJZI0j)IYy&5-d4I)VX*5jfVAMBT|%edS*Hf6seZh&+85Ai#IN`qe`_VlQ!knT$5=} z{oHrbxHXw(Y%3i}T4GF@v%=h!Vc%-Tpqhtg?X?Zp+K2Jm{OW;X#@o#o7rL}&iwAV+D$W@;PLJE|Y%%}cB&Sw$mbGyb#4LxE4PTnkWu$8c7Cl$Ra{Yk% z8)00rQQGxp=S!_%g+Us<;yglgMF;IQVJm*?wDWy)e|JpNUM&%JdyldezvbV`Dy>>= z#cyl<8+c}!rs=Ze+v=UXR?oH-ziq{DXQ1O+@!NWNh2FT(&gN*vZ{2pd+s|;DvHih} z-;$H=_U*)d;8_3VL_zZ}>oy+~}jfuc|@xbjZKdw;OEVlm-5{%0& literal 0 HcmV?d00001 diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.vbproj b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.vbproj new file mode 100644 index 0000000..f5b0402 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/NavigationWithLinqToXmlObjectModel.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {83FC8A79-8A85-449D-A9A2-69A32158648D} + Exe + NavigationWithLinqToXmlObjectModel.Program + NavigationWithLinqToXmlObjectModel + NavigationWithLinqToXmlObjectModel + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + NavigationWithLinqToXmlObjectModel.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + NavigationWithLinqToXmlObjectModel.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Program.vb b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Program.vb new file mode 100644 index 0000000..c9a4e28 --- /dev/null +++ b/Code/Chapter 24/NavigationWithLinqToXmlObjectModel/Program.vb @@ -0,0 +1,57 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with LINQ to XML *****") + + ' Load the Inventory.xml document into memory. + Dim doc As XElement = XElement.Load("Inventory.xml") + + ' We will author each of these next... + PrintAllPetNames(doc) + Console.WriteLine() + GetAllFords(doc) + + Console.WriteLine() + AddNewElements(doc) + + Console.ReadLine() + End Sub + +#Region "Helper methods" + Sub PrintAllPetNames(ByVal doc As XElement) + Dim petNames = From pn In doc.Descendants("PetName") _ + Select pn.Value + + For Each name In petNames + Console.WriteLine("Name: {0}", name) + Next + End Sub + + Sub GetAllFords(ByVal doc As XElement) + Dim fords = From c In doc.Descendants("Make") _ + Where c.Value = "Ford" _ + Select c + + For Each f In fords + Console.WriteLine(f) + Next + End Sub + + Sub AddNewElements(ByVal doc As XElement) + For i As Integer = 0 To 4 + ' Add 5 new green Fords to the incoming document. + ' Create a new XElement + Dim newCar As New XElement("Car", _ + New XAttribute("ID", i + 1000), _ + New XElement("Color", "Green"), _ + New XElement("Make", "Ford"), _ + New XElement("PetName", "")) + ' Add to doc. + doc.Add(newCar) + Next + ' Show the updates. + Console.WriteLine(doc) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/AutoLotDataContext.vb b/Code/Chapter 24/SimpleLinqToSqlApp/AutoLotDataContext.vb new file mode 100644 index 0000000..b823871 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/AutoLotDataContext.vb @@ -0,0 +1,14 @@ +Imports System.Data.Linq + +Class AutoLotDatabase + Inherits DataContext + + ' Define a member variable representing + ' the table in the database. + Public Inventory As Table(Of Inventory) + + ' Pass connection string to base class. + Public Sub New(ByVal connectionString As String) + MyBase.New(connectionString) + End Sub +End Class diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/Inventory.vb b/Code/Chapter 24/SimpleLinqToSqlApp/Inventory.vb new file mode 100644 index 0000000..7820d4f --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/Inventory.vb @@ -0,0 +1,21 @@ +Imports System.Data.Linq.Mapping + + _ +Public Class Inventory + _ + Public Make As String + _ + Public Color As String + _ + Public PetName As String + + ' Identify the primary key. + _ + Public CarID As Integer + + Public Overrides Function ToString() As String + Return String.Format("ID = {0}; Make = {1}; Color = {2}; PetName = {3}", _ + CarID, Make.Trim(), Color.Trim(), PetName.Trim()) + End Function +End Class + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.Designer.vb b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.myapp b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/AssemblyInfo.vb b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..e0a2f04 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.Designer.vb b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..06926ce --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleLinqToSqlApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.resx b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.Designer.vb b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a2e50a0 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleLinqToSqlApp.My.MySettings + Get + Return Global.SimpleLinqToSqlApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.settings b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/Program.vb b/Code/Chapter 24/SimpleLinqToSqlApp/Program.vb new file mode 100644 index 0000000..8b72864 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/Program.vb @@ -0,0 +1,42 @@ +Imports System.Data.Linq + +Module Program + Const cnStr As String = _ + "Data Source=(local)\SQLEXPRESS;Initial Catalog=AutoLot;" & _ + "Integrated Security=True" + + Sub Main() + Console.WriteLine("***** LINQ to SQL Sample App *****") + Console.WriteLine() + + ' Create a AutoLotDatabase object. + Dim db As New AutoLotDatabase(cnStr) + + ' Note we can now use the Inventory field of AutoLotDatabase. + Console.WriteLine("-> Contents of Inventory Table from AutoLot database:") + For Each car In From c In db.Inventory Select c + Console.WriteLine(car.ToString()) + Next + + Console.WriteLine() + ShowOnlyBimmers(db) + Console.ReadLine() + End Sub + +#Region "Show only BMWs" + Sub ShowOnlyBimmers(ByVal db As AutoLotDatabase) + Console.WriteLine("***** Only BMWs *****") + + ' Get the BMWs. + Dim bimmers = From s In db.Inventory _ + Where (s.Make = "BMW") _ + Order By s.CarID Select s + + For Each c In bimmers + Console.WriteLine(c.ToString()) + Next + End Sub +#End Region + +End Module + diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.sln b/Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.sln new file mode 100644 index 0000000..fb41877 --- /dev/null +++ b/Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleLinqToSqlApp", "SimpleLinqToSqlApp.vbproj", "{02E5820F-4DB7-4A5E-9F72-AB31362B3834}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {02E5820F-4DB7-4A5E-9F72-AB31362B3834}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02E5820F-4DB7-4A5E-9F72-AB31362B3834}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02E5820F-4DB7-4A5E-9F72-AB31362B3834}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02E5820F-4DB7-4A5E-9F72-AB31362B3834}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.suo b/Code/Chapter 24/SimpleLinqToSqlApp/SimpleLinqToSqlApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..8159d58ddf95cfc3e5da7898a214b6d92cf44fc7 GIT binary patch literal 18944 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {02E5820F-4DB7-4A5E-9F72-AB31362B3834} + Exe + SimpleLinqToSqlApp.Program + SimpleLinqToSqlApp + SimpleLinqToSqlApp + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + SimpleLinqToSqlApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleLinqToSqlApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.Designer.vb b/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.myapp b/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/AssemblyInfo.vb b/Code/Chapter 24/SimpleXmlLiteral/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..71d988b --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.Designer.vb b/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.Designer.vb new file mode 100644 index 0000000..35c36ec --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleXmlLiteral.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.resx b/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.Designer.vb b/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3b9caf1 --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleXmlLiteral.My.MySettings + Get + Return Global.SimpleXmlLiteral.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.settings b/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 24/SimpleXmlLiteral/Program.vb b/Code/Chapter 24/SimpleXmlLiteral/Program.vb new file mode 100644 index 0000000..4e9b83b --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/Program.vb @@ -0,0 +1,21 @@ +Module Program + Sub Main() + + Dim interiorColor As String = "White" + Dim exteriorColor As String = "Blue" + + ' Note the 'inlined' code blocks. + Dim car1 As XElement = _ + + <%= GetPetName() %> + <%= interiorColor %> + <%= exteriorColor %> + + + Console.WriteLine(car1) + End Sub + + Function GetPetName() As String + Return "Sidd" + End Function +End Module diff --git a/Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.sln b/Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.sln new file mode 100644 index 0000000..28b6ce2 --- /dev/null +++ b/Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleXmlLiteral", "SimpleXmlLiteral.vbproj", "{0D7ABE92-840D-4B00-9CF2-BD743F6AC486}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0D7ABE92-840D-4B00-9CF2-BD743F6AC486}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0D7ABE92-840D-4B00-9CF2-BD743F6AC486}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0D7ABE92-840D-4B00-9CF2-BD743F6AC486}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0D7ABE92-840D-4B00-9CF2-BD743F6AC486}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.suo b/Code/Chapter 24/SimpleXmlLiteral/SimpleXmlLiteral.suo new file mode 100644 index 0000000000000000000000000000000000000000..bb5ef9461f38d32ff30e5fa543bb25f1925b18da GIT binary patch literal 19456 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {0D7ABE92-840D-4B00-9CF2-BD743F6AC486} + Exe + SimpleXmlLiteral.Program + SimpleXmlLiteral + SimpleXmlLiteral + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + SimpleXmlLiteral.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleXmlLiteral.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/HelloWebService/HelloWebService.asmx b/Code/Chapter 25/HelloWebService/HelloWebService.asmx new file mode 100644 index 0000000..4cf3756 --- /dev/null +++ b/Code/Chapter 25/HelloWebService/HelloWebService.asmx @@ -0,0 +1,10 @@ +<%@ WebService Language="VB" Class="HelloWebService" %> +Imports System +Imports System.Web.Services + +Public Class HelloWebService + _ + Public Function HelloWorld() As String + Return "Hello World" + End Function +End Class diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.sln b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.sln new file mode 100644 index 0000000..ba94b58 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MagicEightBallServiceClient", "MagicEightBallServiceClient.vbproj", "{3C6B276C-B1B2-4CEB-BF6E-28012E90C887}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3C6B276C-B1B2-4CEB-BF6E-28012E90C887}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3C6B276C-B1B2-4CEB-BF6E-28012E90C887}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3C6B276C-B1B2-4CEB-BF6E-28012E90C887}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3C6B276C-B1B2-4CEB-BF6E-28012E90C887}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.suo b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..0ea041bdbc6c8524a1e0f72f51b903c51fc8bd3a GIT binary patch literal 19968 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj new file mode 100644 index 0000000..a3704ed --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj @@ -0,0 +1,143 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {3C6B276C-B1B2-4CEB-BF6E-28012E90C887} + Exe + MagicEightBallServiceClient.Program + MagicEightBallServiceClient + MagicEightBallServiceClient + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MagicEightBallServiceClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MagicEightBallServiceClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + True + True + Reference.svcmap + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj.user b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/MagicEightBallServiceClient.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.myapp b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/AssemblyInfo.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6cc851a --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a993fcb --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MagicEightBallServiceClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.resx b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..92dbc18 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MagicEightBallServiceClient.My.MySettings + Get + Return Global.MagicEightBallServiceClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.settings b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Program.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Program.vb new file mode 100644 index 0000000..96134ea --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Program.vb @@ -0,0 +1,15 @@ +Imports MagicEightBallServiceClient.ServiceReference1 + +Module Program + Sub Main() + Console.WriteLine("***** Ask the Magic 8 Ball *****" & Chr(10) & "") + + Using ball As New EightBallClient() + Console.Write("Your question: ") + Dim question As String = Console.ReadLine() + Dim answer As String = ball.ObtainAnswerToQuestion(question) + Console.WriteLine("8-Ball says: {0}", answer) + End Using + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.disco b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.disco new file mode 100644 index 0000000..1f46fc9 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.disco @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.wsdl b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.wsdl new file mode 100644 index 0000000..eeaf6f2 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.wsdl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.xsd b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.xsd new file mode 100644 index 0000000..d00d787 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.wsdl b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.wsdl new file mode 100644 index 0000000..857d7c1 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.wsdl @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.xsd b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.xsd new file mode 100644 index 0000000..27297d6 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/MagicEightBallService1.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.svcmap b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.svcmap new file mode 100644 index 0000000..53857e6 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.svcmap @@ -0,0 +1,32 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.vb new file mode 100644 index 0000000..aa64bd1 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/Reference.vb @@ -0,0 +1,60 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace ServiceReference1 + + _ + Public Interface IEightBall + + _ + Function ObtainAnswerToQuestion(ByVal userQuestion As String) As String + End Interface + + _ + Public Interface IEightBallChannel + Inherits ServiceReference1.IEightBall, System.ServiceModel.IClientChannel + End Interface + + _ + Partial Public Class EightBallClient + Inherits System.ServiceModel.ClientBase(Of ServiceReference1.IEightBall) + Implements ServiceReference1.IEightBall + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal endpointConfigurationName As String) + MyBase.New(endpointConfigurationName) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(binding, remoteAddress) + End Sub + + Public Function ObtainAnswerToQuestion(ByVal userQuestion As String) As String Implements ServiceReference1.IEightBall.ObtainAnswerToQuestion + Return MyBase.Channel.ObtainAnswerToQuestion(userQuestion) + End Function + End Class +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/configuration.svcinfo b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/configuration.svcinfo new file mode 100644 index 0000000..d4f1649 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/Service References/ServiceReference1/configuration.svcinfo @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/app.config b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/app.config new file mode 100644 index 0000000..1687693 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceClient/app.config @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.sln b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.sln new file mode 100644 index 0000000..7bfe88e --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MagicEightBallServiceHost", "MagicEightBallServiceHost.vbproj", "{F1F6E441-8225-442E-9FFD-961A0A93FC2E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F1F6E441-8225-442E-9FFD-961A0A93FC2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1F6E441-8225-442E-9FFD-961A0A93FC2E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1F6E441-8225-442E-9FFD-961A0A93FC2E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1F6E441-8225-442E-9FFD-961A0A93FC2E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.suo b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.suo new file mode 100644 index 0000000000000000000000000000000000000000..c25d1b88cd3da2e18ca358291929671af56feff8 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.vbproj b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.vbproj new file mode 100644 index 0000000..a8bf68c --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/MagicEightBallServiceHost.vbproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F1F6E441-8225-442E-9FFD-961A0A93FC2E} + Exe + MagicEightBallServiceHost.Program + MagicEightBallServiceHost + MagicEightBallServiceHost + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MagicEightBallServiceHost.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MagicEightBallServiceHost.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\MagicEightBallServiceLib\bin\Debug\MagicEightBallServiceLib.dll + + + + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.myapp b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/AssemblyInfo.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..67124ba --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5537c86 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MagicEightBallServiceHost.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.resx b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.Designer.vb new file mode 100644 index 0000000..daddff2 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MagicEightBallServiceHost.My.MySettings + Get + Return Global.MagicEightBallServiceHost.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.settings b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/Program.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/Program.vb new file mode 100644 index 0000000..afe12f8 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/Program.vb @@ -0,0 +1,32 @@ +Imports System.ServiceModel +Imports MagicEightBallServiceLib + +Module Program + + Sub Main() + Console.WriteLine("***** Console Based WCF Host *****") + + Using svcHost As New ServiceHost(GetType(MagicEightBallService)) + ' Open the host and start listening for incoming messages. + svcHost.Open() + DisplayHostInfo(svcHost) + ' Keep the service running until the Enter key is pressed. + Console.WriteLine("The service is ready.") + Console.WriteLine("Press the Enter key to terminate service.") + Console.ReadLine() + End Using + End Sub + + Private Sub DisplayHostInfo(ByVal host As ServiceHost) + Console.WriteLine() + Console.WriteLine("***** Host Info *****") + + Console.WriteLine("Name: {0}", host.Description.ConfigurationName) + Console.WriteLine("Port: {0}", host.BaseAddresses(0).Port) + Console.WriteLine("LocalPath: {0}", host.BaseAddresses(0).LocalPath) + Console.WriteLine("Uri: {0}", host.BaseAddresses(0).AbsoluteUri) + Console.WriteLine("Scheme: {0}", host.BaseAddresses(0).Scheme) + Console.WriteLine("**********************") + Console.WriteLine() + End Sub +End Module diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/app.config b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/app.config new file mode 100644 index 0000000..97424a7 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceHost/app.config @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallService.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallService.vb new file mode 100644 index 0000000..fa5bccd --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallService.vb @@ -0,0 +1,28 @@ +' The key WCF namespace. +Imports System.ServiceModel + + _ +Public Interface IEightBall + ' Ask a question, receive an answer! + _ + Function ObtainAnswerToQuestion(ByVal userQuestion As String) As String +End Interface + + +Public Class MagicEightBallService + Implements IEightBall + ' Just for display purposes on the host. + Public Sub New() + Console.WriteLine("The 8-Ball awaits your question...") + End Sub + + Public Function ObtainAnswerToQuestion(ByVal userQuestion As String) As String _ + Implements IEightBall.ObtainAnswerToQuestion + Dim answers As String() = {"Future Uncertain", "Yes", "No", _ + "Hazy", "Ask again later", "Definitely"} + + ' Return a random response. + Dim r As New Random() + Return String.Format("{0}? {1}.", userQuestion, answers(r.Next(answers.Length))) + End Function +End Class diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.sln b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.sln new file mode 100644 index 0000000..978e6e6 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MagicEightBallServiceLib", "MagicEightBallServiceLib.vbproj", "{3DD68424-70DC-4A3F-8EB0-8AAC70C52B82}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3DD68424-70DC-4A3F-8EB0-8AAC70C52B82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DD68424-70DC-4A3F-8EB0-8AAC70C52B82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DD68424-70DC-4A3F-8EB0-8AAC70C52B82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DD68424-70DC-4A3F-8EB0-8AAC70C52B82}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.suo b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/MagicEightBallServiceLib.suo new file mode 100644 index 0000000000000000000000000000000000000000..11a203cc0e0fa4c43487625604fcbaab8735a0d2 GIT binary patch literal 15360 zcmeI2Uu;}Q6~@O2O29+vRNlh9$fo;^*}{#U z7nhcnT%j@CewsFs20o^*p9#iLV|@p7Cv+EdH}qNPbI?7|z0h{(K8WEr4?r4w(N69k zgdT!+L7#^nhQ0tj0(}vB6jI$!)2*X{5mV$hXJTf+6v#{FBBK;N?ZRTbG&`ES_F-xI zOkwoBmaVEM10tPaUlBe z8K@+0D?HBHdYbhmYNctXK1ufLNu#t{Hq-Qa%J%vU*Bsn@dAUjBZQ!3`1;q@SOHHcV zztv~GqvY{FXEI3H5AQNPnY3Cdxhkt(WAIm8A;XQzU-RBKItIT{#-_+vjB~wUl2-l& zdXeF-S!#v9k9(r>7gqa`evvWFqlGlwrnyeSQcd>x9vU<|^i?8ClsQeXUdJmd}b0)9?>0JCvW`ygcd7f*tXhi%Kqskve z?459BB5s>D?G<;KLjHehn5f;Vhi}Vu11HS-1 zjdCZ;%~P(}t%NPdh#*R~?f}yYIro7Y?$;5td2IXJ4#eBDeG zLXGoAZSwP|wsh@JYDakE^x#lwk`iHV%$$IC-dcooq~0oOEkhIZH-?skp7XZfG5S5n zeU`E!|Mj4)cB{z*SG_q$UMA02X|CJ^uCnPol1x~hp0}Rs?N9NyuplY|?OjLwE$`;> zzn;G|En5rY64h5s@Ndz&R558(`&a#40%6k1{4b&}d4$ywa6R&`hCf5-eg>{uhn)>{ zQ8eGhUK*$U=wJHW2}PA(;n`@=+(z4=vrNtEE6^uB`)cQbEG@(MYOdz&Tnv=5#w;+U znzyc}tfrwR58F&j3swGU*VGT0`|dcl6?eF_RN7+0V!hq{%^k9Mn_?;5Z>c=n^|nLg zf<>3?}=)Ewf0|R4Cb+U*K*kAPs3Bu;A*i@JM&+BC4W@@ z+MBwwGXGcR?_*&fojVoQUgPlB3P^ilQTabiUB#?Q!Z}%>m(l5Y0;wk{mH+Yoxcc>1 z=D(F+yp`(zZ}hA^xrIP}?8jP=^ymBZ=U;X0xVHG8B^J@`0AzwicbDnKv7g|s8uS8@;0Q^f#N*7IqNBmXyBiS4!O-in^ZePUnb@8*~3Ol$eI;^czYu&1Qm(jk%jqKY|6m(--jN8aqk%(4p zIdcgP1sk&^(DoU$F=3-87s2*1Dp`6U?JFI%yB;@E!g$DkuC*_U+IyM%vYQ2DNznI6 z$}|#M%~U;eealBfwv{w(_k7&D@5jG?_N~9aadqb}&Tbzxr9VB_`{d8gKmW_Wz52b8 z#kb#}F;dcWPdxbU;=8*CU;lab*RSlp*0WMg?HtLrqKw}+Vv3(LHhP}1BcYhVN6!mH z5RIZ|t@#x<&RWcE6g}q{IYou`6<5eu|69J=bB@YC9DjH}pmonI`cdSq^{Mj~ig#8|+JBHg6>p{0 zYrB8+ zPoDpFwgvHz-|G;Pme})%I_`c19%cN618d>m zL4EZ>$?vlYcgmo55}cO}%7ZH^Y&HVxk-rnZe*Nv#u>RefHsTHE@4N=f__Z$LcHlWadLt8j}v3-Yv;E& zz2uu;0T7BBJD^q){wrWA z^c65!x5jgP^1PX`yxe#HxP30t+h?ls1#1>X%(2(GkhTZ;V?o{;Ts7j6Tobs9!z4g5Ks)h&7UHjua%d42id*V)& zHR?yY(vMq1XWqXGo1Le1sIC22_qADg?M}iqlBep=H$onr>#5bedSCtOGDOd{lbUC= zmfM83u5O-9c>Ol&NzYB~$#P93EBrTN6m<@*b`<^m(Tc5LzO!ufJOb$)MeUnj%bN2$ z8~i(kmFsk?PBthq$&jnAzF#cIpLk6~sdI6f4H^5!a^AkTjd=^5gi0 zipF*0#Ph;XS-9_o&N7DIReSf>mBmfHKE3{Kbp&6oV~_E|btTDrJ7B6#u7}65ipSNv zm618Djg3XM + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {3DD68424-70DC-4A3F-8EB0-8AAC70C52B82} + Library + MagicEightBallServiceLib + MagicEightBallServiceLib + 512 + Windows + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MagicEightBallServiceLib.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MagicEightBallServiceLib.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.myapp b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/AssemblyInfo.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3985ff2 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a894f76 --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MagicEightBallServiceLib.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.resx b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.Designer.vb b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4a2e20c --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MagicEightBallServiceLib.My.MySettings + Get + Return Global.MagicEightBallServiceLib.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.settings b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MagicEightBall/MagicEightBallServiceLib/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MathService/MathClient/MathClient.sln b/Code/Chapter 25/MathService/MathClient/MathClient.sln new file mode 100644 index 0000000..5c0768a --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/MathClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MathClient", "MathClient.vbproj", "{CA708D29-7C87-401B-960B-CA6070106832}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CA708D29-7C87-401B-960B-CA6070106832}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CA708D29-7C87-401B-960B-CA6070106832}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CA708D29-7C87-401B-960B-CA6070106832}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CA708D29-7C87-401B-960B-CA6070106832}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MathService/MathClient/MathClient.suo b/Code/Chapter 25/MathService/MathClient/MathClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..199805e0435027e8ddd63f698f29cced28a97569 GIT binary patch literal 19456 zcmeI4-)|gO701U3l$I9yBPEm;(rucCmL?lJzn!!p_S#9@+O_L-oKUtj+uiZ6*t=$T z^9$Ni9#9cd#T)Q~)JjFF`hZl42aqZReLzs5wnCMV5D&l;LPF&qXu{`v@7&#)-SK+t zrm?r`wa(1!ojY@W+;h)4_uM;v_nlk+@$&0;{?ltJN4$;R2hjSdpbyp8p9VeyTo2p;d=~f|a3gRNa5M0EKz)u1c(($# z0h@r^fiD2tfG+}f0AB*`1nvU9415LH0^ALxfO~+gz`cOpDfpyZI|+ zT=6c^6UobFG{#XYd(f^tzww?O-<$Yj*G3xsP6|O817q2n^M=4a#nqs9(cVaS-0W@W z5`O8J&Iup$q`N9T-hOYd*U!0|W3RW9<8H3Ix$5C>fUBqKR8BzcIj@SGTsZ`OjSamo zDgLm%Tp9i>nDc<|(0jr!ysp%5w7J;Ky*ni^iW_q}%MMHfvIDN(*#P%jwm{=wb|7y2 ztDWBO+UuNT{HvYphR)kLe-*eNcmVhs@F1XjJ2|I;T|hU`1MCL&0DFObz<%HWa1iJP z4grUOhk%EHBf!^zqd*_f4`hG=U=TP490yJSL%<`zqrfmQ0z3wc0%O4Az&MZvCV-Q` zByb8i4SWN50{AA71D*uF1v~|u0rG(Oa=>N1%y4fOm;=rN^S}a70@VI$l>hYpxA5|P z?+yIs{hNOLY%Z;?Us3sAMjGOIFFbSC(VyJ-)|tgyW_Dke(Z5Ee3p~=>`OKl*$fZ<& zxqP;oo9s{JOT|=e#!sam8=Odu<>zZt<;p^8PoLAPop|-IMI7#QDl#crkzH8 zg;sgf`?}vK;{U^x3Eo;oyN01eRG;MNgU!`fmwEX%?2lpv#SGHNWtyAYqFK+VIQ#E= z1+Wi*y9y=KMk*ECr0p>k*uOhyl@!0mj(h1O_$KI^GJWwh$BT?)@qZpF3S2E$wh{#^ z)=}J(6u1(A-VF82$zE@h{z;$3lW0)gaz$h1_MlNS{(iXENIz>VhO9%aEgkoR zU;b7xcvActd%p_si}qK63|=yace?~f{pdj%3aZph@+$>BvPCIqkz7)E;K#5}6I@Ai z=c!lhRza6jc;bp_JIFCt*C}1i&{mqQ9!}x4_Zf_m_e|5M6D77j!`o+hLUNG*Y%Xpb zHP^57x85UrW94A2(lj-)xhWz7S#4>AD3fJS)LI3mpeu!xWIfLrS)|~l#&wapGWU9s zRyWU0^6s2@Qk+zILxHpBJ%0_bN|y6*GG%Z&-1^(R|4Q{w~c+6_X~#ulAb*`?oayOUO$ep}hrM4gc-z&j_+#0ITL)jHpw-N^83)p|0{yG8>YK4>WwO#^ph}U)K1^NYMa%pM z0``B)rxS#{vElA6QZ`qvytbj9syq1PZPIvCQaN33sQ)(eZEKNB#(Fg@T{JRNY#N>VKI&IET*LH-~k844jGv+r>iNf&PpCq~l-lntZUz063Py?_yyWo!cj( z$29mg7gioDDSpMO&Tq-iNdp~^R?bs!Jx#6rkGm7a>wYo*4PN0^arN!anx35x6g1GE z=eoX&d+KA_+|9Ik0Ozb!$N}mOa@@((x|^wXKUcj>uazp-y=|}7+}_TKFx9D z{}$`9y=L7Tp;NQ)y&PAG3bZ0mnVS8OwFe@f#kUr*j`Fw-yf%KeSV0F?^-#1;RJ+yo zdT;wxrtPrFE?ix16&WiM(X7q)o&iJ2#B3R)eG+L*(KXT;MX>#}EW(qduX5OAJ+3Z2 z4ga}PS};>kuUX$Lvn|a&rqFrY6PnE|{pQ0V-O75~Zv3F{!54pj;`P71_RgkXoVt0~ ztNiJaz6X9b_vovCed+t-mw){lFQa6=gHyM^dHKyP!>|0j_{*PedB1n5mdYkcx03YV z<0-|@1rt3ln4VC~;G*aAL=bV&v*!GY8yD%T_~_ZE=M*j48JVu)qUQzE*E2>J8gteh z)>Jw$!&A}dxeGbG-67Q4JcOHvr?4tM8lt&_JcVLZMdOXq=;=n?@>iNSy^Zdz&)H8j z7oi-@)5a$#I?SQb;Y>vjqhI=FvqyhO$kQlK%wfSb*J<|glO}`OUWVj96mXcFaZ>+t zFYT2hRnh!TwybLAP(HT2nF`x(siT|!%cmv9AC5nqAJDvK5n2>^ORCmeDBfvbgkN)c z`SYas@1yOHG!!W((Pd%Hn;5iM_n9^y)`+ug>(-;>FTAd_wrH&h^M3-JDjM7+c%Fxv zV^AZ%At@xnzvB2KjDOU`KC)6J1JfbN4^XpQ4iNdT82=7LQj?3JxLk)UW`&$b(tfv3 zYfW?I_%%lF4_@H%tQy-@Y<3o_Egh5xS5&xM53Gj&0=V7$`=iO|Ov6oqxrL(G8MshP zGS6SsVnuU1Bk)}`k)%(I=WLnc^fwdQvbE&p1k|hla&WrHUmE^3W3rLFwU2-A06wgb zvH7=Tz36&MG3KAwl*4v;#Hi*qd(ytxKGQ6@vve<-w{$(D+;nI05pN6RW8YY}8kWSG zX}0{Ab<08fF*0PVxbiWDdUoDvn6j@)BhIz7($PNBe9exSi(ENg;3qCSK#|@hjO;G&S?(1e)}ugsEv;twacpWY-@ZZV)qKU zIhXP`+gfH|Rq|q!Koe8Zx9BDr1XcM z312(oqeL?JZ~V!nM}VEi#wZ{?Y@l zq@Q?>y{AFi#fTW*Gm2c6&NRzM#=qMqU!+WYr%0%5@_e}vukm{<((t7nN!p{>8GRqe zS!Yu(9n~I*IL+I%M14AlWZj;XLDPSu?9(|$q;{M&psk_4-|Fq)*C4j{q`9ZP&O3+( z$61ldQ2#K?d#ZT~8ZJ?PiTSZ_-eI$|+WDeYD7|Nly@P$UImW)VaoP)$U6rzHQd^-U z^xcU0)%rWAHYe?!wYuk4VC5;aqM@;@QCH&`zCfQy$jhnKyHv#)@p({4PW7(fVS$S>~ihUMcko2g=RC`JUjsH8|fJ zoV$bb-r&3~INukXw+CnYHoJe>$|o9E#PREPYUSu3yPHWlcKOn?$mcvOU1_rqOOgK+ zva>6>Y1&AJS_fO8R=HWNy(q(VynlG;2awVk)*%`Lr_9d6)>WivE3L6c+i1SiT5COw zy&m1I z+G@2@c+IdhwYxTcU+Z!{BTG-nBdA}}=$BnP)s7sk^(cxFh}JV}N~?C?Mrj>K&f3j3 z3*|nvTl+tYr;`o*4rkrd`b``+`iAIg`QP1O=mz$2Jb<@7&_b*ILLiQge4UQQf}4VXslva zN)!{v(SGC_OVsvy93{Qil#*5pl&#}mi(b^14p9r_MzwO#CGXoUz2~gF)*z!#y0Im@ zs@Y)kU0E@GKV{dWwOUg(HdtSYw0^sgj?9O&PH$Iu^!8TVj@o$K@&K~@HmY_!^ zRu8=L=u!XmBH9PZ-w~EXr^O=L85!k!spuulww^jnU#G+p%X>-3mAqvG zvYA0vg%HFiTywaevCM_$B`NK`yAO*Yt${bwW@2VznrN1^*hsOU=}3 zi-&gYx^Uq_`of-cxiY + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {CA708D29-7C87-401B-960B-CA6070106832} + Exe + MathClient.Program + MathClient + MathClient + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MathClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MathClient.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + True + True + Reference.svcmap + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Application.Designer.vb b/Code/Chapter 25/MathService/MathClient/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Application.myapp b/Code/Chapter 25/MathService/MathClient/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 25/MathService/MathClient/My Project/AssemblyInfo.vb b/Code/Chapter 25/MathService/MathClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..05941a2 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Resources.Designer.vb b/Code/Chapter 25/MathService/MathClient/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a4d0a06 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MathClient.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Resources.resx b/Code/Chapter 25/MathService/MathClient/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Settings.Designer.vb b/Code/Chapter 25/MathService/MathClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d299a5a --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MathClient.My.MySettings + Get + Return Global.MathClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathClient/My Project/Settings.settings b/Code/Chapter 25/MathService/MathClient/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MathService/MathClient/Program.vb b/Code/Chapter 25/MathService/MathClient/Program.vb new file mode 100644 index 0000000..b25b4da --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Program.vb @@ -0,0 +1,26 @@ +Imports MathClient.ServiceReference1 +Imports System.Threading + +Module Program + Private proxy As New BasicMathClient + + Sub Main() + Console.WriteLine("***** The Async Math Client *****") + + proxy.Open() + + Dim result As IAsyncResult = proxy.BeginAdd(10, 10, _ + New AsyncCallback(AddressOf AddCallback), Nothing) + + While Not result.IsCompleted + Thread.Sleep(200) + End While + + proxy.Close() + Console.ReadLine() + End Sub + + Sub AddCallback(ByVal i As IAsyncResult) + Console.WriteLine("10 + 10 = {0}", proxy.EndAdd(i)) + End Sub +End Module diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.disco b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.disco new file mode 100644 index 0000000..e7bdddb --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.disco @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.wsdl b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.wsdl new file mode 100644 index 0000000..42e5af2 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.wsdl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.xsd b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.xsd new file mode 100644 index 0000000..095d9f6 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.wsdl b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.wsdl new file mode 100644 index 0000000..9385f0d --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.wsdl @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://localhost:8080/MathServiceLibrary + + host/InterUber.intertech-inc.com + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.xsd b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.xsd new file mode 100644 index 0000000..d00d787 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/MathService1.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.svcmap b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.svcmap new file mode 100644 index 0000000..3e42740 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.svcmap @@ -0,0 +1,32 @@ + + + + true + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.vb b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.vb new file mode 100644 index 0000000..81173a7 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/Reference.vb @@ -0,0 +1,138 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace ServiceReference1 + + _ + Public Interface IBasicMath + + _ + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + + _ + Function BeginAdd(ByVal x As Integer, ByVal y As Integer, ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult + + Function EndAdd(ByVal result As System.IAsyncResult) As Integer + End Interface + + _ + Public Interface IBasicMathChannel + Inherits ServiceReference1.IBasicMath, System.ServiceModel.IClientChannel + End Interface + + _ + Partial Public Class AddCompletedEventArgs + Inherits System.ComponentModel.AsyncCompletedEventArgs + + Private results() As Object + + Public Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) + MyBase.New(exception, cancelled, userState) + Me.results = results + End Sub + + Public ReadOnly Property Result() As Integer + Get + MyBase.RaiseExceptionIfNecessary + Return CType(Me.results(0),Integer) + End Get + End Property + End Class + + _ + Partial Public Class BasicMathClient + Inherits System.ServiceModel.ClientBase(Of ServiceReference1.IBasicMath) + Implements ServiceReference1.IBasicMath + + Private onBeginAddDelegate As BeginOperationDelegate + + Private onEndAddDelegate As EndOperationDelegate + + Private onAddCompletedDelegate As System.Threading.SendOrPostCallback + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal endpointConfigurationName As String) + MyBase.New(endpointConfigurationName) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(binding, remoteAddress) + End Sub + + Public Event AddCompleted As System.EventHandler(Of AddCompletedEventArgs) + + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Implements ServiceReference1.IBasicMath.Add + Return MyBase.Channel.Add(x, y) + End Function + + _ + Public Function BeginAdd(ByVal x As Integer, ByVal y As Integer, ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult Implements ServiceReference1.IBasicMath.BeginAdd + Return MyBase.Channel.BeginAdd(x, y, callback, asyncState) + End Function + + _ + Public Function EndAdd(ByVal result As System.IAsyncResult) As Integer Implements ServiceReference1.IBasicMath.EndAdd + Return MyBase.Channel.EndAdd(result) + End Function + + Private Function OnBeginAdd(ByVal inValues() As Object, ByVal callback As System.AsyncCallback, ByVal asyncState As Object) As System.IAsyncResult + Dim x As Integer = CType(inValues(0),Integer) + Dim y As Integer = CType(inValues(1),Integer) + Return Me.BeginAdd(x, y, callback, asyncState) + End Function + + Private Function OnEndAdd(ByVal result As System.IAsyncResult) As Object() + Dim retVal As Integer = Me.EndAdd(result) + Return New Object() {retVal} + End Function + + Private Sub OnAddCompleted(ByVal state As Object) + If (Not (Me.AddCompletedEvent) Is Nothing) Then + Dim e As InvokeAsyncCompletedEventArgs = CType(state,InvokeAsyncCompletedEventArgs) + RaiseEvent AddCompleted(Me, New AddCompletedEventArgs(e.Results, e.Error, e.Cancelled, e.UserState)) + End If + End Sub + + Public Overloads Sub AddAsync(ByVal x As Integer, ByVal y As Integer) + Me.AddAsync(x, y, Nothing) + End Sub + + Public Overloads Sub AddAsync(ByVal x As Integer, ByVal y As Integer, ByVal userState As Object) + If (Me.onBeginAddDelegate Is Nothing) Then + Me.onBeginAddDelegate = AddressOf Me.OnBeginAdd + End If + If (Me.onEndAddDelegate Is Nothing) Then + Me.onEndAddDelegate = AddressOf Me.OnEndAdd + End If + If (Me.onAddCompletedDelegate Is Nothing) Then + Me.onAddCompletedDelegate = AddressOf Me.OnAddCompleted + End If + MyBase.InvokeAsync(Me.onBeginAddDelegate, New Object() {x, y}, Me.onEndAddDelegate, Me.onAddCompletedDelegate, userState) + End Sub + End Class +End Namespace diff --git a/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/configuration.svcinfo b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/configuration.svcinfo new file mode 100644 index 0000000..f60c728 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/Service References/ServiceReference1/configuration.svcinfo @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathClient/app.config b/Code/Chapter 25/MathService/MathClient/app.config new file mode 100644 index 0000000..29ebcb0 --- /dev/null +++ b/Code/Chapter 25/MathService/MathClient/app.config @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/App.config b/Code/Chapter 25/MathService/MathServiceLibrary/App.config new file mode 100644 index 0000000..22937be --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/App.config @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/IBasicMath.vb b/Code/Chapter 25/MathService/MathServiceLibrary/IBasicMath.vb new file mode 100644 index 0000000..a5ead2e --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/IBasicMath.vb @@ -0,0 +1,5 @@ + _ +Public Interface IBasicMath + _ + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer +End Interface diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/MathService.vb b/Code/Chapter 25/MathService/MathServiceLibrary/MathService.vb new file mode 100644 index 0000000..92761d8 --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/MathService.vb @@ -0,0 +1,7 @@ +Public Class MathService + Implements IBasicMath + + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Implements IBasicMath.Add + Return x + y + End Function +End Class diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.sln b/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.sln new file mode 100644 index 0000000..6404ab4 --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MathServiceLibrary", "MathServiceLibrary.vbproj", "{B0856391-C33E-4223-A2A4-A567C0962F28}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B0856391-C33E-4223-A2A4-A567C0962F28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0856391-C33E-4223-A2A4-A567C0962F28}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0856391-C33E-4223-A2A4-A567C0962F28}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0856391-C33E-4223-A2A4-A567C0962F28}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.suo b/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..3b9037d2de243cb7c5536d7663b216b1b09e6ca1 GIT binary patch literal 18432 zcmeHPUu+yl86U@_G_*7{ZbK-=Y#k@0G`XJtq>bYc>O0$sTRV1rjve4ibH3X<6RjjV<5%<{2TX0X1>2pHt z!VRBS*Vfilp%A#eo0^CNpMcg+S!2kt-VOLP;9kHUz-IuT1>6U?AMgNRF95?Y9s)cF z*av6>JPe>LbRhpc-~iwYfJXpd1Uw4(5}+OMWq<*A48U&)chlB$U{d7pSHxHhi7fKG zSiy++Px~P;nri9;uXOW`18px){h_55m99}RkS2gJC+5WnuqSahBrdBLKCk=5t`_2_ zj4}85nUr7F?GjIkUJ*hb#I;Wx!?hdtLELrWZxDAcu2VS$YL`R-eA4M8@N;f(KKR9N z*O&F-j{tKFU~2S&_=#7i^%ovD`|+-q7bHFRm{SjY8$dmv%e4+*A9a~s2iWI7^?}v_ zod3E$bFcYNeR0sLf5^(eg8T^JaqIaB+`4;Lp$Y({ohQQLaPOF2~?*g z)#q_FflZeeYBb&n{X<`YJ_F^oMs@j`H1iuKt^ZBTfFk%{0)JYhBv?)#xw&i#DMJ* zt|{Q8^NYU~b$45W69JYbj5qrl#(l!dl`lZ9cqfiOH30RyU;MjK zS6k2sFvl$^AkT?EFD7wKLFbw^y%FLkUY)$DRd4O%Pl=la2U3#rc`<`AD1xFnl-J@t zTciAumFyE~U|Frixk6jXRE|Gn&GbuBV^BL3J?S_C{8YE}!TsXr-1|L%iL}252*XN7 zVck~HqY&gE2Wc#zWExKfctTxdfEMz_fCWAW{WOI;N^S<_^xg81WdoKtFY6BB8eNwu z-p!#dC7UB`z-k|t7|HLsvROw;+{&q?X7M%k=nB5xeA4r9vn{b5>MO-ZrPWfBQu1UN zbZ4YQv1imQ^m+?`BzkXv%hbM0l9vW}QN(=$WjVa-1Gj^6B*M7z%Odgu^0?%{Yn#Ga zE`RjDsSEsSpu^B+dhYp^KdvLS{x8Q*PEpqEdI{C5Cg5*jd-O^D;-{|MPbG|09sdfX znHIrY18$`MUixPYyk7uT%J+=Li=21~_R4FyV*3&>qje{?otEQZbAY%i`5=Fzw%FCkv5oV5ICyg z*S@g!&ea#rYXJBe592!6FMftTwB4beqXg+bDn2LC>l8|9>GT^XUj2mmFYyvLlP>ql z87o<~1k76SeMJ6Y@&3T>Q>_U3t*!lUmvjwSdg6tB)UYxcQQq%bf7bEgw_9F;qY%WB z`#6^0Juq5bSgMC{*8@l47?$SU`0K&l0P+Dm^A2^%w=wjTK15ntKH7HLzs2>n0axv< z(rfOQYy1tOLQEhG68k`4H!N~DhqDZUE~S?TkI!R_6vxfnj z{jHZ4My3ZqC*@`teF=khF3>p=wD2X%Ufy!QO|~MU^S)08p7`N!&tCo8yEoe2nb|uk z@_&4G;PIc%Klh8jzWM#h)%V^-V@MHkBKgqu)$8q}SALfGEUEFM?)rF;CA3Tw8K2MM&9Z-XKb9#egyY>X!enf>XDsw2*YHixw}Bn3vyqufFD< zcK!G#@bM9=0Uc-OxKn;3(AU&K^uWlOS|hNL{yz`gI{vaf;&=nDbC#=&=F&aRxSyVx zj14zeKiq8rZQNh#)-c;c!bYSI#AresmQH!MdVCl=Y!-j5WUskeQ1W&ece*c}*HgAJ zqBo_YQ#0s!68eRDU3>b<+UR(C7rcOxvKl2%fWH23Y%Op7K7l`bs4Zy8vn=(2L5~j` z+J}wrb!e$|j-VcQu6RG#K+ifWEMNia%4x(&g3=4*)hk`NVHr}dN*?d(_gJ=vK5@5L zdw%}UR(%r4pEurUY4q~Hx)8^xmAL-nUMA1=`RlPj3`&Tb048tzJ*tw&mH3I5=Z^g1 z=i2ilt4(kGy&jm=D~+G$o&4heChGpHX3PF75U)=Dzfv_fy7TI-jsE-e!|l|ywW->P z{=~JtxAxIm*6uxa&FB^-yE$mizGcriL@7II7ZxLF9~&BA4lygtPg3P&bhkN@CT z<>$A~gd*W3)N9Uj0q)Z2^mdfxT!c5o^QZGyhrhRiv#C0wNgjbWVfu#EBgvfg{%|F* z#?2r`+N>PS$v9!u#tVOEGy;gL@q|-yNA-MX^@fq7HlLD=YS_l36p!N!&@k2uXRzba zVUvpvoYNh|re6sANqon1)JL%6QQ&6;cEO53xt-DBNvP5p9Y%@t z37x3zgifR^eyi|gzmh2R z_>~>jW3FzCa;7jATtHld*4KU}xYYONwWeyPvwXC9>Xl~#^?6+H-lv;(Xq#=Us%=q2!+vHvLIVm**J zo=c5jwlN;hxfcK}YG072Md-)TOC*riiw&ifCqtdIPC|aTqnDO_3s~{IH2O+A^s=;v z+74CrhQE(doVTCEa_6Bw1ze4n-QZkM@-v9DH{F18TGi=yH?Ed!c_SpClB>?Bn~IOq zqj000zYWCxKm)}oTf+MdvcFtNXl)f$yFYKgbg*a&@6E*o}wE`oQB^AjqqgnvDtwe@Cn ziJcS8W-tBgHG3}`>7DR5nQr>XPG7UwyV|-{_li2U1d;F%;>BRZ-E@}&k^|e}SAf;e XEHIkZd?!1czOssUsQ<=t`-SfRoYEX6 literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.vbproj b/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.vbproj new file mode 100644 index 0000000..76381eb --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/MathServiceLibrary.vbproj @@ -0,0 +1,108 @@ + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B0856391-C33E-4223-A2A4-A567C0962F28} + Library + MathServiceLibrary + MathServiceLibrary + {3D9AD99F-2412-4246-B90B-4EAA41C64699};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + /client:"WcfTestClient.exe" + v3.5 + On + Binary + Off + On + + + true + full + true + true + false + bin\Debug\ + MathServiceLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MathServiceLibrary.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ab3f284 --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.Designer.vb b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bec35e9 --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MathServiceLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.resx b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.Designer.vb b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1f55685 --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MathServiceLibrary.My.MySettings + Get + Return Global.MathServiceLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.settings b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MathService/MathServiceLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.Designer.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.Designer.vb new file mode 100644 index 0000000..6d9786d --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.Designer.vb @@ -0,0 +1,48 @@ +Imports System.ServiceProcess + + _ +Partial Class MathWinService + Inherits System.ServiceProcess.ServiceBase + + 'UserService overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + ' The main entry point for the process + _ + _ + Shared Sub Main() + Dim ServicesToRun() As System.ServiceProcess.ServiceBase + + ' More than one NT Service may run within the same process. To add + ' another service to this process, change the following line to + ' create a second service object. For example, + ' + ' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService} + ' + ServicesToRun = New System.ServiceProcess.ServiceBase() {New MathWinService} + + System.ServiceProcess.ServiceBase.Run(ServicesToRun) + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + ' NOTE: The following procedure is required by the Component Designer + ' It can be modified using the Component Designer. + ' Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + components = New System.ComponentModel.Container() + Me.ServiceName = "Service1" + End Sub + +End Class diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.vb new file mode 100644 index 0000000..08f2a63 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWinService.vb @@ -0,0 +1,41 @@ +' Be sure to import these namespaces: +Imports MathServiceLibrary +Imports System.ServiceModel + +Partial Public Class MathWinService + ' A member variable of type ServiceHost. + Private myHost As ServiceHost + + Public Sub New() + InitializeComponent() + End Sub + + Protected Overloads Overrides Sub OnStart(ByVal args As String()) + ' Just to be really safe. + If myHost IsNot Nothing Then + myHost.Close() + myHost = Nothing + End If + + ' Create the host. + myHost = New ServiceHost(GetType(MathService)) + + ' The ABCs in code! + Dim address As New Uri("http://localhost:8080/MathServiceLibrary") + Dim binding As New WSHttpBinding() + Dim contract As Type = GetType(IBasicMath) + + ' Add this endpoint. + myHost.AddServiceEndpoint(contract, binding, address) + + ' Open the host. + myHost.Open() + End Sub + + Protected Overloads Overrides Sub OnStop() + ' Shut down the host. + If myHost IsNot Nothing Then + myHost.Close() + End If + End Sub +End Class diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.sln b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.sln new file mode 100644 index 0000000..0f5a856 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MathWindowsServiceHost", "MathWindowsServiceHost.vbproj", "{46C0E086-7664-46C8-BE64-7E6B9B6FB0F0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {46C0E086-7664-46C8-BE64-7E6B9B6FB0F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46C0E086-7664-46C8-BE64-7E6B9B6FB0F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46C0E086-7664-46C8-BE64-7E6B9B6FB0F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46C0E086-7664-46C8-BE64-7E6B9B6FB0F0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.suo b/Code/Chapter 25/MathService/MathWindowsServiceHost/MathWindowsServiceHost.suo new file mode 100644 index 0000000000000000000000000000000000000000..670d44d6c0c3728a13ac26d7e1ef4a9d0e9a3b8d GIT binary patch literal 20480 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {46C0E086-7664-46C8-BE64-7E6B9B6FB0F0} + WinExe + MathWindowsServiceHost.MathWinService + MathWindowsServiceHost + MathWindowsServiceHost + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MathWindowsServiceHost.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MathWindowsServiceHost.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\MathServiceLibrary\bin\Debug\MathServiceLibrary.dll + + + + + + + 3.0 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + True + Application.myapp + + + Component + + + MathWinService.vb + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ProjectInstaller.vb + + + Component + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + ProjectInstaller.vb + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.Designer.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.myapp b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.myapp new file mode 100644 index 0000000..602de37 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 3 + true + diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/AssemblyInfo.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4d7c3bb --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.Designer.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5ba3ebc --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MathWindowsServiceHost.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.resx b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.Designer.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3ff61de --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MathWindowsServiceHost.My.MySettings + Get + Return Global.MathWindowsServiceHost.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.settings b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.Designer.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.Designer.vb new file mode 100644 index 0000000..d40bd30 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.Designer.vb @@ -0,0 +1,46 @@ + Partial Class ProjectInstaller + Inherits System.Configuration.Install.Installer + + 'Installer overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Component Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Component Designer + 'It can be modified using the Component Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.ServiceProcessInstaller1 = New System.ServiceProcess.ServiceProcessInstaller + Me.ServiceInstaller1 = New System.ServiceProcess.ServiceInstaller + ' + 'ServiceProcessInstaller1 + ' + Me.ServiceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem + Me.ServiceProcessInstaller1.Password = Nothing + Me.ServiceProcessInstaller1.Username = Nothing + ' + 'ServiceInstaller1 + ' + Me.ServiceInstaller1.ServiceName = "Math Service" + Me.ServiceInstaller1.StartType = System.ServiceProcess.ServiceStartMode.Automatic + ' + 'ProjectInstaller + ' + Me.Installers.AddRange(New System.Configuration.Install.Installer() {Me.ServiceProcessInstaller1, Me.ServiceInstaller1}) + + End Sub + Friend WithEvents ServiceProcessInstaller1 As System.ServiceProcess.ServiceProcessInstaller + Friend WithEvents ServiceInstaller1 As System.ServiceProcess.ServiceInstaller + +End Class diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.resx b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.resx new file mode 100644 index 0000000..544fb94 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 197, 17 + + + False + + \ No newline at end of file diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.vb b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.vb new file mode 100644 index 0000000..f64fbad --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/ProjectInstaller.vb @@ -0,0 +1,16 @@ +Imports System.ComponentModel +Imports System.Configuration.Install + +Public Class ProjectInstaller + + Public Sub New() + MyBase.New() + + 'This call is required by the Component Designer. + InitializeComponent() + + 'Add initialization code after the call to InitializeComponent + + End Sub + +End Class diff --git a/Code/Chapter 25/MathService/MathWindowsServiceHost/app.config b/Code/Chapter 25/MathService/MathWindowsServiceHost/app.config new file mode 100644 index 0000000..efc5cc4 --- /dev/null +++ b/Code/Chapter 25/MathService/MathWindowsServiceHost/app.config @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/IAutoLotService.vb b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/IAutoLotService.vb new file mode 100644 index 0000000..e18d79b --- /dev/null +++ b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/IAutoLotService.vb @@ -0,0 +1,23 @@ + _ +Public Interface IAutoLotService + _ + Sub InsertCar(ByVal id As Integer, ByVal make As String, ByVal color As String, ByVal petname As String) + + _ + Sub InsertCar(ByVal car As InventoryRecord) + + _ + Function GetInventory() As InventoryRecord() +End Interface + + _ +Public Class InventoryRecord + _ + Public ID As Integer + _ + Public Make As String + _ + Public Color As String + _ + Public PetName As String +End Class diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/VbAutoLotWCFService.vb b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/VbAutoLotWCFService.vb new file mode 100644 index 0000000..6cb599f --- /dev/null +++ b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/App_Code/VbAutoLotWCFService.vb @@ -0,0 +1,50 @@ +Imports AutoLotConnectedLayer +Imports System.Data +Imports System.Collections.Generic + +Public Class VbAutoLotWCFService + Implements IAutoLotService + Private Const ConnString As String = "Data Source=(local)\SQLEXPRESS;Initial Catalog" & _ + "=AutoLot;Integrated Security=True" + + Public Sub InsertCar(ByVal id As Integer, ByVal make As String, _ + ByVal color As String, ByVal petname As String) _ + Implements IAutoLotService.InsertCar + Dim d As New InventoryDAL() + d.OpenConnection(ConnString) + d.InsertAuto(id, color, make, petname) + d.CloseConnection() + End Sub + + Public Sub InsertCarWithDetails(ByVal car As InventoryRecord) Implements IAutoLotService.InsertCar + Dim d As New InventoryDAL() + d.OpenConnection(ConnString) + d.InsertAuto(car.ID, car.Color, car.Make, car.PetName) + d.CloseConnection() + End Sub + + Public Function GetInventory() As InventoryRecord() Implements IAutoLotService.GetInventory + ' First, get the DataTable from the database. + Dim d As New InventoryDAL() + d.OpenConnection(ConnString) + Dim dt As DataTable = d.GetAllInventory() + d.CloseConnection() + + ' Now make a List to contain the records. + Dim records As New List(Of InventoryRecord)() + + ' Copy the data table into List<> of custom contracts. + Dim reader As DataTableReader = dt.CreateDataReader() + While reader.Read() + Dim r As New InventoryRecord() + r.ID = CInt(reader("CarID")) + r.Color = DirectCast(reader("Color"), String).Trim() + r.Make = DirectCast(reader("Make"), String).Trim() + r.PetName = DirectCast(reader("PetName"), String).Trim() + records.Add(r) + End While + + ' Transform List to array of InventoryRecord types. + Return DirectCast(records.ToArray(), InventoryRecord()) + End Function +End Class diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll new file mode 100644 index 0000000000000000000000000000000000000000..2b301c5a2fa15102f04313b8cdc92214503e045c GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll.refresh b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..6f29ca65f73c72c11d053171efa56e79fb3455be GIT binary patch literal 204 zcmZ{dI}XAy5C!KbK7k830g!Y7Q6MTepcsM(1cjvF^1!5`LaW{P*|+xR9f>6SH`lxf zEa|K(Pq%wj;J}?)9B9a5WJAeLwsqI)pSCD9`TRIaf{o0#}HD(`Xvx&gWN-P+4 ZIx2ghP*=J~F8-L*Sw3?9lZ?LIT3>)_Bj^AC literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.pdb b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ae0af7f1f1c27151458d72beb8a2c2889f7cc294 GIT binary patch literal 42496 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.xml b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.xml new file mode 100644 index 0000000..b8e562a --- /dev/null +++ b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Bin/AutoLotDAL.xml @@ -0,0 +1,24 @@ + + + + +AutoLotDAL + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Service.svc b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Service.svc new file mode 100644 index 0000000..7c2c83b --- /dev/null +++ b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Service.svc @@ -0,0 +1 @@ +<%@ ServiceHost Language="VB" Debug="true" Service="VbAutoLotWCFService" CodeBehind="~/App_Code/VbAutoLotWCFService.vb" %> \ No newline at end of file diff --git a/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Web.config b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Web.config new file mode 100644 index 0000000..7eb8b40 --- /dev/null +++ b/Code/Chapter 25/VbAutoLotWCFService/VbAutoLotWCFService/Web.config @@ -0,0 +1,198 @@ + + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 26/CreditCheckApp/CreditCheckApp.sln b/Code/Chapter 26/CreditCheckApp/CreditCheckApp.sln new file mode 100644 index 0000000..fcbd361 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/CreditCheckApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CreditCheckApp", "CreditCheckApp.vbproj", "{30B1728C-65A5-4FAC-B1D8-73A67090D2BE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {30B1728C-65A5-4FAC-B1D8-73A67090D2BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {30B1728C-65A5-4FAC-B1D8-73A67090D2BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {30B1728C-65A5-4FAC-B1D8-73A67090D2BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {30B1728C-65A5-4FAC-B1D8-73A67090D2BE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 26/CreditCheckApp/CreditCheckApp.suo b/Code/Chapter 26/CreditCheckApp/CreditCheckApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..f3d6ad70a30416e40475d0eb06212acb0cc4a012 GIT binary patch literal 22016 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {30B1728C-65A5-4FAC-B1D8-73A67090D2BE} + WinExe + CreditCheckApp.My.MyApplication + CreditCheckApp + CreditCheckApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + CreditCheckApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CreditCheckApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\CreditCheckWFLib\bin\CreditCheckWFLib.dll + + + + + + + + 3.0 + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckApp/CreditCheckApp.vbproj.user b/Code/Chapter 26/CreditCheckApp/CreditCheckApp.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/CreditCheckApp.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckApp/MainForm.Designer.vb b/Code/Chapter 26/CreditCheckApp/MainForm.Designer.vb new file mode 100644 index 0000000..b7fd890 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/MainForm.Designer.vb @@ -0,0 +1,73 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtCustomerID = New System.Windows.Forms.TextBox + Me.label1 = New System.Windows.Forms.Label + Me.btnCheckCustomerCredit = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'txtCustomerID + ' + Me.txtCustomerID.Location = New System.Drawing.Point(120, 23) + Me.txtCustomerID.Name = "txtCustomerID" + Me.txtCustomerID.Size = New System.Drawing.Size(100, 20) + Me.txtCustomerID.TabIndex = 5 + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(20, 23) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(84, 13) + Me.label1.TabIndex = 4 + Me.label1.Text = "Check my Credit" + ' + 'btnCheckCustomerCredit + ' + Me.btnCheckCustomerCredit.Location = New System.Drawing.Point(23, 64) + Me.btnCheckCustomerCredit.Name = "btnCheckCustomerCredit" + Me.btnCheckCustomerCredit.Size = New System.Drawing.Size(197, 23) + Me.btnCheckCustomerCredit.TabIndex = 3 + Me.btnCheckCustomerCredit.Text = "Check Credit" + Me.btnCheckCustomerCredit.UseVisualStyleBackColor = True + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(248, 106) + Me.Controls.Add(Me.txtCustomerID) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.btnCheckCustomerCredit) + Me.Name = "MainForm" + Me.Text = "Credit Checker" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents txtCustomerID As System.Windows.Forms.TextBox + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents btnCheckCustomerCredit As System.Windows.Forms.Button + +End Class diff --git a/Code/Chapter 26/CreditCheckApp/MainForm.resx b/Code/Chapter 26/CreditCheckApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckApp/MainForm.vb b/Code/Chapter 26/CreditCheckApp/MainForm.vb new file mode 100644 index 0000000..a553c27 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/MainForm.vb @@ -0,0 +1,24 @@ +' Need the WF runtime! +Imports System.Workflow.Runtime + +' Be sure to reference our custom WF library. +Imports CreditCheckWFLib + +Public Class MainForm + + Private Sub btnCheckCustomerCredit_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnCheckCustomerCredit.Click + ' Create the WF runtime. + Dim wfRuntime As New WorkflowRuntime() + + ' Get ID in the TextBox to pass to the workflow. + Dim args As New Dictionary(Of String, Object)() + args.Add("ID", Integer.Parse(txtCustomerID.Text)) + + ' Get an instance of our WF. + Dim myWorkflow As WorkflowInstance = wfRuntime.CreateWorkflow(GetType(CreditCheckWF), args) + + ' Start it up! + myWorkflow.Start() + End Sub +End Class diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Application.Designer.vb b/Code/Chapter 26/CreditCheckApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..09c38a3 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.CreditCheckApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Application.myapp b/Code/Chapter 26/CreditCheckApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckApp/My Project/AssemblyInfo.vb b/Code/Chapter 26/CreditCheckApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ca51cff --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Resources.Designer.vb b/Code/Chapter 26/CreditCheckApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c7daac1 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CreditCheckApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Resources.resx b/Code/Chapter 26/CreditCheckApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Settings.Designer.vb b/Code/Chapter 26/CreditCheckApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..0d3bc66 --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CreditCheckApp.My.MySettings + Get + Return Global.CreditCheckApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 26/CreditCheckApp/My Project/Settings.settings b/Code/Chapter 26/CreditCheckApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 26/CreditCheckApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.designer.vb b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.designer.vb new file mode 100644 index 0000000..87a1849 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.designer.vb @@ -0,0 +1,74 @@ + _ +Partial Class CreditCheckWF + + 'NOTE: The following procedure is required by the Workflow Designer + 'It can be modified using the Workflow Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.CanModifyActivities = True + Dim ruleconditionreference1 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference + Me.ShowDenyMessageActivity = New System.Workflow.Activities.CodeActivity + Me.ProcessCreditRiskActivity = New System.Workflow.Activities.CodeActivity + Me.PurchaseCarActivity = New System.Workflow.Activities.CodeActivity + Me.CreditCheckFailed = New System.Workflow.Activities.IfElseBranchActivity + Me.CreditCheckOK = New System.Workflow.Activities.IfElseBranchActivity + Me.CreditCheckPassedActivity = New System.Workflow.Activities.IfElseActivity + Me.ValidateCreditActivity = New System.Workflow.Activities.CodeActivity + ' + 'ShowDenyMessageActivity + ' + Me.ShowDenyMessageActivity.Name = "ShowDenyMessageActivity" + AddHandler Me.ShowDenyMessageActivity.ExecuteCode, AddressOf Me.CreditDenied + ' + 'ProcessCreditRiskActivity + ' + Me.ProcessCreditRiskActivity.Name = "ProcessCreditRiskActivity" + AddHandler Me.ProcessCreditRiskActivity.ExecuteCode, AddressOf Me.ProcessCreditRisk + ' + 'PurchaseCarActivity + ' + Me.PurchaseCarActivity.Name = "PurchaseCarActivity" + AddHandler Me.PurchaseCarActivity.ExecuteCode, AddressOf Me.PurchaseCar + ' + 'CreditCheckFailed + ' + Me.CreditCheckFailed.Activities.Add(Me.ProcessCreditRiskActivity) + Me.CreditCheckFailed.Activities.Add(Me.ShowDenyMessageActivity) + Me.CreditCheckFailed.Name = "CreditCheckFailed" + ' + 'CreditCheckOK + ' + Me.CreditCheckOK.Activities.Add(Me.PurchaseCarActivity) + ruleconditionreference1.ConditionName = "Condition1" + Me.CreditCheckOK.Condition = ruleconditionreference1 + Me.CreditCheckOK.Name = "CreditCheckOK" + ' + 'CreditCheckPassedActivity + ' + Me.CreditCheckPassedActivity.Activities.Add(Me.CreditCheckOK) + Me.CreditCheckPassedActivity.Activities.Add(Me.CreditCheckFailed) + Me.CreditCheckPassedActivity.Name = "CreditCheckPassedActivity" + ' + 'ValidateCreditActivity + ' + Me.ValidateCreditActivity.Name = "ValidateCreditActivity" + AddHandler Me.ValidateCreditActivity.ExecuteCode, AddressOf Me.ValidateCredit + ' + 'CreditCheckWF + ' + Me.Activities.Add(Me.ValidateCreditActivity) + Me.Activities.Add(Me.CreditCheckPassedActivity) + Me.Name = "CreditCheckWF" + Me.CanModifyActivities = False + + End Sub + Private ShowDenyMessageActivity As System.Workflow.Activities.CodeActivity + Private PurchaseCarActivity As System.Workflow.Activities.CodeActivity + Private CreditCheckFailed As System.Workflow.Activities.IfElseBranchActivity + Private CreditCheckOK As System.Workflow.Activities.IfElseBranchActivity + Private CreditCheckPassedActivity As System.Workflow.Activities.IfElseActivity + Private ProcessCreditRiskActivity As System.Workflow.Activities.CodeActivity + Private ValidateCreditActivity As System.Workflow.Activities.CodeActivity + +End Class diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.rules b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.rules new file mode 100644 index 0000000..c9e045a --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.rules @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + true + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.vb b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.vb new file mode 100644 index 0000000..5fb42b2 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWF.vb @@ -0,0 +1,65 @@ +' Add the following import. +Imports AutoLotConnectedLayer +Imports System.Windows.Forms + +Public Class CreditCheckWF + Inherits SequentialWorkflowActivity + + ' ID of customer to check. + Private custID As Integer + Public Property ID() As Integer + Get + Return custID + End Get + Set(ByVal value As Integer) + custID = value + End Set + End Property + + Private checkOK As Boolean + Public Property CreditOK() As Boolean + Get + Return checkOK + End Get + Set(ByVal value As Boolean) + checkOK = value + End Set + End Property + + Private Sub ValidateCredit(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' Pretend that we have preformed some exotic + ' credit validation here... + Dim r As New Random() + Dim value As Integer = r.Next(500) + If value > 300 Then + CreditOK = True + Else + CreditOK = False + End If + End Sub + + Private Sub ProcessCreditRisk(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) + ' Ideally we would store the connection string externally. + Dim dal As New InventoryDAL() + dal.OpenConnection( _ + "Data Source=(local)\SQLEXPRESS;Integrated Security=SSPI;" & _ + "Initial Catalog=AutoLot") + Try + dal.ProcessCreditRisk(False, ID) + Finally + dal.CloseConnection() + End Try + End Sub + + Private Sub PurchaseCar(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' Here, we will opt for simplicity. However, we could easily update + ' AutoLotDAL.dll with a new method to place a new order within the Orders table. + MessageBox.Show("Your credit has been approved!") + End Sub + + Private Sub CreditDenied(ByVal sender As System.Object, ByVal e As System.EventArgs) + MessageBox.Show("You are a CREDIT RISK!", _ + "Order Denied!") + End Sub +End Class diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.sln b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.sln new file mode 100644 index 0000000..730a9a0 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CreditCheckWFLib", "CreditCheckWFLib.vbproj", "{D1683A8D-4707-4BBE-8F35-861DABFA44FC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D1683A8D-4707-4BBE-8F35-861DABFA44FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1683A8D-4707-4BBE-8F35-861DABFA44FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1683A8D-4707-4BBE-8F35-861DABFA44FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1683A8D-4707-4BBE-8F35-861DABFA44FC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.suo b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.suo new file mode 100644 index 0000000000000000000000000000000000000000..262125d44c9528ed5b00b00e46d5414ac5eb5f09 GIT binary patch literal 23552 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.vbproj b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.vbproj new file mode 100644 index 0000000..152d294 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/CreditCheckWFLib.vbproj @@ -0,0 +1,181 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D1683A8D-4707-4BBE-8F35-861DABFA44FC} + {D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Library + + + CreditCheckWFLib + CreditCheckWFLib + v3.5 + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + On + Binary + Off + On + + + true + full + true + true + true + bin\ + _MyType="Windows" + CreditCheckWFLib.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + false + false + true + false + true + bin\ + _MyType="Windows" + CreditCheckWFLib.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\..\Chapter 22\AutoLotDAL\bin\Debug\AutoLotDAL.dll + + + System + True + + + System.Data + True + + + System.Transactions + True + + + System.Xml + True + + + System.Workflow.Activities + 3.0 + True + + + System.Workflow.ComponentModel + 3.0 + True + + + System.Workflow.Runtime + 3.0 + True + + + System.Design + True + + + System.Drawing + True + + + System.Drawing.Design + True + + + System.Windows.Forms + + + mscorlib + + + System.Web + True + + + System.Web.Services + True + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + CreditCheckWF.vb + + + + True + MySettings.settings + Code + + + + + SettingsSingleFileGenerator + MySettings.vb + + + + + + + + CreditCheckWF.vb + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/CreditCheckWFLib/My Project/AssemblyInfo.vb b/Code/Chapter 26/CreditCheckWFLib/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d1f6d05 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/My Project/AssemblyInfo.vb @@ -0,0 +1,38 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using '*'. + + + + +'NOTE: When updating the namespaces in the project please add new or update existing the XmlnsDefinitionAttribute +'You can add additional attributes in order to map any additional namespaces you have in the project +' diff --git a/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.settings b/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.vb b/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.vb new file mode 100644 index 0000000..120b484 --- /dev/null +++ b/Code/Chapter 26/CreditCheckWFLib/My Project/MySettings.vb @@ -0,0 +1,28 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + + Public Shared ReadOnly Property [Default]() As MySettings + Get + Return defaultInstance + End Get + End Property +End Class diff --git a/Code/Chapter 26/MathWebService/App_Code/Service.vb b/Code/Chapter 26/MathWebService/App_Code/Service.vb new file mode 100644 index 0000000..652e24a --- /dev/null +++ b/Code/Chapter 26/MathWebService/App_Code/Service.vb @@ -0,0 +1,30 @@ +Imports System.Web +Imports System.Web.Services +Imports System.Web.Services.Protocols + + _ + _ +Public Class MathService + Inherits System.Web.Services.WebService + _ + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + _ + Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer + Return x - y + End Function + _ + Public Function Multiply(ByVal x As Integer, ByVal y As Integer) As Integer + Return x * y + End Function + _ + Public Function Divide(ByVal x As Integer, ByVal y As Integer) As Integer + If y = 0 Then + Return 0 + Else + Return x / y + End If + End Function +End Class + diff --git a/Code/Chapter 26/MathWebService/Service.asmx b/Code/Chapter 26/MathWebService/Service.asmx new file mode 100644 index 0000000..f1b113a --- /dev/null +++ b/Code/Chapter 26/MathWebService/Service.asmx @@ -0,0 +1 @@ +<%@ WebService Language="vb" CodeBehind="~/App_Code/Service.vb" Class="MathService" %> diff --git a/Code/Chapter 26/MathWebService/web.config b/Code/Chapter 26/MathWebService/web.config new file mode 100644 index 0000000..3cd8a42 --- /dev/null +++ b/Code/Chapter 26/MathWebService/web.config @@ -0,0 +1,166 @@ + + + + + + + + +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 26/UserDataWFApp/Module1.vb b/Code/Chapter 26/UserDataWFApp/Module1.vb new file mode 100644 index 0000000..8a0a24e --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/Module1.vb @@ -0,0 +1,41 @@ +Module Module1 + Class Program + + Shared WaitHandle As New AutoResetEvent(False) + + Shared Sub Main() + ' Ensure the runtime shuts down when we are finished. + Using workflowRuntime As New WorkflowRuntime() + + ' Handle events that capture when the engine completes + ' the workflow process and if the engine shuts down with an error. + AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted + AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated + + ' Define two parameters for use by our workflow. + ' Remember! These must be mapped to identically named + ' properties in our workflow class type. + Dim parameters As New Dictionary(Of String, Object)() + parameters.Add("ErrorMessage", "Ack! Your name is too long!") + parameters.Add("NameLength", 5) + + ' Now, create a WF instance that represents our type. + Dim workflowInstance As WorkflowInstance + workflowInstance = workflowRuntime.CreateWorkflow(GetType(ProcessUsernameWorkflow), parameters) + workflowInstance.Start() + WaitHandle.WaitOne() + End Using + End Sub + + Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs) + WaitHandle.Set() + End Sub + + Shared Sub OnWorkflowTerminated(ByVal sender As Object, ByVal e As WorkflowTerminatedEventArgs) + Console.WriteLine(e.Exception.Message) + WaitHandle.Set() + End Sub + + End Class +End Module + diff --git a/Code/Chapter 26/UserDataWFApp/My Project/AssemblyInfo.vb b/Code/Chapter 26/UserDataWFApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..375e724 --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/My Project/AssemblyInfo.vb @@ -0,0 +1,38 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using '*'. + + + + +'NOTE: When updating the namespaces in the project please add new or update existing the XmlnsDefinitionAttribute +'You can add additional attributes in order to map any additional namespaces you have in the project +' diff --git a/Code/Chapter 26/UserDataWFApp/My Project/MySettings.settings b/Code/Chapter 26/UserDataWFApp/My Project/MySettings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 26/UserDataWFApp/My Project/MySettings.vb b/Code/Chapter 26/UserDataWFApp/My Project/MySettings.vb new file mode 100644 index 0000000..120b484 --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/My Project/MySettings.vb @@ -0,0 +1,28 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + + Public Shared ReadOnly Property [Default]() As MySettings + Get + Return defaultInstance + End Get + End Property +End Class diff --git a/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.designer.vb b/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.designer.vb new file mode 100644 index 0000000..f5f629c --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.designer.vb @@ -0,0 +1,44 @@ + _ +Partial Class ProcessUsernameWorkflow + + 'NOTE: The following procedure is required by the Workflow Designer + 'It can be modified using the Workflow Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.CanModifyActivities = True + Dim codecondition1 As System.Workflow.Activities.CodeCondition = New System.Workflow.Activities.CodeCondition + Me.NameNotValidActivity = New System.Workflow.Activities.CodeActivity + Me.AskForNameLoopActivity = New System.Workflow.Activities.WhileActivity + Me.ShowInstructionsActivity = New System.Workflow.Activities.CodeActivity + ' + 'NameNotValidActivity + ' + Me.NameNotValidActivity.Name = "NameNotValidActivity" + AddHandler Me.NameNotValidActivity.ExecuteCode, AddressOf Me.NameNotValid + ' + 'AskForNameLoopActivity + ' + Me.AskForNameLoopActivity.Activities.Add(Me.NameNotValidActivity) + AddHandler codecondition1.Condition, AddressOf Me.GetAndValidateUserName + Me.AskForNameLoopActivity.Condition = codecondition1 + Me.AskForNameLoopActivity.Name = "AskForNameLoopActivity" + ' + 'ShowInstructionsActivity + ' + Me.ShowInstructionsActivity.Name = "ShowInstructionsActivity" + AddHandler Me.ShowInstructionsActivity.ExecuteCode, AddressOf Me.ShowInstructions + ' + 'ProcessUsernameWorkflow + ' + Me.Activities.Add(Me.ShowInstructionsActivity) + Me.Activities.Add(Me.AskForNameLoopActivity) + Me.Name = "ProcessUsernameWorkflow" + Me.CanModifyActivities = False + + End Sub + Private AskForNameLoopActivity As System.Workflow.Activities.WhileActivity + Private NameNotValidActivity As System.Workflow.Activities.CodeActivity + Private ShowInstructionsActivity As System.Workflow.Activities.CodeActivity + +End Class diff --git a/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.vb b/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.vb new file mode 100644 index 0000000..884957d --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/ProcessUsernameWorkflow.vb @@ -0,0 +1,58 @@ +Public Class ProcessUsernameWorkflow + Inherits SequentialWorkflowActivity + +#Region "Properties / backing fields" + ' To hold the name of the user. + Private usrName As String + Public Property UserName() As String + Get + Return usrName + End Get + Set(ByVal value As String) + usrName = value + End Set + End Property + + Private errMsg As String + Public Property ErrorMessage() As String + Get + Return errMsg + End Get + Set(ByVal value As String) + errMsg = value + End Set + End Property + + Private nameLen As Integer + Public Property NameLength() As Integer + Get + Return nameLen + End Get + Set(ByVal value As Integer) + nameLen = value + End Set + End Property +#End Region + + Private Sub GetAndValidateUserName(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ConditionalEventArgs) + Console.Write("Please enter name, which must be less than {0} chars: ", NameLength) + UserName = Console.ReadLine() + + ' See if name is correct length, and set the result. + e.Result = (UserName.Length >= NameLength) + End Sub + + Private Sub NameNotValid(ByVal sender As System.Object, ByVal e As System.EventArgs) + Console.WriteLine(ErrorMessage) + End Sub + + Private Sub ShowInstructions(ByVal sender As System.Object, ByVal e As System.EventArgs) + Dim previousColor As ConsoleColor = Console.ForegroundColor + Console.ForegroundColor = ConsoleColor.Yellow + Console.WriteLine("*******************************************") + Console.WriteLine("***** Welcome to the first WF Example *****") + Console.WriteLine("*******************************************" & vbLf) + Console.WriteLine("I will now ask for your name and validate the data..." & vbLf) + Console.ForegroundColor = previousColor + End Sub +End Class diff --git a/Code/Chapter 26/UserDataWFApp/UserDataWFApp.sln b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.sln new file mode 100644 index 0000000..2ae9449 --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "UserDataWFApp", "UserDataWFApp.vbproj", "{2827EEB1-DA7C-441E-851F-230353A6C916}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2827EEB1-DA7C-441E-851F-230353A6C916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2827EEB1-DA7C-441E-851F-230353A6C916}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2827EEB1-DA7C-441E-851F-230353A6C916}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2827EEB1-DA7C-441E-851F-230353A6C916}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 26/UserDataWFApp/UserDataWFApp.suo b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..d2c49a9272b81e580bad98ba2792be93b5354bd4 GIT binary patch literal 21504 zcmeHPU2Ggj9Umu6X@oroX>WW){cYEv8(nVI^Uh`i_f?2 z-NlI^k>CMULaNj!+80oZ0zyG5ii9d25Qsb_yae%rRCu6>0^$Msgiu9ee!rQWyZySo z^Vj(tI@av$?at2sWB&91+FAeh-qt_8eQU@2!c|U+jpF{oX7RA?dIQc`W%;ZS8*swk z_ZJox)I}k1`bk+w9QYWxK4i@y=Xw+Br%)e3-HiGu>Ss_NL;W=BLz^TEsDNRP>;2#<5Er!Lb$R z%{XhpUoXxs3XSCmu)Qqu;FB)L0iWxH<5dgat}hn{KMKfk)RYD<2%m6uDc%S;8NfZR zc^2YguU!B7x7GprH`hOPfz|<}nR?)JsGLsrd%|krbQo66!Okhf$B9hETtZ+Kk$Qs$sEh$M0jP9jKkCU8u)VyHTG- zWgmCx!S#rBuMcfM>S^ouS+viizF__Kd)__Xdivd-oqzjQ=C3`!c(bE*=f8jQ63ARs z`7lE17vkD`yL!L9yJ=(eM|T_lLd9L9LjPkq<>XuH>4p1jDVYOUVO-%uVixNxD@Jgf z!MTaGA4g4#40PlWwABR8(&&+bmf)(47grUnCG}}i_T#F}p;sK^u-KpX$3OUaIf!-O z^WQ~{K+0oc5SSUzVASc;pduzl@yh^Y;$i@gDd1sX1)T$aBRCtuy*&C3fD%%D0ml@u z)z|ZOU_R&jpntfw=`&F7eY$uqHQ)+$3yapQDUks5Uck-+lS#?doaz#IG?t+MxQ6wh zqkuOe`IQmlXs?Q>q<;=rByd)#?1dLhx~ccrR_f3Dw3Ax@z6hDffD3Uzo5pbxFe!Nj zz&F8#YWPpMx>N(7_E+;i3MiK`-=sBy^Q6@(U%&)z!G-fr*t897gL|vHq+MIkC?F>+ zDIm`YKPQH9oP^FzRrE#(pFS$>P_^*w^G}Hz2L~o4=W}8Vb5HFOwN!2FX{Vq#h7|;L(oF{S3#Jw(P%Vs<`im_wz$pYFu zMo6F);+r*qN}0@nk_ib@!`8o-gM(ZC=zmieRI7mwK%0^Gv{=>3AJ?naKW_M(DcUN# zUPAY>1@NW*p-);ZeB#<@1uNy@&x7Bz2*DbV^b@WwWf8UA2+}`;;Qb7sG7cNFcwvew zkT?HwcnR>Sdq%9`s+W9!8B|x-W*tyc5||&Z)s$R|nn&eUuagEo&ti#!et6l}7Bl9< zLYj}i(Cq`f=6@Ro~3@t~7d9YQK`Ebb4m=4QPw#5!)>i;?HHu zzlk}#44GFW+hzVdVA2~5@`akQ{;5mIKdwQ=rr={EZc_)a^a4gX_-@;#o^T#ROQ8Qr z4595F^&BNw)2R470jei)mG(>Dal+NVu>KpEk7Ep8E&WfS@0=y{^qU3&i9SGDT0X`& zw12Zj-&}|j;4dHOh8PL4L{WpdwWEgNH$-4nnfbU5+nR)Sqs1-3RsOGn3UGi*3Y~qN z(#gJ$2<8n|61Q&Py0RmNq-RS{gi%*YTmyuxjM*aK_62Zb0!x>3P7kyPvyub`dy9%;$4x<~GYKc)YoV&7vQho5=v*Jp0M zck|x1AC7Gq5Rc#8k@@fDrlHptUj5I#+c%h!L45kR?fZZC)261=?|$(9^@HOx6hvIj z-F-g%^qZGn`0?-G`quFMpWozF%1Yv* zrM&M3$qRuV9LfKA>YK*I{At@k zt4iB825NGM@R>8BKS#ai%ynoAIcvYE8HGdO>LpkJ#!7A*KPoe*KqsIe{~`Tv+O%rz z&tCL>#~L#Neoz0LLxH|2xq#&s;5hyZ^222>qa0IXBGIYVRgI!{ZEOAOL<5ZZLZ3PmGk;bP&EIUQ>Yfco&Lqd^NW>mwPKZ{ zp*5mAAGr@!PU*`T@PI2M54|`l?E_bRGuA#!xqQTn_mnSOO+La8|K}pdV}tV%GntBw znYrnSjCmzuX7gqy6`q~Vq!aN%+RU~T@3n;H#*gccqv_NYzK6insTbj!^_>>J8hJFF zD5U37?8Q!68;gVlY4n)pbUrrPW5lybqcD{+Lg)HMjPvnKVZzMK7;U+v(U*)#%pz0q z*+MF3v>uCH$ft6>@j`s8ANZ{RT4!LrlT!AwkogRxu^;n6zk{owD*2P|j2TldMgE4Q z@2m3YjK?NzE3X&0RmuTl{T0_izKSTfv(#wi~m9MPd-&DOUeJA z!JvP(1`dKxK2<7&&v%-PDXXPFjK06L1`dL+G@sS6Orz=No2zQ!_oDBIdc2}qdS&I* z()pa3Nagd?RoVDVN^3>8?)*M+pzeGK^~o|1`DxOpqEqITv)OzhcNr=c>RM{rbU|)i zXbk74`_0@r03I;SS$)fIobBv%&Mb_^GwG!6NThUG@AxBJ?}S2U2B-_ccUYeFBJ;y- z4gI*+))R@IzxB_9hurUPPxnM47r};lj107I?R{sUeCS!|Pwpw%_0htf?~L4Opopz! zIzq4nD$YB8J@-b_^qmIGT7((z@-a5^K|y>~eycrTwQ4jW zPU1xI$H{3wdiCCt80JvDe`Qp!vL7*IaoP~owS!ZPFqo}Ux#tl2kcVwBPK*Sz_%(qZ zdCbA-o`JKB!|PFp`^A(wU|%ll!##E%j=X{j$rweFJAHxi1&_uW0q(N5VZy)KJV9@;x;7)j6do zjcfipPJ(nJ_nJh(Q))iSW5_3WJPfJfd)PGYr_dt_*~&USp%%<7U; zez=|};<|k6(h3O8sO>m*$k*X+OvZr4xGx@SJMUhexpOmIWjR<-wKI{c%scP>HRUDu z!_!vhaa3;t)t*H^%udx5GkYG(51ZP`oZ98-heyfttPfq|lrg0x>HqrSzLH*H<#nrl zZa+-8%YUW()5@55R~^3=s2zN#mJGqqrf!|VD)i&ccoDbykTADa3xRVcu;&hYz89xm z3zj?PZ)?ZxUa8|$bTSDJSJEuC)xg@CIoGYfBy_Jb-zb3zDT|C-{cUV`m2q%-9qzgF zuH3H`@u}CJeCy`q!Qw_YJkNXab@DJI&J_8?Y@a`lTHbkgcNH*#u;v)vS>qFo z_f+mee<#GgUa9x*8$u42mX`4Z=bX>-s}MUsd5yb6?bkxcUrgZ{?qB5h5t<8>7H7Xo zRPlA3^9i@UApAX^UfwzKTgBXGsdkR#h1N4`W&QYlq}wtwN@pRB^&Y8vH4*2QGGM1- zZDRp1j#^vVaXbZ%*V1n+Wk$8V=35k})Z2BQ9oMypXxtjWj!*sh++LmIw4zQ=-A+rm z#&WK$z>e>F%Moxdm{ZD~(Mc(~vr}2yxT#X+%1cAJC+sxTHmjs#KP6H8 zqQ%K|b>EI(ZF#KmbIyJ#dhznO+!J;h>Mhs8FTdSUj`baRdOgkR zJTp579*oS?a(#R|M_w*krh3grxFaH^dlny$)(_R*%!ON$%jvJmRJ)(FQ(aqIp`)vE zwnE*vO%)@-QjJFXu=f!Q?*F=Q*8_JTFcYA6tz41uo&8%S^(9A%QKj#b z*VDISKihh&YZHjzK4})5#vkl&$xgiX!3q6kv_)|<_5^p~!(068tk$-pHT=?S^}jSa z^3gx~8DTTyA}3hQaY!b*%6x7qb$|i!U+(9Yvsggf=EI=BnkAK#Jxl-UNNxYQhEIa| ufp0{9_|%TJ17}BM%d4e-O2;qxJ8`8A*Z47Q7*%~%&3|QQpJi~PeEA=D@0Z;G literal 0 HcmV?d00001 diff --git a/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj new file mode 100644 index 0000000..df6fd95 --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj @@ -0,0 +1,173 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2827EEB1-DA7C-441E-851F-230353A6C916} + {D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Exe + + + UserDataWFApp + UserDataWFApp + v3.5 + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + On + Binary + Off + On + + + true + full + true + true + true + bin\ + _MyType="Windows" + UserDataWFApp.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + false + false + true + false + true + bin\ + _MyType="Windows" + UserDataWFApp.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + System + True + + + System.Data + True + + + System.Transactions + True + + + System.Xml + True + + + System.Workflow.Activities + 3.0 + True + + + System.Workflow.ComponentModel + 3.0 + True + + + System.Workflow.Runtime + 3.0 + True + + + System.Design + True + + + System.Drawing + True + + + System.Drawing.Design + True + + + System.Windows.Forms + + + mscorlib + + + System.Web + True + + + System.Web.Services + True + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + ProcessUsernameWorkflow.vb + + + + True + MySettings.settings + Code + + + + + SettingsSingleFileGenerator + MySettings.vb + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj.user b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 26/UserDataWFApp/UserDataWFApp.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/MathWF.designer.vb b/Code/Chapter 26/WFMathClient/MathWF.designer.vb new file mode 100644 index 0000000..7fabaec --- /dev/null +++ b/Code/Chapter 26/WFMathClient/MathWF.designer.vb @@ -0,0 +1,254 @@ + _ +Partial Class MathWF + + 'NOTE: The following procedure is required by the Workflow Designer + 'It can be modified using the Workflow Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.CanModifyActivities = True + Dim activitybind1 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding1 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind2 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding2 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind3 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding3 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind4 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding4 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind5 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding5 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind6 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding6 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind7 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding7 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind8 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding8 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind9 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding9 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind10 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding10 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind11 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding11 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind12 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding12 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim ruleconditionreference1 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference + Dim ruleconditionreference2 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference + Dim ruleconditionreference3 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference + Dim ruleconditionreference4 As System.Workflow.Activities.Rules.RuleConditionReference = New System.Workflow.Activities.Rules.RuleConditionReference + Dim channeltoken1 As System.Workflow.Activities.ChannelToken = New System.Workflow.Activities.ChannelToken + Dim activitybind13 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding13 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind14 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding14 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim activitybind15 As System.Workflow.ComponentModel.ActivityBind = New System.Workflow.ComponentModel.ActivityBind + Dim workflowparameterbinding15 As System.Workflow.ComponentModel.WorkflowParameterBinding = New System.Workflow.ComponentModel.WorkflowParameterBinding + Dim typedoperationinfo1 As System.Workflow.Activities.TypedOperationInfo = New System.Workflow.Activities.TypedOperationInfo + Me.invokeWebServiceActivity4 = New System.Workflow.Activities.InvokeWebServiceActivity + Me.invokeWebServiceActivity3 = New System.Workflow.Activities.InvokeWebServiceActivity + Me.invokeWebServiceActivity2 = New System.Workflow.Activities.InvokeWebServiceActivity + Me.invokeWebServiceActivity1 = New System.Workflow.Activities.InvokeWebServiceActivity + Me.IfDivideOp = New System.Workflow.Activities.IfElseBranchActivity + Me.IfMultiplyOp = New System.Workflow.Activities.IfElseBranchActivity + Me.IfSubOp = New System.Workflow.Activities.IfElseBranchActivity + Me.IfAddOp = New System.Workflow.Activities.IfElseBranchActivity + Me.codeActivity1 = New System.Workflow.Activities.CodeActivity + Me.WCFSendAddActivity = New System.Workflow.Activities.SendActivity + Me.DisplayResult = New System.Workflow.Activities.CodeActivity + Me.ifElseActivity1 = New System.Workflow.Activities.IfElseActivity + Me.GetMathOpInput = New System.Workflow.Activities.CodeActivity + Me.GetNumericalInput = New System.Workflow.Activities.CodeActivity + ' + 'invokeWebServiceActivity4 + ' + Me.invokeWebServiceActivity4.MethodName = "Divide" + Me.invokeWebServiceActivity4.Name = "invokeWebServiceActivity4" + activitybind1.Name = "MathWF" + activitybind1.Path = "Result" + workflowparameterbinding1.ParameterName = "(ReturnValue)" + workflowparameterbinding1.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind1, System.Workflow.ComponentModel.ActivityBind)) + activitybind2.Name = "MathWF" + activitybind2.Path = "FirstNumber" + workflowparameterbinding2.ParameterName = "x" + workflowparameterbinding2.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind2, System.Workflow.ComponentModel.ActivityBind)) + activitybind3.Name = "MathWF" + activitybind3.Path = "SecondNumber" + workflowparameterbinding3.ParameterName = "y" + workflowparameterbinding3.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind3, System.Workflow.ComponentModel.ActivityBind)) + Me.invokeWebServiceActivity4.ParameterBindings.Add(workflowparameterbinding1) + Me.invokeWebServiceActivity4.ParameterBindings.Add(workflowparameterbinding2) + Me.invokeWebServiceActivity4.ParameterBindings.Add(workflowparameterbinding3) + Me.invokeWebServiceActivity4.ProxyClass = GetType(WFMathClient.localhost.MathService) + ' + 'invokeWebServiceActivity3 + ' + Me.invokeWebServiceActivity3.MethodName = "Multiply" + Me.invokeWebServiceActivity3.Name = "invokeWebServiceActivity3" + activitybind4.Name = "MathWF" + activitybind4.Path = "FirstNumber" + workflowparameterbinding4.ParameterName = "x" + workflowparameterbinding4.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind4, System.Workflow.ComponentModel.ActivityBind)) + activitybind5.Name = "MathWF" + activitybind5.Path = "SecondNumber" + workflowparameterbinding5.ParameterName = "y" + workflowparameterbinding5.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind5, System.Workflow.ComponentModel.ActivityBind)) + activitybind6.Name = "MathWF" + activitybind6.Path = "Result" + workflowparameterbinding6.ParameterName = "(ReturnValue)" + workflowparameterbinding6.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind6, System.Workflow.ComponentModel.ActivityBind)) + Me.invokeWebServiceActivity3.ParameterBindings.Add(workflowparameterbinding4) + Me.invokeWebServiceActivity3.ParameterBindings.Add(workflowparameterbinding5) + Me.invokeWebServiceActivity3.ParameterBindings.Add(workflowparameterbinding6) + Me.invokeWebServiceActivity3.ProxyClass = GetType(WFMathClient.localhost.MathService) + ' + 'invokeWebServiceActivity2 + ' + Me.invokeWebServiceActivity2.MethodName = "Subtract" + Me.invokeWebServiceActivity2.Name = "invokeWebServiceActivity2" + activitybind7.Name = "MathWF" + activitybind7.Path = "FirstNumber" + workflowparameterbinding7.ParameterName = "x" + workflowparameterbinding7.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind7, System.Workflow.ComponentModel.ActivityBind)) + activitybind8.Name = "MathWF" + activitybind8.Path = "SecondNumber" + workflowparameterbinding8.ParameterName = "y" + workflowparameterbinding8.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind8, System.Workflow.ComponentModel.ActivityBind)) + activitybind9.Name = "MathWF" + activitybind9.Path = "Result" + workflowparameterbinding9.ParameterName = "(ReturnValue)" + workflowparameterbinding9.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind9, System.Workflow.ComponentModel.ActivityBind)) + Me.invokeWebServiceActivity2.ParameterBindings.Add(workflowparameterbinding7) + Me.invokeWebServiceActivity2.ParameterBindings.Add(workflowparameterbinding8) + Me.invokeWebServiceActivity2.ParameterBindings.Add(workflowparameterbinding9) + Me.invokeWebServiceActivity2.ProxyClass = GetType(WFMathClient.localhost.MathService) + ' + 'invokeWebServiceActivity1 + ' + Me.invokeWebServiceActivity1.MethodName = "Add" + Me.invokeWebServiceActivity1.Name = "invokeWebServiceActivity1" + activitybind10.Name = "MathWF" + activitybind10.Path = "FirstNumber" + workflowparameterbinding10.ParameterName = "x" + workflowparameterbinding10.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind10, System.Workflow.ComponentModel.ActivityBind)) + activitybind11.Name = "MathWF" + activitybind11.Path = "SecondNumber" + workflowparameterbinding11.ParameterName = "y" + workflowparameterbinding11.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind11, System.Workflow.ComponentModel.ActivityBind)) + activitybind12.Name = "MathWF" + activitybind12.Path = "Result" + workflowparameterbinding12.ParameterName = "(ReturnValue)" + workflowparameterbinding12.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind12, System.Workflow.ComponentModel.ActivityBind)) + Me.invokeWebServiceActivity1.ParameterBindings.Add(workflowparameterbinding10) + Me.invokeWebServiceActivity1.ParameterBindings.Add(workflowparameterbinding11) + Me.invokeWebServiceActivity1.ParameterBindings.Add(workflowparameterbinding12) + Me.invokeWebServiceActivity1.ProxyClass = GetType(WFMathClient.localhost.MathService) + ' + 'IfDivideOp + ' + Me.IfDivideOp.Activities.Add(Me.invokeWebServiceActivity4) + ruleconditionreference1.ConditionName = "Condition4" + Me.IfDivideOp.Condition = ruleconditionreference1 + Me.IfDivideOp.Name = "IfDivideOp" + ' + 'IfMultiplyOp + ' + Me.IfMultiplyOp.Activities.Add(Me.invokeWebServiceActivity3) + ruleconditionreference2.ConditionName = "Condition3" + Me.IfMultiplyOp.Condition = ruleconditionreference2 + Me.IfMultiplyOp.Name = "IfMultiplyOp" + ' + 'IfSubOp + ' + Me.IfSubOp.Activities.Add(Me.invokeWebServiceActivity2) + ruleconditionreference3.ConditionName = "Condition2" + Me.IfSubOp.Condition = ruleconditionreference3 + Me.IfSubOp.Name = "IfSubOp" + ' + 'IfAddOp + ' + Me.IfAddOp.Activities.Add(Me.invokeWebServiceActivity1) + ruleconditionreference4.ConditionName = "Condition1" + Me.IfAddOp.Condition = ruleconditionreference4 + Me.IfAddOp.Name = "IfAddOp" + ' + 'codeActivity1 + ' + Me.codeActivity1.Name = "codeActivity1" + AddHandler Me.codeActivity1.ExecuteCode, AddressOf Me.WCFResult + ' + 'WCFSendAddActivity + ' + channeltoken1.EndpointName = "WSHttpBinding_IBasicMath" + channeltoken1.Name = "WSHttpBinding_IBasicMath" + channeltoken1.OwnerActivityName = "WCFSendAddActivity" + Me.WCFSendAddActivity.ChannelToken = channeltoken1 + Me.WCFSendAddActivity.Name = "WCFSendAddActivity" + activitybind13.Name = "MathWF" + activitybind13.Path = "Result" + workflowparameterbinding13.ParameterName = "(ReturnValue)" + workflowparameterbinding13.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind13, System.Workflow.ComponentModel.ActivityBind)) + activitybind14.Name = "MathWF" + activitybind14.Path = "FirstNumber" + workflowparameterbinding14.ParameterName = "x" + workflowparameterbinding14.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind14, System.Workflow.ComponentModel.ActivityBind)) + activitybind15.Name = "MathWF" + activitybind15.Path = "SecondNumber" + workflowparameterbinding15.ParameterName = "y" + workflowparameterbinding15.SetBinding(System.Workflow.ComponentModel.WorkflowParameterBinding.ValueProperty, CType(activitybind15, System.Workflow.ComponentModel.ActivityBind)) + Me.WCFSendAddActivity.ParameterBindings.Add(workflowparameterbinding13) + Me.WCFSendAddActivity.ParameterBindings.Add(workflowparameterbinding14) + Me.WCFSendAddActivity.ParameterBindings.Add(workflowparameterbinding15) + typedoperationinfo1.ContractType = GetType(WFMathClient.ServiceReference1.IBasicMath) + typedoperationinfo1.Name = "Add" + Me.WCFSendAddActivity.ServiceOperationInfo = typedoperationinfo1 + ' + 'DisplayResult + ' + Me.DisplayResult.Name = "DisplayResult" + AddHandler Me.DisplayResult.ExecuteCode, AddressOf Me.ShowResult + ' + 'ifElseActivity1 + ' + Me.ifElseActivity1.Activities.Add(Me.IfAddOp) + Me.ifElseActivity1.Activities.Add(Me.IfSubOp) + Me.ifElseActivity1.Activities.Add(Me.IfMultiplyOp) + Me.ifElseActivity1.Activities.Add(Me.IfDivideOp) + Me.ifElseActivity1.Name = "ifElseActivity1" + ' + 'GetMathOpInput + ' + Me.GetMathOpInput.Name = "GetMathOpInput" + AddHandler Me.GetMathOpInput.ExecuteCode, AddressOf Me.GetOpInput + ' + 'GetNumericalInput + ' + Me.GetNumericalInput.Name = "GetNumericalInput" + AddHandler Me.GetNumericalInput.ExecuteCode, AddressOf Me.GetNumbInput + ' + 'MathWF + ' + Me.Activities.Add(Me.GetNumericalInput) + Me.Activities.Add(Me.GetMathOpInput) + Me.Activities.Add(Me.ifElseActivity1) + Me.Activities.Add(Me.DisplayResult) + Me.Activities.Add(Me.WCFSendAddActivity) + Me.Activities.Add(Me.codeActivity1) + Me.Name = "MathWF" + Me.CanModifyActivities = False + + End Sub + Private WCFSendAddActivity As System.Workflow.Activities.SendActivity + Private codeActivity1 As System.Workflow.Activities.CodeActivity + Private IfDivideOp As System.Workflow.Activities.IfElseBranchActivity + Private IfMultiplyOp As System.Workflow.Activities.IfElseBranchActivity + Private IfSubOp As System.Workflow.Activities.IfElseBranchActivity + Private IfAddOp As System.Workflow.Activities.IfElseBranchActivity + Private ifElseActivity1 As System.Workflow.Activities.IfElseActivity + Private invokeWebServiceActivity1 As System.Workflow.Activities.InvokeWebServiceActivity + Private invokeWebServiceActivity2 As System.Workflow.Activities.InvokeWebServiceActivity + Private invokeWebServiceActivity3 As System.Workflow.Activities.InvokeWebServiceActivity + Private invokeWebServiceActivity4 As System.Workflow.Activities.InvokeWebServiceActivity + Private DisplayResult As System.Workflow.Activities.CodeActivity + Private GetMathOpInput As System.Workflow.Activities.CodeActivity + Private GetNumericalInput As System.Workflow.Activities.CodeActivity + +End Class diff --git a/Code/Chapter 26/WFMathClient/MathWF.resx b/Code/Chapter 26/WFMathClient/MathWF.resx new file mode 100644 index 0000000..00a8661 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/MathWF.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + http://localhost/VbMathWebService/Service.asmx + + + http://localhost/VbMathWebService/Service.asmx + + + http://localhost/VbMathWebService/Service.asmx + + + http://localhost/VbMathWebService/Service.asmx + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/MathWF.rules b/Code/Chapter 26/WFMathClient/MathWF.rules new file mode 100644 index 0000000..1462ea4 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/MathWF.rules @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/MathWF.vb b/Code/Chapter 26/WFMathClient/MathWF.vb new file mode 100644 index 0000000..6c65957 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/MathWF.vb @@ -0,0 +1,106 @@ +Public Enum MathOperation + Add + Subtract + Multiply + Divide +End Enum + +Public Class MathWF + Inherits SequentialWorkflowActivity + +#Region "Properties / backing fields" + Private numb1 As Integer + Public Property FirstNumber() As Integer + Get + Return numb1 + End Get + Set(ByVal value As Integer) + numb1 = value + End Set + End Property + + Private numb2 As Integer + Public Property SecondNumber() As Integer + Get + Return numb2 + End Get + Set(ByVal value As Integer) + numb2 = value + End Set + End Property + + Private res As Integer + Public Property Result() As Integer + Get + Return res + End Get + Set(ByVal value As Integer) + res = value + End Set + End Property + + Private mathOp As MathOperation + Public Property Operation() As MathOperation + Get + Return mathOp + End Get + Set(ByVal value As MathOperation) + mathOp = value + End Set + End Property +#End Region + + Sub New() + + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + Operation = MathOperation.Add + End Sub + + Private Sub GetNumbInput(ByVal sender As System.Object, ByVal e As System.EventArgs) + ' For simplicity, we are not bothering to verify that + ' the input values are indeed numerical. + Console.Write("Enter first number: ") + FirstNumber = Integer.Parse(Console.ReadLine()) + + Console.Write("Enter second number: ") + SecondNumber = Integer.Parse(Console.ReadLine()) + End Sub + + Private Sub GetOpInput(ByVal sender As System.Object, ByVal e As System.EventArgs) + Console.WriteLine("Do you wish to A[dd], S[ubtract],") + Console.Write("Do you wish to M[ultiply] or D[ivide]: ") + Dim op As String = Console.ReadLine() + + Select Case op.ToUpper() + Case "A" + Operation = MathOperation.Add + Exit Select + Case "S" + Operation = MathOperation.Subtract + Exit Select + Case "M" + Operation = MathOperation.Multiply + Exit Select + Case "D" + Operation = MathOperation.Divide + Exit Select + Case Else + Operation = MathOperation.Add + Exit Select + End Select + End Sub + + Private Sub ShowResult(ByVal sender As System.Object, ByVal e As System.EventArgs) + Console.WriteLine("{0} {1} {2} = {3}", _ + FirstNumber, Operation.ToString().ToUpper(), SecondNumber, Result) + End Sub + + Private Sub WCFResult(ByVal sender As System.Object, ByVal e As System.EventArgs) + Console.WriteLine("***** WCF Service Addition *****") + Console.WriteLine("{0} + {1} = {2}", _ + FirstNumber, SecondNumber, Result) + End Sub +End Class diff --git a/Code/Chapter 26/WFMathClient/Module1.vb b/Code/Chapter 26/WFMathClient/Module1.vb new file mode 100644 index 0000000..b5023d5 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Module1.vb @@ -0,0 +1,29 @@ +Module Module1 + Class Program + + Shared WaitHandle As New AutoResetEvent(False) + + Shared Sub Main() + Using workflowRuntime As New WorkflowRuntime() + AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted + AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated + + Dim workflowInstance As WorkflowInstance + workflowInstance = workflowRuntime.CreateWorkflow(GetType(MathWF)) + workflowInstance.Start() + WaitHandle.WaitOne() + End Using + End Sub + + Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs) + WaitHandle.Set() + End Sub + + Shared Sub OnWorkflowTerminated(ByVal sender As Object, ByVal e As WorkflowTerminatedEventArgs) + Console.WriteLine(e.Exception.Message) + WaitHandle.Set() + End Sub + + End Class +End Module + diff --git a/Code/Chapter 26/WFMathClient/My Project/AssemblyInfo.vb b/Code/Chapter 26/WFMathClient/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a40d50a --- /dev/null +++ b/Code/Chapter 26/WFMathClient/My Project/AssemblyInfo.vb @@ -0,0 +1,38 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using '*'. + + + + +'NOTE: When updating the namespaces in the project please add new or update existing the XmlnsDefinitionAttribute +'You can add additional attributes in order to map any additional namespaces you have in the project +' diff --git a/Code/Chapter 26/WFMathClient/My Project/MySettings.settings b/Code/Chapter 26/WFMathClient/My Project/MySettings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 26/WFMathClient/My Project/MySettings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 26/WFMathClient/My Project/MySettings.vb b/Code/Chapter 26/WFMathClient/My Project/MySettings.vb new file mode 100644 index 0000000..120b484 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/My Project/MySettings.vb @@ -0,0 +1,28 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + + Public Shared ReadOnly Property [Default]() As MySettings + Get + Return defaultInstance + End Get + End Property +End Class diff --git a/Code/Chapter 26/WFMathClient/My Project/Settings.Designer.vb b/Code/Chapter 26/WFMathClient/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d300636 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/My Project/Settings.Designer.vb @@ -0,0 +1,83 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + + _ + Public ReadOnly Property WFMathClient_localhost_MathService() As String + Get + Return CType(Me("WFMathClient_localhost_MathService"),String) + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WFMathClient.My.MySettings + Get + Return Global.WFMathClient.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 26/WFMathClient/My Project/Settings.settings b/Code/Chapter 26/WFMathClient/My Project/Settings.settings new file mode 100644 index 0000000..0047f5b --- /dev/null +++ b/Code/Chapter 26/WFMathClient/My Project/Settings.settings @@ -0,0 +1,9 @@ + + + + + + http://localhost/VbMathWebService/Service.asmx + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.disco b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.disco new file mode 100644 index 0000000..e7bdddb --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.disco @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.wsdl b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.wsdl new file mode 100644 index 0000000..42e5af2 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.wsdl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.xsd b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.xsd new file mode 100644 index 0000000..095d9f6 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.wsdl b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.wsdl new file mode 100644 index 0000000..9385f0d --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.wsdl @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://localhost:8080/MathServiceLibrary + + host/InterUber.intertech-inc.com + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.xsd b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.xsd new file mode 100644 index 0000000..d00d787 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/MathService1.xsd @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.svcmap b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.svcmap new file mode 100644 index 0000000..a6afa11 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.svcmap @@ -0,0 +1,32 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.vb b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.vb new file mode 100644 index 0000000..fa379ae --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/Reference.vb @@ -0,0 +1,60 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace ServiceReference1 + + _ + Public Interface IBasicMath + + _ + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + End Interface + + _ + Public Interface IBasicMathChannel + Inherits ServiceReference1.IBasicMath, System.ServiceModel.IClientChannel + End Interface + + _ + Partial Public Class BasicMathClient + Inherits System.ServiceModel.ClientBase(Of ServiceReference1.IBasicMath) + Implements ServiceReference1.IBasicMath + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal endpointConfigurationName As String) + MyBase.New(endpointConfigurationName) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(binding, remoteAddress) + End Sub + + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Implements ServiceReference1.IBasicMath.Add + Return MyBase.Channel.Add(x, y) + End Function + End Class +End Namespace diff --git a/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/configuration.svcinfo b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/configuration.svcinfo new file mode 100644 index 0000000..f60c728 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Service References/ServiceReference1/configuration.svcinfo @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/WFMathClient.sln b/Code/Chapter 26/WFMathClient/WFMathClient.sln new file mode 100644 index 0000000..ca2f694 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/WFMathClient.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WFMathClient", "WFMathClient.vbproj", "{9F0221AF-0115-48A7-A818-EDBFBE0D4472}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9F0221AF-0115-48A7-A818-EDBFBE0D4472}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F0221AF-0115-48A7-A818-EDBFBE0D4472}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F0221AF-0115-48A7-A818-EDBFBE0D4472}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F0221AF-0115-48A7-A818-EDBFBE0D4472}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 26/WFMathClient/WFMathClient.suo b/Code/Chapter 26/WFMathClient/WFMathClient.suo new file mode 100644 index 0000000000000000000000000000000000000000..f9f1da01ada60e38651acec08c65fb8e5e411875 GIT binary patch literal 28160 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {9F0221AF-0115-48A7-A818-EDBFBE0D4472} + {D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Exe + + + WFMathClient + WFMathClient + v3.5 + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + On + Binary + Off + On + + + true + full + true + true + true + bin\ + _MyType="Windows" + WFMathClient.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + false + false + true + false + true + bin\ + _MyType="Windows" + WFMathClient.xml + false + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + System + True + + + System.Data + True + + + + 3.0 + + + System.Transactions + True + + + System.Xml + True + + + System.Workflow.Activities + 3.0 + True + + + System.Workflow.ComponentModel + 3.0 + True + + + System.Workflow.Runtime + 3.0 + True + + + System.Design + True + + + System.Drawing + True + + + System.Drawing.Design + True + + + System.Windows.Forms + + + mscorlib + + + System.Web + True + + + System.Web.Services + True + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + True + True + Settings.settings + + + True + True + Reference.svcmap + + + True + True + Reference.map + + + MathWF.vb + + + + True + MySettings.settings + Code + + + + + SettingsSingleFileGenerator + MySettings.vb + + + + + + + + + MathWF.vb + Designer + + + MathWF.vb + + + + + + + + Dynamic + Web References\localhost\ + http://localhost/VbMathWebService/Service.asmx + + + + + MySettings + WFMathClient_localhost_MathService + + + + + + My + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + MSDiscoCodeGenerator + Reference.vb + + + + + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.vb + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/WFMathClient.vbproj.user b/Code/Chapter 26/WFMathClient/WFMathClient.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 26/WFMathClient/WFMathClient.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.map b/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.map new file mode 100644 index 0000000..b66b1cf --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.map @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.vb b/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.vb new file mode 100644 index 0000000..65a5d43 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Web References/localhost/Reference.vb @@ -0,0 +1,326 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict Off +Option Explicit On + +Imports System +Imports System.ComponentModel +Imports System.Diagnostics +Imports System.Web.Services +Imports System.Web.Services.Protocols +Imports System.Xml.Serialization + +' +'This source code was auto-generated by Microsoft.VSDesigner, Version 2.0.50727.1433. +' +Namespace localhost + + ''' + _ + Partial Public Class MathService + Inherits System.Web.Services.Protocols.SoapHttpClientProtocol + + Private AddOperationCompleted As System.Threading.SendOrPostCallback + + Private SubtractOperationCompleted As System.Threading.SendOrPostCallback + + Private MultiplyOperationCompleted As System.Threading.SendOrPostCallback + + Private DivideOperationCompleted As System.Threading.SendOrPostCallback + + Private useDefaultCredentialsSetExplicitly As Boolean + + ''' + Public Sub New() + MyBase.New + Me.Url = Global.WFMathClient.My.MySettings.Default.WFMathClient_localhost_MathService + If (Me.IsLocalFileSystemWebService(Me.Url) = true) Then + Me.UseDefaultCredentials = true + Me.useDefaultCredentialsSetExplicitly = false + Else + Me.useDefaultCredentialsSetExplicitly = true + End If + End Sub + + Public Shadows Property Url() As String + Get + Return MyBase.Url + End Get + Set + If (((Me.IsLocalFileSystemWebService(MyBase.Url) = true) _ + AndAlso (Me.useDefaultCredentialsSetExplicitly = false)) _ + AndAlso (Me.IsLocalFileSystemWebService(value) = false)) Then + MyBase.UseDefaultCredentials = false + End If + MyBase.Url = value + End Set + End Property + + Public Shadows Property UseDefaultCredentials() As Boolean + Get + Return MyBase.UseDefaultCredentials + End Get + Set + MyBase.UseDefaultCredentials = value + Me.useDefaultCredentialsSetExplicitly = true + End Set + End Property + + ''' + Public Event AddCompleted As AddCompletedEventHandler + + ''' + Public Event SubtractCompleted As SubtractCompletedEventHandler + + ''' + Public Event MultiplyCompleted As MultiplyCompletedEventHandler + + ''' + Public Event DivideCompleted As DivideCompletedEventHandler + + ''' + _ + Public Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Dim results() As Object = Me.Invoke("Add", New Object() {x, y}) + Return CType(results(0),Integer) + End Function + + ''' + Public Overloads Sub AddAsync(ByVal x As Integer, ByVal y As Integer) + Me.AddAsync(x, y, Nothing) + End Sub + + ''' + Public Overloads Sub AddAsync(ByVal x As Integer, ByVal y As Integer, ByVal userState As Object) + If (Me.AddOperationCompleted Is Nothing) Then + Me.AddOperationCompleted = AddressOf Me.OnAddOperationCompleted + End If + Me.InvokeAsync("Add", New Object() {x, y}, Me.AddOperationCompleted, userState) + End Sub + + Private Sub OnAddOperationCompleted(ByVal arg As Object) + If (Not (Me.AddCompletedEvent) Is Nothing) Then + Dim invokeArgs As System.Web.Services.Protocols.InvokeCompletedEventArgs = CType(arg,System.Web.Services.Protocols.InvokeCompletedEventArgs) + RaiseEvent AddCompleted(Me, New AddCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)) + End If + End Sub + + ''' + _ + Public Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer + Dim results() As Object = Me.Invoke("Subtract", New Object() {x, y}) + Return CType(results(0),Integer) + End Function + + ''' + Public Overloads Sub SubtractAsync(ByVal x As Integer, ByVal y As Integer) + Me.SubtractAsync(x, y, Nothing) + End Sub + + ''' + Public Overloads Sub SubtractAsync(ByVal x As Integer, ByVal y As Integer, ByVal userState As Object) + If (Me.SubtractOperationCompleted Is Nothing) Then + Me.SubtractOperationCompleted = AddressOf Me.OnSubtractOperationCompleted + End If + Me.InvokeAsync("Subtract", New Object() {x, y}, Me.SubtractOperationCompleted, userState) + End Sub + + Private Sub OnSubtractOperationCompleted(ByVal arg As Object) + If (Not (Me.SubtractCompletedEvent) Is Nothing) Then + Dim invokeArgs As System.Web.Services.Protocols.InvokeCompletedEventArgs = CType(arg,System.Web.Services.Protocols.InvokeCompletedEventArgs) + RaiseEvent SubtractCompleted(Me, New SubtractCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)) + End If + End Sub + + ''' + _ + Public Function Multiply(ByVal x As Integer, ByVal y As Integer) As Integer + Dim results() As Object = Me.Invoke("Multiply", New Object() {x, y}) + Return CType(results(0),Integer) + End Function + + ''' + Public Overloads Sub MultiplyAsync(ByVal x As Integer, ByVal y As Integer) + Me.MultiplyAsync(x, y, Nothing) + End Sub + + ''' + Public Overloads Sub MultiplyAsync(ByVal x As Integer, ByVal y As Integer, ByVal userState As Object) + If (Me.MultiplyOperationCompleted Is Nothing) Then + Me.MultiplyOperationCompleted = AddressOf Me.OnMultiplyOperationCompleted + End If + Me.InvokeAsync("Multiply", New Object() {x, y}, Me.MultiplyOperationCompleted, userState) + End Sub + + Private Sub OnMultiplyOperationCompleted(ByVal arg As Object) + If (Not (Me.MultiplyCompletedEvent) Is Nothing) Then + Dim invokeArgs As System.Web.Services.Protocols.InvokeCompletedEventArgs = CType(arg,System.Web.Services.Protocols.InvokeCompletedEventArgs) + RaiseEvent MultiplyCompleted(Me, New MultiplyCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)) + End If + End Sub + + ''' + _ + Public Function Divide(ByVal x As Integer, ByVal y As Integer) As Integer + Dim results() As Object = Me.Invoke("Divide", New Object() {x, y}) + Return CType(results(0),Integer) + End Function + + ''' + Public Overloads Sub DivideAsync(ByVal x As Integer, ByVal y As Integer) + Me.DivideAsync(x, y, Nothing) + End Sub + + ''' + Public Overloads Sub DivideAsync(ByVal x As Integer, ByVal y As Integer, ByVal userState As Object) + If (Me.DivideOperationCompleted Is Nothing) Then + Me.DivideOperationCompleted = AddressOf Me.OnDivideOperationCompleted + End If + Me.InvokeAsync("Divide", New Object() {x, y}, Me.DivideOperationCompleted, userState) + End Sub + + Private Sub OnDivideOperationCompleted(ByVal arg As Object) + If (Not (Me.DivideCompletedEvent) Is Nothing) Then + Dim invokeArgs As System.Web.Services.Protocols.InvokeCompletedEventArgs = CType(arg,System.Web.Services.Protocols.InvokeCompletedEventArgs) + RaiseEvent DivideCompleted(Me, New DivideCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState)) + End If + End Sub + + ''' + Public Shadows Sub CancelAsync(ByVal userState As Object) + MyBase.CancelAsync(userState) + End Sub + + Private Function IsLocalFileSystemWebService(ByVal url As String) As Boolean + If ((url Is Nothing) _ + OrElse (url Is String.Empty)) Then + Return false + End If + Dim wsUri As System.Uri = New System.Uri(url) + If ((wsUri.Port >= 1024) _ + AndAlso (String.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) = 0)) Then + Return true + End If + Return false + End Function + End Class + + ''' + _ + Public Delegate Sub AddCompletedEventHandler(ByVal sender As Object, ByVal e As AddCompletedEventArgs) + + ''' + _ + Partial Public Class AddCompletedEventArgs + Inherits System.ComponentModel.AsyncCompletedEventArgs + + Private results() As Object + + Friend Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) + MyBase.New(exception, cancelled, userState) + Me.results = results + End Sub + + ''' + Public ReadOnly Property Result() As Integer + Get + Me.RaiseExceptionIfNecessary + Return CType(Me.results(0),Integer) + End Get + End Property + End Class + + ''' + _ + Public Delegate Sub SubtractCompletedEventHandler(ByVal sender As Object, ByVal e As SubtractCompletedEventArgs) + + ''' + _ + Partial Public Class SubtractCompletedEventArgs + Inherits System.ComponentModel.AsyncCompletedEventArgs + + Private results() As Object + + Friend Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) + MyBase.New(exception, cancelled, userState) + Me.results = results + End Sub + + ''' + Public ReadOnly Property Result() As Integer + Get + Me.RaiseExceptionIfNecessary + Return CType(Me.results(0),Integer) + End Get + End Property + End Class + + ''' + _ + Public Delegate Sub MultiplyCompletedEventHandler(ByVal sender As Object, ByVal e As MultiplyCompletedEventArgs) + + ''' + _ + Partial Public Class MultiplyCompletedEventArgs + Inherits System.ComponentModel.AsyncCompletedEventArgs + + Private results() As Object + + Friend Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) + MyBase.New(exception, cancelled, userState) + Me.results = results + End Sub + + ''' + Public ReadOnly Property Result() As Integer + Get + Me.RaiseExceptionIfNecessary + Return CType(Me.results(0),Integer) + End Get + End Property + End Class + + ''' + _ + Public Delegate Sub DivideCompletedEventHandler(ByVal sender As Object, ByVal e As DivideCompletedEventArgs) + + ''' + _ + Partial Public Class DivideCompletedEventArgs + Inherits System.ComponentModel.AsyncCompletedEventArgs + + Private results() As Object + + Friend Sub New(ByVal results() As Object, ByVal exception As System.Exception, ByVal cancelled As Boolean, ByVal userState As Object) + MyBase.New(exception, cancelled, userState) + Me.results = results + End Sub + + ''' + Public ReadOnly Property Result() As Integer + Get + Me.RaiseExceptionIfNecessary + Return CType(Me.results(0),Integer) + End Get + End Property + End Class +End Namespace diff --git a/Code/Chapter 26/WFMathClient/Web References/localhost/Service.disco b/Code/Chapter 26/WFMathClient/Web References/localhost/Service.disco new file mode 100644 index 0000000..26ad003 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Web References/localhost/Service.disco @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/Web References/localhost/Service.wsdl b/Code/Chapter 26/WFMathClient/Web References/localhost/Service.wsdl new file mode 100644 index 0000000..8c3d1d3 --- /dev/null +++ b/Code/Chapter 26/WFMathClient/Web References/localhost/Service.wsdl @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 26/WFMathClient/app.config b/Code/Chapter 26/WFMathClient/app.config new file mode 100644 index 0000000..890256b --- /dev/null +++ b/Code/Chapter 26/WFMathClient/app.config @@ -0,0 +1,69 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + http://localhost/VbMathWebService/Service.asmx + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 27/AppClassExample/MainWindow.vb b/Code/Chapter 27/AppClassExample/MainWindow.vb new file mode 100644 index 0000000..52daf8d --- /dev/null +++ b/Code/Chapter 27/AppClassExample/MainWindow.vb @@ -0,0 +1,34 @@ +Imports System.Windows.Forms +Imports System.Reflection + +' Assembly-level attributes. + + + + +Namespace MyWindowsApp + Public Class MainWindow + Inherits Form + ' Reflect over attributes using Application type. + Public Sub New + MessageBox.Show(String.Format("This app brought to you by {0}", _ + Application.CompanyName), _ + Application.ProductName) + + ' Handle Application.Exit event. + AddHandler Application.ApplicationExit, AddressOf MainWindow_OnExit + End Sub + + Public Sub MainWindow_OnExit(ByVal sender As Object, ByVal args As EventArgs) + MessageBox.Show(string.Format("Form version {0} has terminated.", _ + Application.ProductVersion)) + End Sub + End Class + + Public Module Program + ' Run this application and identify the main window. + Sub Main() + Application.Run(New MainWindow()) + End Sub + End Module +End Namespace diff --git a/Code/Chapter 27/ControlBehaviors/MainWindow.vb b/Code/Chapter 27/ControlBehaviors/MainWindow.vb new file mode 100644 index 0000000..3383826 --- /dev/null +++ b/Code/Chapter 27/ControlBehaviors/MainWindow.vb @@ -0,0 +1,48 @@ +Imports System.Windows.Forms +Imports System.Drawing + +Namespace MyWindowsApp + Public Class MainWindow + Inherits Form + + Public Sub New() + ' Use inherited properties to set basic UI. + Text = "My Fantastic Form" + Height = 300 + Width = 500 + BackColor = Color.LemonChiffon + Cursor = Cursors.Hand + End Sub + + Public Sub MainWindow_MouseMove(ByVal sender As Object, _ + ByVal e As MouseEventArgs) Handles Me.MouseMove + Text = String.Format("Current Pos: ({0} , {1})", e.X, e.Y) + End Sub + + Public Sub MainWindow_MouseUp(ByVal sender As Object, _ + ByVal e As MouseEventArgs) Handles Me.MouseUp + If e.Button = System.Windows.Forms.MouseButtons.Left Then + MessageBox.Show("Left click!") + End If + If e.Button = System.Windows.Forms.MouseButtons.Right Then + MessageBox.Show("Right click!") + End If + If e.Button = System.Windows.Forms.MouseButtons.Middle Then + MessageBox.Show("Middle click!") + End If + End Sub + + Public Sub MainWindow_KeyUp(ByVal sender As Object, _ + ByVal e As KeyEventArgs) Handles Me.KeyUp + MessageBox.Show(e.KeyCode.ToString(), "Key Pressed!") + End Sub + + End Class + + Public Module Program + ' Run this application and identify the main window. + Sub Main() + Application.Run(New MainWindow()) + End Sub + End Module +End Namespace diff --git a/Code/Chapter 27/FormLifeTime/MainWindow.vb b/Code/Chapter 27/FormLifeTime/MainWindow.vb new file mode 100644 index 0000000..26170c1 --- /dev/null +++ b/Code/Chapter 27/FormLifeTime/MainWindow.vb @@ -0,0 +1,51 @@ +Imports System.Windows.Forms +Imports System.ComponentModel + +Public Class MainWindow + Inherits Form + + Private lifeTimeInfo As String + + ' Handle the Load, Activated, Deactivate, and Closed events. + Public Sub MainWindow_Load(ByVal sender As Object, _ + ByVal e as EventArgs) Handles Me.Load + lifeTimeInfo = lifeTimeInfo & "Load event" & VbLf + End Sub + + Public Sub MainWindow_Activated(ByVal sender As Object, _ + ByVal e as EventArgs) Handles Me.Activated + lifeTimeInfo = lifeTimeInfo & "Activated event" & VbLf + End Sub + + Public Sub MainWindow_Deactivate(ByVal sender As Object, _ + ByVal e as EventArgs) Handles Me.Deactivate + lifeTimeInfo = lifeTimeInfo & "Deactivate event" & VbLf + End Sub + + Public Sub MainWindow_Closed(ByVal sender As Object, _ + ByVal e as EventArgs) Handles Me.Closed + lifeTimeInfo = lifeTimeInfo & "Closed event" & VbLf + MessageBox.Show(lifeTimeInfo) + End Sub + + Private Sub MainWindow_Closing(ByVal sender As Object, _ + ByVal e As CancelEventArgs) Handles Me.Closing + Dim dr As System.Windows.Forms.DialogResult = _ + MessageBox.Show("Do you REALLY want to close this app?", _ + "Closing event!", MessageBoxButtons.YesNo) + If dr = System.Windows.Forms.DialogResult.No Then + e.Cancel = True + Else + e.Cancel = False + End If + End Sub + +End Class + +Public Module Program + ' Run this application and identify the main window. + Sub Main() + Application.Run(New MainWindow()) + End Sub +End Module + diff --git a/Code/Chapter 27/MenuStripApp/MainWindow.Designer.vb b/Code/Chapter 27/MenuStripApp/MainWindow.Designer.vb new file mode 100644 index 0000000..1980194 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/MainWindow.Designer.vb @@ -0,0 +1,115 @@ + _ +Partial Class MainWindow + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.mainFormMenuStrip = New System.Windows.Forms.MenuStrip + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripTextBoxColor = New System.Windows.Forms.ToolStripTextBox + Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.HugeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.NormalToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.TinyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.mainFormMenuStrip.SuspendLayout() + Me.ContextMenuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'mainFormMenuStrip + ' + Me.mainFormMenuStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.toolStripTextBoxColor}) + Me.mainFormMenuStrip.Location = New System.Drawing.Point(0, 0) + Me.mainFormMenuStrip.Name = "mainFormMenuStrip" + Me.mainFormMenuStrip.Size = New System.Drawing.Size(284, 27) + Me.mainFormMenuStrip.TabIndex = 0 + Me.mainFormMenuStrip.Text = "MenuStrip1" + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExitToolStripMenuItem}) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 23) + Me.FileToolStripMenuItem.Text = "&File" + ' + 'ExitToolStripMenuItem + ' + Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(92, 22) + Me.ExitToolStripMenuItem.Text = "E&xit" + ' + 'toolStripTextBoxColor + ' + Me.toolStripTextBoxColor.Name = "toolStripTextBoxColor" + Me.toolStripTextBoxColor.Size = New System.Drawing.Size(100, 23) + ' + 'ContextMenuStrip1 + ' + Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.HugeToolStripMenuItem, Me.NormalToolStripMenuItem, Me.TinyToolStripMenuItem}) + Me.ContextMenuStrip1.Name = "ContextMenuStrip1" + Me.ContextMenuStrip1.Size = New System.Drawing.Size(115, 70) + ' + 'HugeToolStripMenuItem + ' + Me.HugeToolStripMenuItem.Name = "HugeToolStripMenuItem" + Me.HugeToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.HugeToolStripMenuItem.Text = "Huge" + ' + 'NormalToolStripMenuItem + ' + Me.NormalToolStripMenuItem.Name = "NormalToolStripMenuItem" + Me.NormalToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.NormalToolStripMenuItem.Text = "Normal" + ' + 'TinyToolStripMenuItem + ' + Me.TinyToolStripMenuItem.Name = "TinyToolStripMenuItem" + Me.TinyToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.TinyToolStripMenuItem.Text = "Tiny" + ' + 'MainWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(284, 264) + Me.ContextMenuStrip = Me.ContextMenuStrip1 + Me.Controls.Add(Me.mainFormMenuStrip) + Me.MainMenuStrip = Me.mainFormMenuStrip + Me.Name = "MainWindow" + Me.Text = "My Menu App" + Me.mainFormMenuStrip.ResumeLayout(False) + Me.mainFormMenuStrip.PerformLayout() + Me.ContextMenuStrip1.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents mainFormMenuStrip As System.Windows.Forms.MenuStrip + Friend WithEvents FileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ExitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents toolStripTextBoxColor As System.Windows.Forms.ToolStripTextBox + Friend WithEvents ContextMenuStrip1 As System.Windows.Forms.ContextMenuStrip + Friend WithEvents HugeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents NormalToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents TinyToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + +End Class diff --git a/Code/Chapter 27/MenuStripApp/MainWindow.resx b/Code/Chapter 27/MenuStripApp/MainWindow.resx new file mode 100644 index 0000000..f9e2771 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/MainWindow.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 181, 17 + + \ No newline at end of file diff --git a/Code/Chapter 27/MenuStripApp/MainWindow.vb b/Code/Chapter 27/MenuStripApp/MainWindow.vb new file mode 100644 index 0000000..0c76c62 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/MainWindow.vb @@ -0,0 +1,88 @@ +' Helper enum for font size. +Public Enum TextFontSize + FontSizeHuge = 30 + FontSizeNormal = 20 + FontSizeTiny = 8 +End Enum + +Public Class MainWindow + Private currFontSize As TextFontSize = TextFontSize.FontSizeNormal + + ' Marks the item checked. + Private WithEvents currentCheckedItem As ToolStripMenuItem + + Public Sub New() + ' Call InitializeComponent() when defining your own constructor! + InitializeComponent() + + ' Inherited method to center the Form. + CenterToScreen() + + ' Now check the 'Normal' menu item. + currentCheckedItem = normalToolStripMenuItem + currentCheckedItem.Checked = True + End Sub + + Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click + Application.Exit() + End Sub + + Private Sub toolStripTextBoxColor_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles toolStripTextBoxColor.Leave + Try + BackColor = Color.FromName(toolStripTextBoxColor.Text) + Catch ' Just do nothing if the user provides bad data + End Try + End Sub + + Private Sub MainWindow_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + g.DrawString("Right click on me...", _ + New Font("Times New Roman", currFontSize), _ + New SolidBrush(Color.Black), 50, 50) + End Sub + + ' This one event handler handles the Click event from each context menu item. + Private Sub ContextMenuItemSelection_Clicked(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles HugeToolStripMenuItem.Click, _ + TinyToolStripMenuItem.Click, NormalToolStripMenuItem.Click + + ' Obtain the currently clicked ToolStripMenuItem. + Dim miClicked As ToolStripMenuItem = CType(sender, ToolStripMenuItem) + + ' Uncheck the currently checked item. + currentCheckedItem.Checked = False + + ' Figure out which item was clicked using its Name. + If miClicked.Name = "HugeToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeHuge + End If + If miClicked.Name = "NormalToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeNormal + End If + If miClicked.Name = "TinyToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeTiny + End If + + ' Tell the Form to repaint itself. + Invalidate() + + ' Establish which item to check. + If miClicked.Name = "HugeToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeHuge + currentCheckedItem = HugeToolStripMenuItem + End If + If miClicked.Name = "NormalToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeNormal + currentCheckedItem = NormalToolStripMenuItem + End If + If miClicked.Name = "TinyToolStripMenuItem" Then + currFontSize = TextFontSize.FontSizeTiny + currentCheckedItem = TinyToolStripMenuItem + End If + + ' Check new item. + currentCheckedItem.Checked = True + End Sub + +End Class diff --git a/Code/Chapter 27/MenuStripApp/MenuStripApp.sln b/Code/Chapter 27/MenuStripApp/MenuStripApp.sln new file mode 100644 index 0000000..b48ed00 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/MenuStripApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MenuStripApp", "MenuStripApp.vbproj", "{1926E57C-88F9-4156-A202-EF7996DD8165}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1926E57C-88F9-4156-A202-EF7996DD8165}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1926E57C-88F9-4156-A202-EF7996DD8165}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1926E57C-88F9-4156-A202-EF7996DD8165}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1926E57C-88F9-4156-A202-EF7996DD8165}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 27/MenuStripApp/MenuStripApp.suo b/Code/Chapter 27/MenuStripApp/MenuStripApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..afb759482b57c45d1d1db44b73ad5c8ea2ef8c6b GIT binary patch literal 17408 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 qgW_LC(}AjPX8g;YNzJwNf0z45n&&_r + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1926E57C-88F9-4156-A202-EF7996DD8165} + WinExe + MenuStripApp.My.MyApplication + MenuStripApp + MenuStripApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + MenuStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MenuStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainWindow.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainWindow.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 27/MenuStripApp/My Project/Application.Designer.vb b/Code/Chapter 27/MenuStripApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..c6adfd8 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.MenuStripApp.MainWindow + End Sub + End Class +End Namespace diff --git a/Code/Chapter 27/MenuStripApp/My Project/Application.myapp b/Code/Chapter 27/MenuStripApp/My Project/Application.myapp new file mode 100644 index 0000000..dbf9822 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainWindow + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 27/MenuStripApp/My Project/AssemblyInfo.vb b/Code/Chapter 27/MenuStripApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d17d3ea --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 27/MenuStripApp/My Project/Resources.Designer.vb b/Code/Chapter 27/MenuStripApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..3e1ccfe --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MenuStripApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/MenuStripApp/My Project/Resources.resx b/Code/Chapter 27/MenuStripApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 27/MenuStripApp/My Project/Settings.Designer.vb b/Code/Chapter 27/MenuStripApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..e2a8517 --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MenuStripApp.My.MySettings + Get + Return Global.MenuStripApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/MenuStripApp/My Project/Settings.settings b/Code/Chapter 27/MenuStripApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 27/MenuStripApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 27/MyFirstWindow/MainWindow.vb b/Code/Chapter 27/MyFirstWindow/MainWindow.vb new file mode 100644 index 0000000..2532eb3 --- /dev/null +++ b/Code/Chapter 27/MyFirstWindow/MainWindow.vb @@ -0,0 +1,14 @@ +Imports System.Windows.Forms + +Namespace MyWindowsApp + Public Class MainWindow + Inherits Form + End Class + + Public Module Program + ' Run this application and identify the main window. + Sub Main() + Application.Run(New MainWindow()) + End Sub + End Module +End Namespace diff --git a/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.Designer.vb b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.Designer.vb new file mode 100644 index 0000000..c450f7c --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.Designer.vb @@ -0,0 +1,34 @@ + _ +Partial Class ChildPrototypeForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'ChildPrototypeForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "ChildPrototypeForm" + Me.Text = "ChildPrototypeForm" + Me.ResumeLayout(False) + + End Sub +End Class diff --git a/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.resx b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.vb b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.vb new file mode 100644 index 0000000..8913160 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/ChildPrototypeForm.vb @@ -0,0 +1,19 @@ +Option Explicit On +Option Strict On + +Public Class ChildPrototypeForm + Private Sub ChildPrototypeForm_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles MyBase.Click + ' Get three random numbers + Dim r, g, b As Integer + Dim ran As New Random() + r = ran.Next(0, 255) + g = ran.Next(0, 255) + b = ran.Next(0, 255) + + ' Now create a color for the background. + Dim currColor As Color = Color.FromArgb(r, g, b) + Me.BackColor = currColor + Me.Text = currColor.ToString() + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/Form1.resx b/Code/Chapter 27/SimpleMdiApp/Form1.resx new file mode 100644 index 0000000..541af56 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/MainWindow.Designer.vb b/Code/Chapter 27/SimpleMdiApp/MainWindow.Designer.vb new file mode 100644 index 0000000..b4068ce --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/MainWindow.Designer.vb @@ -0,0 +1,119 @@ + _ +Partial Class MainWindow + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.menuStrip1 = New System.Windows.Forms.MenuStrip + Me.fileToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.newToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.exitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.windowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.arrangeWindowsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.cascadeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.verticalToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.horizontalToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.menuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'menuStrip1 + ' + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.fileToolStripMenuItem1, Me.windowToolStripMenuItem, Me.arrangeWindowsToolStripMenuItem}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 0) + Me.menuStrip1.MdiWindowListItem = Me.windowToolStripMenuItem + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(292, 24) + Me.menuStrip1.TabIndex = 3 + Me.menuStrip1.Text = "menuStrip1" + ' + 'fileToolStripMenuItem1 + ' + Me.fileToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.newToolStripMenuItem, Me.exitToolStripMenuItem}) + Me.fileToolStripMenuItem1.Name = "fileToolStripMenuItem1" + Me.fileToolStripMenuItem1.Size = New System.Drawing.Size(35, 20) + Me.fileToolStripMenuItem1.Text = "&File" + ' + 'newToolStripMenuItem + ' + Me.newToolStripMenuItem.Name = "newToolStripMenuItem" + Me.newToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.newToolStripMenuItem.Text = "&New" + ' + 'exitToolStripMenuItem + ' + Me.exitToolStripMenuItem.Name = "exitToolStripMenuItem" + Me.exitToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.exitToolStripMenuItem.Text = "E&xit" + ' + 'windowToolStripMenuItem + ' + Me.windowToolStripMenuItem.Name = "windowToolStripMenuItem" + Me.windowToolStripMenuItem.Size = New System.Drawing.Size(57, 20) + Me.windowToolStripMenuItem.Text = "&Window" + ' + 'arrangeWindowsToolStripMenuItem + ' + Me.arrangeWindowsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.cascadeToolStripMenuItem, Me.verticalToolStripMenuItem, Me.horizontalToolStripMenuItem}) + Me.arrangeWindowsToolStripMenuItem.Name = "arrangeWindowsToolStripMenuItem" + Me.arrangeWindowsToolStripMenuItem.Size = New System.Drawing.Size(104, 20) + Me.arrangeWindowsToolStripMenuItem.Text = "&Arrange Windows" + ' + 'cascadeToolStripMenuItem + ' + Me.cascadeToolStripMenuItem.Name = "cascadeToolStripMenuItem" + Me.cascadeToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.cascadeToolStripMenuItem.Text = "&Cascade" + ' + 'verticalToolStripMenuItem + ' + Me.verticalToolStripMenuItem.Name = "verticalToolStripMenuItem" + Me.verticalToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.verticalToolStripMenuItem.Text = "&Vertical" + ' + 'horizontalToolStripMenuItem + ' + Me.horizontalToolStripMenuItem.Name = "horizontalToolStripMenuItem" + Me.horizontalToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.horizontalToolStripMenuItem.Text = "&Horizontal" + ' + 'MainWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Controls.Add(Me.menuStrip1) + Me.IsMdiContainer = True + Me.Name = "MainWindow" + Me.Text = "Simple MDI App" + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents menuStrip1 As System.Windows.Forms.MenuStrip + Private WithEvents fileToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents newToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents exitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents windowToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents arrangeWindowsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents cascadeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents verticalToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents horizontalToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + +End Class diff --git a/Code/Chapter 27/SimpleMdiApp/MainWindow.vb b/Code/Chapter 27/SimpleMdiApp/MainWindow.vb new file mode 100644 index 0000000..41481a6 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/MainWindow.vb @@ -0,0 +1,35 @@ +Option Explicit On +Option Strict On + +Public Class MainWindow + +#Region "Menu Handlers" + Private Sub newToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles newToolStripMenuItem.Click + ' Make a new child window. + Dim newChild As New ChildPrototypeForm() + + ' Set the Parent Form of the Child window. + newChild.MdiParent = Me + + ' Display the new form. + newChild.Show() + End Sub + + Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles exitToolStripMenuItem.Click + Application.Exit() + End Sub + + Private Sub cascadeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cascadeToolStripMenuItem.Click + LayoutMdi(MdiLayout.Cascade) + End Sub + + Private Sub verticalToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles verticalToolStripMenuItem.Click + LayoutMdi(MdiLayout.TileVertical) + End Sub + + Private Sub horizontalToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles horizontalToolStripMenuItem.Click + LayoutMdi(MdiLayout.TileHorizontal) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Application.Designer.vb b/Code/Chapter 27/SimpleMdiApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..f47ecd7 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SimpleMdiApp.MainWindow + End Sub + End Class +End Namespace diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Application.myapp b/Code/Chapter 27/SimpleMdiApp/My Project/Application.myapp new file mode 100644 index 0000000..dbf9822 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainWindow + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/AssemblyInfo.vb b/Code/Chapter 27/SimpleMdiApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..37e88b7 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Resources.Designer.vb b/Code/Chapter 27/SimpleMdiApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..b879c80 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleMdiApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Resources.resx b/Code/Chapter 27/SimpleMdiApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Settings.Designer.vb b/Code/Chapter 27/SimpleMdiApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6255844 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleMdiApp.My.MySettings + Get + Return Global.SimpleMdiApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/SimpleMdiApp/My Project/Settings.settings b/Code/Chapter 27/SimpleMdiApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.sln b/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.sln new file mode 100644 index 0000000..a7685b4 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleMdiApp", "SimpleMdiApp.vbproj", "{ECAA54F3-68CE-44DE-B6A9-D64F793785AF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ECAA54F3-68CE-44DE-B6A9-D64F793785AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ECAA54F3-68CE-44DE-B6A9-D64F793785AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ECAA54F3-68CE-44DE-B6A9-D64F793785AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ECAA54F3-68CE-44DE-B6A9-D64F793785AF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.suo b/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..b317e9ca4b913e650df3be4a914332f268a4f4d7 GIT binary patch literal 28672 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 J<}Owa^nbi0hz + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {ECAA54F3-68CE-44DE-B6A9-D64F793785AF} + WinExe + SimpleMdiApp.My.MyApplication + SimpleMdiApp + SimpleMdiApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleMdiApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleMdiApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + ChildPrototypeForm.vb + + + Form + + + Form + + + MainWindow.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + ChildPrototypeForm.vb + + + Designer + MainWindow.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.vbproj.user b/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 27/SimpleMdiApp/SimpleMdiApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 27/StatusStripApp/HappyDude.jpg b/Code/Chapter 27/StatusStripApp/HappyDude.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c9aada6de4c998d4829a2079d6cc4c243e09cd2 GIT binary patch literal 3262 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 CoZ__r literal 0 HcmV?d00001 diff --git a/Code/Chapter 27/StatusStripApp/MainWindow.Designer.vb b/Code/Chapter 27/StatusStripApp/MainWindow.Designer.vb new file mode 100644 index 0000000..7127797 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/MainWindow.Designer.vb @@ -0,0 +1,160 @@ + _ +Partial Class MainWindow + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainWindow)) + Me.MenuStrip1 = New System.Windows.Forms.MenuStrip + Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.HelpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.mainStatusStrip = New System.Windows.Forms.StatusStrip + Me.toolStripStatusLabelMenuState = New System.Windows.Forms.ToolStripStatusLabel + Me.toolStripStatusLabelClock = New System.Windows.Forms.ToolStripStatusLabel + Me.toolStripDropDownButtonDateTime = New System.Windows.Forms.ToolStripDropDownButton + Me.DayOfTheWeekToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.CurrentTimeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.timerDateTimeUpdate = New System.Windows.Forms.Timer(Me.components) + Me.MenuStrip1.SuspendLayout() + Me.mainStatusStrip.SuspendLayout() + Me.SuspendLayout() + ' + 'MenuStrip1 + ' + Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.HelpToolStripMenuItem}) + Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) + Me.MenuStrip1.Name = "MenuStrip1" + Me.MenuStrip1.Size = New System.Drawing.Size(440, 24) + Me.MenuStrip1.TabIndex = 0 + Me.MenuStrip1.Text = "MenuStrip1" + ' + 'FileToolStripMenuItem + ' + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExitToolStripMenuItem}) + Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.FileToolStripMenuItem.Text = "&File" + ' + 'ExitToolStripMenuItem + ' + Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(92, 22) + Me.ExitToolStripMenuItem.Text = "E&xit" + ' + 'HelpToolStripMenuItem + ' + Me.HelpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.AboutToolStripMenuItem}) + Me.HelpToolStripMenuItem.Name = "HelpToolStripMenuItem" + Me.HelpToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.HelpToolStripMenuItem.Text = "&Help" + ' + 'AboutToolStripMenuItem + ' + Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.AboutToolStripMenuItem.Text = "&About..." + ' + 'mainStatusStrip + ' + Me.mainStatusStrip.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripStatusLabelMenuState, Me.toolStripStatusLabelClock, Me.toolStripDropDownButtonDateTime}) + Me.mainStatusStrip.Location = New System.Drawing.Point(0, 242) + Me.mainStatusStrip.Name = "mainStatusStrip" + Me.mainStatusStrip.Size = New System.Drawing.Size(440, 22) + Me.mainStatusStrip.TabIndex = 1 + Me.mainStatusStrip.Text = "StatusStrip1" + ' + 'toolStripStatusLabelMenuState + ' + Me.toolStripStatusLabelMenuState.Name = "toolStripStatusLabelMenuState" + Me.toolStripStatusLabelMenuState.Size = New System.Drawing.Size(392, 17) + Me.toolStripStatusLabelMenuState.Spring = True + Me.toolStripStatusLabelMenuState.TextAlign = System.Drawing.ContentAlignment.TopLeft + ' + 'toolStripStatusLabelClock + ' + Me.toolStripStatusLabelClock.BorderSides = CType((((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left Or System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) _ + Or System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) _ + Or System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom), System.Windows.Forms.ToolStripStatusLabelBorderSides) + Me.toolStripStatusLabelClock.Name = "toolStripStatusLabelClock" + Me.toolStripStatusLabelClock.Size = New System.Drawing.Size(4, 17) + ' + 'toolStripDropDownButtonDateTime + ' + Me.toolStripDropDownButtonDateTime.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripDropDownButtonDateTime.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DayOfTheWeekToolStripMenuItem, Me.CurrentTimeToolStripMenuItem}) + Me.toolStripDropDownButtonDateTime.Image = CType(resources.GetObject("toolStripDropDownButtonDateTime.Image"), System.Drawing.Image) + Me.toolStripDropDownButtonDateTime.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripDropDownButtonDateTime.Name = "toolStripDropDownButtonDateTime" + Me.toolStripDropDownButtonDateTime.Size = New System.Drawing.Size(29, 20) + Me.toolStripDropDownButtonDateTime.Text = "ToolStripDropDownButton1" + ' + 'DayOfTheWeekToolStripMenuItem + ' + Me.DayOfTheWeekToolStripMenuItem.Name = "DayOfTheWeekToolStripMenuItem" + Me.DayOfTheWeekToolStripMenuItem.Size = New System.Drawing.Size(160, 22) + Me.DayOfTheWeekToolStripMenuItem.Text = "Day of the Week" + ' + 'CurrentTimeToolStripMenuItem + ' + Me.CurrentTimeToolStripMenuItem.Name = "CurrentTimeToolStripMenuItem" + Me.CurrentTimeToolStripMenuItem.Size = New System.Drawing.Size(160, 22) + Me.CurrentTimeToolStripMenuItem.Text = "Current Time" + ' + 'timerDateTimeUpdate + ' + Me.timerDateTimeUpdate.Enabled = True + Me.timerDateTimeUpdate.Interval = 1000 + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(440, 264) + Me.Controls.Add(Me.mainStatusStrip) + Me.Controls.Add(Me.MenuStrip1) + Me.MainMenuStrip = Me.MenuStrip1 + Me.Name = "MainForm" + Me.Text = "Status Strip App" + Me.MenuStrip1.ResumeLayout(False) + Me.MenuStrip1.PerformLayout() + Me.mainStatusStrip.ResumeLayout(False) + Me.mainStatusStrip.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents MenuStrip1 As System.Windows.Forms.MenuStrip + Friend WithEvents FileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents ExitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents HelpToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents AboutToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents mainStatusStrip As System.Windows.Forms.StatusStrip + Friend WithEvents toolStripStatusLabelMenuState As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents toolStripStatusLabelClock As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents toolStripDropDownButtonDateTime As System.Windows.Forms.ToolStripDropDownButton + Friend WithEvents CurrentTimeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents DayOfTheWeekToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Friend WithEvents timerDateTimeUpdate As System.Windows.Forms.Timer + +End Class diff --git a/Code/Chapter 27/StatusStripApp/MainWindow.resx b/Code/Chapter 27/StatusStripApp/MainWindow.resx new file mode 100644 index 0000000..c00f847 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/MainWindow.resx @@ -0,0 +1,484 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 132, 17 + + + + + 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 + Ssb1AAAAAElFTkSuQmCC + + + + 269, 17 + + \ No newline at end of file diff --git a/Code/Chapter 27/StatusStripApp/MainWindow.vb b/Code/Chapter 27/StatusStripApp/MainWindow.vb new file mode 100644 index 0000000..e03affc --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/MainWindow.vb @@ -0,0 +1,105 @@ +Public Class MainWindow + + ' Which format to display? + Private dtFormat As DateTimeFormat = DateTimeFormat.ShowClock + + ' Marks the item checked. + Private currentCheckedItem As ToolStripMenuItem + + Public Sub New() + ' This call is required by the Windows Forms designer. + InitializeComponent() + + ' These properties can also be set + ' with the Properties window. + Text = "Status Strip Example" + CenterToScreen() + currentCheckedItem = currentTimeToolStripMenuItem + currentCheckedItem.Checked = True + End Sub + + Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click + Application.Exit() + End Sub + + Private Sub aboutToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click + MessageBox.Show("My StatusStripApp!") + End Sub + +#Region "Mouse Hover event handlers" + Private Sub exitToolStripMenuItem_MouseHover(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.MouseHover + toolStripStatusLabelMenuState.Text = "Exits the app." + End Sub + + Private Sub aboutToolStripMenuItem_MouseHover(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.MouseHover + toolStripStatusLabelMenuState.Text = "Shows about box." + End Sub + + Private Sub dayoftheWeekToolStripMenuItem_MouseHover(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles DayOfTheWeekToolStripMenuItem.MouseHover + toolStripStatusLabelMenuState.Text = "Shows the day of the week." + End Sub + + Private Sub currentTimeToolStripMenuItem_MouseHover(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles CurrentTimeToolStripMenuItem.MouseHover + toolStripStatusLabelMenuState.Text = "Shows the current time." + End Sub +#End Region + +#Region "Pop up button Click event handlers" + Private Sub currentTimeToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles CurrentTimeToolStripMenuItem.Click + ' Toggle check mark and set pane format to time. + currentCheckedItem.Checked = False + dtFormat = DateTimeFormat.ShowClock + currentCheckedItem = CurrentTimeToolStripMenuItem + currentCheckedItem.Checked = True + End Sub + + Private Sub dayoftheWeekToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles DayOfTheWeekToolStripMenuItem.Click + ' Toggle check mark and set pane format to date. + currentCheckedItem.Checked = False + dtFormat = DateTimeFormat.ShowDay + currentCheckedItem = DayOfTheWeekToolStripMenuItem + currentCheckedItem.Checked = True + End Sub +#End Region + +#Region "Timer Tick Event Handler" + Private Sub timerDateTimeUpdate_Tick(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles timerDateTimeUpdate.Tick + Dim panelInfo As String = "" + + ' Create current format. + If dtFormat = DateTimeFormat.ShowClock Then + panelInfo = DateTime.Now.ToLongTimeString + Else + panelInfo = DateTime.Now.ToLongDateString + End If + + ' Set text on pane. + toolStripStatusLabelClock.Text = panelInfo + End Sub +#End Region + +#Region "Mouse Leave event for menu items" + Private Sub Handle_MouseLeave(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles CurrentTimeToolStripMenuItem.MouseLeave, _ + ExitToolStripMenuItem.MouseLeave, _ + DayOfTheWeekToolStripMenuItem.MouseLeave, _ + AboutToolStripMenuItem.MouseLeave + toolStripStatusLabelMenuState.Text = "Ready." + End Sub +#End Region + +End Class + +Public Enum DateTimeFormat + ShowClock + ShowDay +End Enum diff --git a/Code/Chapter 27/StatusStripApp/My Project/Application.Designer.vb b/Code/Chapter 27/StatusStripApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..11ed291 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.StatusStripApp.MainWindow + End Sub + End Class +End Namespace diff --git a/Code/Chapter 27/StatusStripApp/My Project/Application.myapp b/Code/Chapter 27/StatusStripApp/My Project/Application.myapp new file mode 100644 index 0000000..dbf9822 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainWindow + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 27/StatusStripApp/My Project/AssemblyInfo.vb b/Code/Chapter 27/StatusStripApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..0985a43 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 27/StatusStripApp/My Project/Resources.Designer.vb b/Code/Chapter 27/StatusStripApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..22ca37f --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("StatusStripApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/StatusStripApp/My Project/Resources.resx b/Code/Chapter 27/StatusStripApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 27/StatusStripApp/My Project/Settings.Designer.vb b/Code/Chapter 27/StatusStripApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..aee3f1b --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.StatusStripApp.My.MySettings + Get + Return Global.StatusStripApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/StatusStripApp/My Project/Settings.settings b/Code/Chapter 27/StatusStripApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 27/StatusStripApp/StatusStripApp.sln b/Code/Chapter 27/StatusStripApp/StatusStripApp.sln new file mode 100644 index 0000000..b4215a2 --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/StatusStripApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StatusStripApp", "StatusStripApp.vbproj", "{56DB453C-F172-40E8-B5B8-D6C8DB949FA5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {56DB453C-F172-40E8-B5B8-D6C8DB949FA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56DB453C-F172-40E8-B5B8-D6C8DB949FA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56DB453C-F172-40E8-B5B8-D6C8DB949FA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56DB453C-F172-40E8-B5B8-D6C8DB949FA5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 27/StatusStripApp/StatusStripApp.suo b/Code/Chapter 27/StatusStripApp/StatusStripApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..b436b1e1bfb2aff6e3c47045ac28eaa3ed43d95a GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 27/StatusStripApp/StatusStripApp.vbproj b/Code/Chapter 27/StatusStripApp/StatusStripApp.vbproj new file mode 100644 index 0000000..f78bf3a --- /dev/null +++ b/Code/Chapter 27/StatusStripApp/StatusStripApp.vbproj @@ -0,0 +1,123 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {56DB453C-F172-40E8-B5B8-D6C8DB949FA5} + WinExe + StatusStripApp.My.MyApplication + StatusStripApp + StatusStripApp + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + StatusStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + StatusStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainWindow.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainWindow.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 27/ToolStripApp/MainWindow.Designer.vb b/Code/Chapter 27/ToolStripApp/MainWindow.Designer.vb new file mode 100644 index 0000000..4b7958b --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/MainWindow.Designer.vb @@ -0,0 +1,163 @@ + _ +Partial Class MainWindow + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainWindow)) + Me.toolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator + Me.toolStripTextBoxMessage = New System.Windows.Forms.ToolStripTextBox + Me.toolStrip1 = New System.Windows.Forms.ToolStrip + Me.toolStripButtonGrowFont = New System.Windows.Forms.ToolStripButton + Me.toolStripButtonShrinkFont = New System.Windows.Forms.ToolStripButton + Me.BottomToolStripPanel = New System.Windows.Forms.ToolStripPanel + Me.TopToolStripPanel = New System.Windows.Forms.ToolStripPanel + Me.RightToolStripPanel = New System.Windows.Forms.ToolStripPanel + Me.LeftToolStripPanel = New System.Windows.Forms.ToolStripPanel + Me.ContentPanel = New System.Windows.Forms.ToolStripContentPanel + Me.toolStripContainer1 = New System.Windows.Forms.ToolStripContainer + Me.toolStrip1.SuspendLayout() + Me.toolStripContainer1.TopToolStripPanel.SuspendLayout() + Me.toolStripContainer1.SuspendLayout() + Me.SuspendLayout() + ' + 'toolStripSeparator1 + ' + Me.toolStripSeparator1.Name = "toolStripSeparator1" + Me.toolStripSeparator1.Size = New System.Drawing.Size(6, 25) + ' + 'toolStripTextBoxMessage + ' + Me.toolStripTextBoxMessage.Name = "toolStripTextBoxMessage" + Me.toolStripTextBoxMessage.Size = New System.Drawing.Size(100, 25) + Me.toolStripTextBoxMessage.Text = "Enter Message" + ' + 'toolStrip1 + ' + Me.toolStrip1.Dock = System.Windows.Forms.DockStyle.None + Me.toolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripButtonGrowFont, Me.toolStripButtonShrinkFont, Me.toolStripSeparator1, Me.toolStripTextBoxMessage}) + Me.toolStrip1.Location = New System.Drawing.Point(3, 0) + Me.toolStrip1.Name = "toolStrip1" + Me.toolStrip1.Size = New System.Drawing.Size(197, 25) + Me.toolStrip1.TabIndex = 0 + Me.toolStrip1.Text = "toolStrip1" + ' + 'toolStripButtonGrowFont + ' + Me.toolStripButtonGrowFont.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonGrowFont.Image = CType(resources.GetObject("toolStripButtonGrowFont.Image"), System.Drawing.Image) + Me.toolStripButtonGrowFont.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonGrowFont.Name = "toolStripButtonGrowFont" + Me.toolStripButtonGrowFont.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonGrowFont.Text = "toolStripButton2" + Me.toolStripButtonGrowFont.ToolTipText = "Grow Font" + ' + 'toolStripButtonShrinkFont + ' + Me.toolStripButtonShrinkFont.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonShrinkFont.Image = CType(resources.GetObject("toolStripButtonShrinkFont.Image"), System.Drawing.Image) + Me.toolStripButtonShrinkFont.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonShrinkFont.Name = "toolStripButtonShrinkFont" + Me.toolStripButtonShrinkFont.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonShrinkFont.Text = "toolStripButton1" + Me.toolStripButtonShrinkFont.ToolTipText = "Shrink Font" + ' + 'BottomToolStripPanel + ' + Me.BottomToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.BottomToolStripPanel.Name = "BottomToolStripPanel" + Me.BottomToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.BottomToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.BottomToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'TopToolStripPanel + ' + Me.TopToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.TopToolStripPanel.Name = "TopToolStripPanel" + Me.TopToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.TopToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.TopToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'RightToolStripPanel + ' + Me.RightToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.RightToolStripPanel.Name = "RightToolStripPanel" + Me.RightToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.RightToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.RightToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'LeftToolStripPanel + ' + Me.LeftToolStripPanel.Location = New System.Drawing.Point(0, 0) + Me.LeftToolStripPanel.Name = "LeftToolStripPanel" + Me.LeftToolStripPanel.Orientation = System.Windows.Forms.Orientation.Horizontal + Me.LeftToolStripPanel.RowMargin = New System.Windows.Forms.Padding(3, 0, 0, 0) + Me.LeftToolStripPanel.Size = New System.Drawing.Size(0, 0) + ' + 'ContentPanel + ' + Me.ContentPanel.AutoScroll = True + Me.ContentPanel.Size = New System.Drawing.Size(341, 94) + ' + 'toolStripContainer1 + ' + ' + 'toolStripContainer1.ContentPanel + ' + Me.toolStripContainer1.ContentPanel.Size = New System.Drawing.Size(366, 94) + Me.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.toolStripContainer1.Location = New System.Drawing.Point(0, 0) + Me.toolStripContainer1.Name = "toolStripContainer1" + Me.toolStripContainer1.Size = New System.Drawing.Size(366, 119) + Me.toolStripContainer1.TabIndex = 2 + Me.toolStripContainer1.Text = "toolStripContainer1" + ' + 'toolStripContainer1.TopToolStripPanel + ' + Me.toolStripContainer1.TopToolStripPanel.Controls.Add(Me.toolStrip1) + ' + 'MainWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(366, 119) + Me.Controls.Add(Me.toolStripContainer1) + Me.Name = "MainWindow" + Me.Text = "Status Strip App" + Me.toolStrip1.ResumeLayout(False) + Me.toolStrip1.PerformLayout() + Me.toolStripContainer1.TopToolStripPanel.ResumeLayout(False) + Me.toolStripContainer1.TopToolStripPanel.PerformLayout() + Me.toolStripContainer1.ResumeLayout(False) + Me.toolStripContainer1.PerformLayout() + Me.ResumeLayout(False) + + End Sub + Private WithEvents toolStripSeparator1 As System.Windows.Forms.ToolStripSeparator + Private WithEvents toolStripTextBoxMessage As System.Windows.Forms.ToolStripTextBox + Private WithEvents toolStrip1 As System.Windows.Forms.ToolStrip + Private WithEvents toolStripButtonGrowFont As System.Windows.Forms.ToolStripButton + Private WithEvents toolStripButtonShrinkFont As System.Windows.Forms.ToolStripButton + Friend WithEvents BottomToolStripPanel As System.Windows.Forms.ToolStripPanel + Friend WithEvents TopToolStripPanel As System.Windows.Forms.ToolStripPanel + Friend WithEvents RightToolStripPanel As System.Windows.Forms.ToolStripPanel + Friend WithEvents LeftToolStripPanel As System.Windows.Forms.ToolStripPanel + Friend WithEvents ContentPanel As System.Windows.Forms.ToolStripContentPanel + Private WithEvents toolStripContainer1 As System.Windows.Forms.ToolStripContainer + +End Class diff --git a/Code/Chapter 27/ToolStripApp/MainWindow.resx b/Code/Chapter 27/ToolStripApp/MainWindow.resx new file mode 100644 index 0000000..36b4945 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/MainWindow.resx @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAI9JREFUWEftV9EK + wCAIdP//0S6hmK02zJrt4YJASPM8yLODiJn2LgEwvlMEl+2Jv2Imk8+DGASgK7/bPiYAAAyAATCgGHhr + MivP6oaVAaxMYLmr0gJLwBc+WYmTqClli7T/A0CQRFYuubrzQBSI7iuwajnmATAABsAAGHjSDWsnbf0G + Z8JywdbPqb/a9hd+AvirFGyhhBYXAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAF1JREFUWEftljEO + ACAIxPD/j0YhQR10PZaaMF9TgTDcza3zBUBnrXQAMIABDGDgGLDYi4K6t+9exYrgO6MgEkAdXnmZDcD+ + C0HzfXtADfGcgq7DhIsIAxjAAAYwMAHIm9K7meAzEwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Code/Chapter 27/ToolStripApp/MainWindow.vb b/Code/Chapter 27/ToolStripApp/MainWindow.vb new file mode 100644 index 0000000..2b09f93 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/MainWindow.vb @@ -0,0 +1,51 @@ +Option Explicit On +Option Strict On + +Public Class MainWindow + ' The current, max, and min font sizes. + Private currFontSize As Integer = 12 + Const MinFontSize As Integer = 12 + Const MaxFontSize As Integer = 70 + + Public Sub New() + InitializeComponent() + CenterToScreen() + Text = String.Format("Your Font size is: {0}", currFontSize) + End Sub + +#Region "Event Handlers" + Private Sub toolStripButtonShrinkFont_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles toolStripButtonShrinkFont.Click + ' Reduce font size by 5 and refresh display. + currFontSize -= 5 + If (currFontSize <= MinFontSize) Then + currFontSize = MinFontSize + End If + Text = String.Format("Your Font size is: {0}", currFontSize) + toolStripContainer1.Invalidate(True) + End Sub + + Private Sub toolStripButtonGrowFont_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles toolStripButtonGrowFont.Click + ' Increase font size by 5 and refresh display. + currFontSize += 5 + If (currFontSize >= MaxFontSize) Then + currFontSize = MaxFontSize + End If + Text = String.Format("Your Font size is: {0}", currFontSize) + toolStripContainer1.Invalidate(True) + End Sub + + Private Sub ContentPanel_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles toolStripContainer1.ContentPanel.Paint, ContentPanel.Paint + + ' Paint the user-defined message. + Dim g As Graphics = e.Graphics + g.DrawString(toolStripTextBoxMessage.Text, _ + New Font("Times New Roman", currFontSize), _ + Brushes.Black, 10, 60) + End Sub +#End Region + +End Class + diff --git a/Code/Chapter 27/ToolStripApp/My Project/Application.Designer.vb b/Code/Chapter 27/ToolStripApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..4f6ad68 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.ToolStripApp.MainWindow + End Sub + End Class +End Namespace diff --git a/Code/Chapter 27/ToolStripApp/My Project/Application.myapp b/Code/Chapter 27/ToolStripApp/My Project/Application.myapp new file mode 100644 index 0000000..dbf9822 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainWindow + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 27/ToolStripApp/My Project/AssemblyInfo.vb b/Code/Chapter 27/ToolStripApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..192efaa --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 27/ToolStripApp/My Project/Resources.Designer.vb b/Code/Chapter 27/ToolStripApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..efcdacc --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ToolStripApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/ToolStripApp/My Project/Resources.resx b/Code/Chapter 27/ToolStripApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 27/ToolStripApp/My Project/Settings.Designer.vb b/Code/Chapter 27/ToolStripApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d349be3 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ToolStripApp.My.MySettings + Get + Return Global.ToolStripApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 27/ToolStripApp/My Project/Settings.settings b/Code/Chapter 27/ToolStripApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 27/ToolStripApp/ToolStripApp.sln b/Code/Chapter 27/ToolStripApp/ToolStripApp.sln new file mode 100644 index 0000000..86ca67b --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/ToolStripApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ToolStripApp", "ToolStripApp.vbproj", "{FE299631-0F5D-4167-9A1F-5D67CCF5195F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FE299631-0F5D-4167-9A1F-5D67CCF5195F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE299631-0F5D-4167-9A1F-5D67CCF5195F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE299631-0F5D-4167-9A1F-5D67CCF5195F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE299631-0F5D-4167-9A1F-5D67CCF5195F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 27/ToolStripApp/ToolStripApp.suo b/Code/Chapter 27/ToolStripApp/ToolStripApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..3fbb32d10ae68fde4f9013c8369ba43f17d0d74f GIT binary patch literal 26112 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj b/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj new file mode 100644 index 0000000..a9700e7 --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {FE299631-0F5D-4167-9A1F-5D67CCF5195F} + WinExe + ToolStripApp.My.MyApplication + ToolStripApp + ToolStripApp + WindowsForms + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + ToolStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ToolStripApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + MainWindow.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainWindow.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj.user b/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 27/ToolStripApp/ToolStripApp.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/BasicImages.sln b/Code/Chapter 28/BasicImages/BasicImages.sln new file mode 100644 index 0000000..c539c8a --- /dev/null +++ b/Code/Chapter 28/BasicImages/BasicImages.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BasicImages", "BasicImages.vbproj", "{D557B368-F927-465C-8E86-7A4F5607DB23}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D557B368-F927-465C-8E86-7A4F5607DB23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D557B368-F927-465C-8E86-7A4F5607DB23}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D557B368-F927-465C-8E86-7A4F5607DB23}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D557B368-F927-465C-8E86-7A4F5607DB23}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/BasicImages/BasicImages.suo b/Code/Chapter 28/BasicImages/BasicImages.suo new file mode 100644 index 0000000000000000000000000000000000000000..9c4ffc226006e69b4b222a67a7bba50d2bfcca2b GIT binary patch literal 20992 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D557B368-F927-465C-8E86-7A4F5607DB23} + WinExe + BasicImages.My.MyApplication + BasicImages + BasicImages + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BasicImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BasicImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + Always + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/BasicImages.vbproj.user b/Code/Chapter 28/BasicImages/BasicImages.vbproj.user new file mode 100644 index 0000000..fdcb14e --- /dev/null +++ b/Code/Chapter 28/BasicImages/BasicImages.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/MainForm.Designer.vb b/Code/Chapter 28/BasicImages/MainForm.Designer.vb new file mode 100644 index 0000000..6d3f13c --- /dev/null +++ b/Code/Chapter 28/BasicImages/MainForm.Designer.vb @@ -0,0 +1,35 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(300, 420) + Me.Name = "MainForm" + Me.Text = "Fun with images" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/BasicImages/MainForm.resx b/Code/Chapter 28/BasicImages/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/BasicImages/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/MainForm.vb b/Code/Chapter 28/BasicImages/MainForm.vb new file mode 100644 index 0000000..f3f4832 --- /dev/null +++ b/Code/Chapter 28/BasicImages/MainForm.vb @@ -0,0 +1,28 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + ' To hold the *.bmp data. + Private myImages As Bitmap() = New Bitmap(2) {} + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + myImages(0) = New Bitmap("imageA.bmp") + myImages(1) = New Bitmap("imageB.bmp") + myImages(2) = New Bitmap("imageC.bmp") + CenterToScreen() + End Sub + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + ' Render all three images. + Dim yOffset As Integer = 10 + For Each b As Bitmap In myImages + g.DrawImage(b, 10, yOffset, 90, 90) + yOffset += 100 + Next + End Sub +End Class diff --git a/Code/Chapter 28/BasicImages/My Project/Application.Designer.vb b/Code/Chapter 28/BasicImages/My Project/Application.Designer.vb new file mode 100644 index 0000000..0299178 --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.BasicImages.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/BasicImages/My Project/Application.myapp b/Code/Chapter 28/BasicImages/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/My Project/AssemblyInfo.vb b/Code/Chapter 28/BasicImages/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..67f679c --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/BasicImages/My Project/Resources.Designer.vb b/Code/Chapter 28/BasicImages/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c39bfe2 --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BasicImages.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BasicImages/My Project/Resources.resx b/Code/Chapter 28/BasicImages/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicImages/My Project/Settings.Designer.vb b/Code/Chapter 28/BasicImages/My Project/Settings.Designer.vb new file mode 100644 index 0000000..005536f --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BasicImages.My.MySettings + Get + Return Global.BasicImages.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BasicImages/My Project/Settings.settings b/Code/Chapter 28/BasicImages/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/BasicImages/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/BasicImages/imageA.bmp b/Code/Chapter 28/BasicImages/imageA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ddda3a4e9931b87eefba0586d3bf0f4b063f44c4 GIT binary patch literal 49206 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

D1`>cMeAig=aP`3Tt#rU_ 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5CD7C79A-4486-494F-9CB5-75F02412D48E} + WinExe + BasicPaintForm.My.MyApplication + BasicPaintForm + BasicPaintForm + 512 + WindowsForms + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + BasicPaintForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BasicPaintForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + MainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicPaintForm/BasicPaintForm.vbproj.user b/Code/Chapter 28/BasicPaintForm/BasicPaintForm.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/BasicPaintForm.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicPaintForm/MainForm.Designer.vb b/Code/Chapter 28/BasicPaintForm/MainForm.Designer.vb new file mode 100644 index 0000000..165de13 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/MainForm.Designer.vb @@ -0,0 +1,39 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(457, 194) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Basic Paint Form" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/BasicPaintForm/MainForm.resx b/Code/Chapter 28/BasicPaintForm/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicPaintForm/MainForm.vb b/Code/Chapter 28/BasicPaintForm/MainForm.vb new file mode 100644 index 0000000..658f538 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/MainForm.vb @@ -0,0 +1,24 @@ +Public Class MainForm + ' Used to hold all the Points. + Private myPts As New List(Of Point) + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + g.DrawString("Hello GDI+", New Font("Times New Roman", 20), _ + Brushes.Green, 0, 0) + + ' Now render all the Points. + For Each p As Point In myPts + g.FillEllipse(Brushes.DarkOrange, p.X, p.Y, 10, 10) + Next + End Sub + + Private Sub MainForm_MouseDown(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown + ' Add new point to list. + myPts.Add(New Point(e.X, e.Y)) + Invalidate() + End Sub + +End Class diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Application.Designer.vb b/Code/Chapter 28/BasicPaintForm/My Project/Application.Designer.vb new file mode 100644 index 0000000..7944823 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.BasicPaintForm.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Application.myapp b/Code/Chapter 28/BasicPaintForm/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/BasicPaintForm/My Project/AssemblyInfo.vb b/Code/Chapter 28/BasicPaintForm/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4f2cbe2 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Resources.Designer.vb b/Code/Chapter 28/BasicPaintForm/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e65975b --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '

+ ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BasicPaintForm.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Resources.resx b/Code/Chapter 28/BasicPaintForm/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Settings.Designer.vb b/Code/Chapter 28/BasicPaintForm/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8bf13f0 --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BasicPaintForm.My.MySettings + Get + Return Global.BasicPaintForm.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BasicPaintForm/My Project/Settings.settings b/Code/Chapter 28/BasicPaintForm/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/BasicPaintForm/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/BrushStyles/BrushStyles.sln b/Code/Chapter 28/BrushStyles/BrushStyles.sln new file mode 100644 index 0000000..6654038 --- /dev/null +++ b/Code/Chapter 28/BrushStyles/BrushStyles.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BrushStyles", "BrushStyles.vbproj", "{D64782DE-E71C-4555-862C-0946869D9348}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D64782DE-E71C-4555-862C-0946869D9348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D64782DE-E71C-4555-862C-0946869D9348}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D64782DE-E71C-4555-862C-0946869D9348}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D64782DE-E71C-4555-862C-0946869D9348}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/BrushStyles/BrushStyles.suo b/Code/Chapter 28/BrushStyles/BrushStyles.suo new file mode 100644 index 0000000000000000000000000000000000000000..b71fc00ef25d460335c73c98156ecebc37fd858b GIT binary patch literal 20480 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D64782DE-E71C-4555-862C-0946869D9348} + WinExe + BrushStyles.My.MyApplication + BrushStyles + BrushStyles + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BrushStyles.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BrushStyles.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/BrushStyles/BrushStyles.vbproj.user b/Code/Chapter 28/BrushStyles/BrushStyles.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 28/BrushStyles/BrushStyles.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/BrushStyles/MainForm.Designer.vb b/Code/Chapter 28/BrushStyles/MainForm.Designer.vb new file mode 100644 index 0000000..708359f --- /dev/null +++ b/Code/Chapter 28/BrushStyles/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Fun with Brush Styles" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/BrushStyles/MainForm.resx b/Code/Chapter 28/BrushStyles/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/BrushStyles/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BrushStyles/MainForm.vb b/Code/Chapter 28/BrushStyles/MainForm.vb new file mode 100644 index 0000000..f970944 --- /dev/null +++ b/Code/Chapter 28/BrushStyles/MainForm.vb @@ -0,0 +1,27 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Drawing2D + +Public Class MainForm + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim yOffSet As Integer = 10 + + ' Get all members of the HatchStyle enum. + Dim obj As Array = [Enum].GetValues(GetType(HatchStyle)) + + For x As Integer = 0 To 4 + ' Draw an oval with first 5 HatchStyle values. + ' Configure Brush. + Dim temp As HatchStyle = CType(obj.GetValue(x), HatchStyle) + Dim theBrush As HatchBrush = New HatchBrush(temp, Color.White, Color.Black) + ' Print name of HatchStyle enum. + g.DrawString(temp.ToString(), New Font("Times New Roman", 10), Brushes.Black, 0, yOffSet) + ' Fill a rectangle with the correct brush. + g.FillEllipse(theBrush, 150, yOffSet, 200, 25) + yOffSet += 40 + Next + End Sub +End Class diff --git a/Code/Chapter 28/BrushStyles/My Project/Application.Designer.vb b/Code/Chapter 28/BrushStyles/My Project/Application.Designer.vb new file mode 100644 index 0000000..b0d9a37 --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.BrushStyles.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/BrushStyles/My Project/Application.myapp b/Code/Chapter 28/BrushStyles/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/BrushStyles/My Project/AssemblyInfo.vb b/Code/Chapter 28/BrushStyles/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..496187a --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/BrushStyles/My Project/Resources.Designer.vb b/Code/Chapter 28/BrushStyles/My Project/Resources.Designer.vb new file mode 100644 index 0000000..12cc16e --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BrushStyles.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BrushStyles/My Project/Resources.resx b/Code/Chapter 28/BrushStyles/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/BrushStyles/My Project/Settings.Designer.vb b/Code/Chapter 28/BrushStyles/My Project/Settings.Designer.vb new file mode 100644 index 0000000..7ceff1e --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BrushStyles.My.MySettings + Get + Return Global.BrushStyles.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/BrushStyles/My Project/Settings.settings b/Code/Chapter 28/BrushStyles/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/BrushStyles/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/ColorDlg/ColorDlg.sln b/Code/Chapter 28/ColorDlg/ColorDlg.sln new file mode 100644 index 0000000..018fdb3 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/ColorDlg.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ColorDlg", "ColorDlg.vbproj", "{DD0F28B0-A037-4ABE-ABE8-780CBE18D416}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DD0F28B0-A037-4ABE-ABE8-780CBE18D416}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DD0F28B0-A037-4ABE-ABE8-780CBE18D416}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DD0F28B0-A037-4ABE-ABE8-780CBE18D416}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DD0F28B0-A037-4ABE-ABE8-780CBE18D416}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/ColorDlg/ColorDlg.suo b/Code/Chapter 28/ColorDlg/ColorDlg.suo new file mode 100644 index 0000000000000000000000000000000000000000..c185837a2a400a3672d8bf79cc35394ef9c00212 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/ColorDlg/ColorDlg.vbproj b/Code/Chapter 28/ColorDlg/ColorDlg.vbproj new file mode 100644 index 0000000..bf4d202 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/ColorDlg.vbproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DD0F28B0-A037-4ABE-ABE8-780CBE18D416} + WinExe + ColorDlg.My.MyApplication + ColorDlg + ColorDlg + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ColorDlg.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ColorDlg.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/ColorDlg/ColorDlg.vbproj.user b/Code/Chapter 28/ColorDlg/ColorDlg.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/ColorDlg.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/ColorDlg/Form1.Designer.vb b/Code/Chapter 28/ColorDlg/Form1.Designer.vb new file mode 100644 index 0000000..ff1d29f --- /dev/null +++ b/Code/Chapter 28/ColorDlg/Form1.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Fun with Colors" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/ColorDlg/MainForm.resx b/Code/Chapter 28/ColorDlg/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/ColorDlg/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/ColorDlg/MainForm.vb b/Code/Chapter 28/ColorDlg/MainForm.vb new file mode 100644 index 0000000..f9448a3 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/MainForm.vb @@ -0,0 +1,29 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Private colorDlg As ColorDialog + Private currColor As Color = Color.DimGray + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + colorDlg = New ColorDialog() + Text = "Click on me to change the color" + End Sub + + Private Sub MainForm_MouseDown(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) _ + Handles MyBase.MouseDown + If colorDlg.ShowDialog() <> Windows.Forms.DialogResult.Cancel Then + currColor = colorDlg.Color + Me.BackColor = currColor + ' Show current color. + Dim strARGB As String = colorDlg.Color.ToString() + MessageBox.Show(strARGB, "Color is:") + End If + End Sub +End Class diff --git a/Code/Chapter 28/ColorDlg/My Project/Application.Designer.vb b/Code/Chapter 28/ColorDlg/My Project/Application.Designer.vb new file mode 100644 index 0000000..0a74fa7 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.ColorDlg.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/ColorDlg/My Project/Application.myapp b/Code/Chapter 28/ColorDlg/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/ColorDlg/My Project/AssemblyInfo.vb b/Code/Chapter 28/ColorDlg/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..97248a9 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/ColorDlg/My Project/Resources.Designer.vb b/Code/Chapter 28/ColorDlg/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2aae7d7 --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ColorDlg.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/ColorDlg/My Project/Resources.resx b/Code/Chapter 28/ColorDlg/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/ColorDlg/My Project/Settings.Designer.vb b/Code/Chapter 28/ColorDlg/My Project/Settings.Designer.vb new file mode 100644 index 0000000..79fcd1f --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ColorDlg.My.MySettings + Get + Return Global.ColorDlg.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/ColorDlg/My Project/Settings.settings b/Code/Chapter 28/ColorDlg/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/ColorDlg/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/CoorSystem/CoorSystem.sln b/Code/Chapter 28/CoorSystem/CoorSystem.sln new file mode 100644 index 0000000..0822116 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/CoorSystem.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CoorSystem", "CoorSystem.vbproj", "{617E6737-7BBC-423C-9CFB-10C50493CA6F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {617E6737-7BBC-423C-9CFB-10C50493CA6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {617E6737-7BBC-423C-9CFB-10C50493CA6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {617E6737-7BBC-423C-9CFB-10C50493CA6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {617E6737-7BBC-423C-9CFB-10C50493CA6F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/CoorSystem/CoorSystem.suo b/Code/Chapter 28/CoorSystem/CoorSystem.suo new file mode 100644 index 0000000000000000000000000000000000000000..176c5de54d19baa45899ff6c71c70ac31a9a46d5 GIT binary patch literal 17920 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {617E6737-7BBC-423C-9CFB-10C50493CA6F} + WinExe + CoorSystem.My.MyApplication + CoorSystem + CoorSystem + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CoorSystem.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CoorSystem.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/CoorSystem/CoorSystem.vbproj.user b/Code/Chapter 28/CoorSystem/CoorSystem.vbproj.user new file mode 100644 index 0000000..55af084 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/CoorSystem.vbproj.user @@ -0,0 +1,16 @@ + + + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/CoorSystem/MainForm.Designer.vb b/Code/Chapter 28/CoorSystem/MainForm.Designer.vb new file mode 100644 index 0000000..9a40ac7 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/MainForm.Designer.vb @@ -0,0 +1,143 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.originToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripMenuItem0by0 = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripMenuItem5by5 = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripMenuItem100by100 = New System.Windows.Forms.ToolStripMenuItem + Me.pointToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.documentToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.pixelToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.unitOfMeasurementToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.inchToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.milliToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.displayToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.menuStrip1 = New System.Windows.Forms.MenuStrip + Me.menuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'originToolStripMenuItem + ' + Me.originToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripMenuItem0by0, Me.toolStripMenuItem5by5, Me.toolStripMenuItem100by100}) + Me.originToolStripMenuItem.Name = "originToolStripMenuItem" + Me.originToolStripMenuItem.Size = New System.Drawing.Size(52, 20) + Me.originToolStripMenuItem.Text = "Origin" + ' + 'toolStripMenuItem0by0 + ' + Me.toolStripMenuItem0by0.Name = "toolStripMenuItem0by0" + Me.toolStripMenuItem0by0.Size = New System.Drawing.Size(124, 22) + Me.toolStripMenuItem0by0.Text = "(0, 0)" + ' + 'toolStripMenuItem5by5 + ' + Me.toolStripMenuItem5by5.Name = "toolStripMenuItem5by5" + Me.toolStripMenuItem5by5.Size = New System.Drawing.Size(124, 22) + Me.toolStripMenuItem5by5.Text = "(5, 5)" + ' + 'toolStripMenuItem100by100 + ' + Me.toolStripMenuItem100by100.Name = "toolStripMenuItem100by100" + Me.toolStripMenuItem100by100.Size = New System.Drawing.Size(124, 22) + Me.toolStripMenuItem100by100.Text = "(100, 100)" + ' + 'pointToolStripMenuItem + ' + Me.pointToolStripMenuItem.Name = "pointToolStripMenuItem" + Me.pointToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.pointToolStripMenuItem.Text = "Point" + ' + 'documentToolStripMenuItem + ' + Me.documentToolStripMenuItem.Name = "documentToolStripMenuItem" + Me.documentToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.documentToolStripMenuItem.Text = "Document" + ' + 'pixelToolStripMenuItem + ' + Me.pixelToolStripMenuItem.Name = "pixelToolStripMenuItem" + Me.pixelToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.pixelToolStripMenuItem.Text = "Pixel" + ' + 'unitOfMeasurementToolStripMenuItem + ' + Me.unitOfMeasurementToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.pixelToolStripMenuItem, Me.inchToolStripMenuItem, Me.milliToolStripMenuItem, Me.displayToolStripMenuItem, Me.documentToolStripMenuItem, Me.pointToolStripMenuItem}) + Me.unitOfMeasurementToolStripMenuItem.Name = "unitOfMeasurementToolStripMenuItem" + Me.unitOfMeasurementToolStripMenuItem.Size = New System.Drawing.Size(133, 20) + Me.unitOfMeasurementToolStripMenuItem.Text = "Unit Of Measurement" + ' + 'inchToolStripMenuItem + ' + Me.inchToolStripMenuItem.Name = "inchToolStripMenuItem" + Me.inchToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.inchToolStripMenuItem.Text = "Inch" + ' + 'milliToolStripMenuItem + ' + Me.milliToolStripMenuItem.Name = "milliToolStripMenuItem" + Me.milliToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.milliToolStripMenuItem.Text = "Millimeter" + ' + 'displayToolStripMenuItem + ' + Me.displayToolStripMenuItem.Name = "displayToolStripMenuItem" + Me.displayToolStripMenuItem.Size = New System.Drawing.Size(130, 22) + Me.displayToolStripMenuItem.Text = "Display" + ' + 'menuStrip1 + ' + Me.menuStrip1.Dock = System.Windows.Forms.DockStyle.Bottom + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.unitOfMeasurementToolStripMenuItem, Me.originToolStripMenuItem}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 145) + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(402, 24) + Me.menuStrip1.TabIndex = 1 + Me.menuStrip1.Text = "menuStrip1" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(402, 169) + Me.Controls.Add(Me.menuStrip1) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "GDI+ Coordinates" + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents originToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents toolStripMenuItem0by0 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents toolStripMenuItem5by5 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents toolStripMenuItem100by100 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents pointToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents documentToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents pixelToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents unitOfMeasurementToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents inchToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents milliToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents displayToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents menuStrip1 As System.Windows.Forms.MenuStrip + +End Class diff --git a/Code/Chapter 28/CoorSystem/MainForm.resx b/Code/Chapter 28/CoorSystem/MainForm.resx new file mode 100644 index 0000000..541af56 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 28/CoorSystem/MainForm.vb b/Code/Chapter 28/CoorSystem/MainForm.vb new file mode 100644 index 0000000..d1e9dcc --- /dev/null +++ b/Code/Chapter 28/CoorSystem/MainForm.vb @@ -0,0 +1,70 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + ' The unit of measurement. + Private gUnit As GraphicsUnit = GraphicsUnit.Pixel + + ' Point of origin. + Private renderingOrgPt As New Point(0, 0) + +#Region "Menu Handlers" + Private Sub pointToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pointToolStripMenuItem.Click + gUnit = GraphicsUnit.Point + Invalidate() + End Sub + + Private Sub documentToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles documentToolStripMenuItem.Click + gUnit = GraphicsUnit.Document + Invalidate() + End Sub + + Private Sub displayToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles displayToolStripMenuItem.Click + gUnit = GraphicsUnit.Display + Invalidate() + End Sub + + Private Sub milliToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles milliToolStripMenuItem.Click + gUnit = GraphicsUnit.Millimeter + Invalidate() + End Sub + + Private Sub inchToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles inchToolStripMenuItem.Click + gUnit = GraphicsUnit.Inch + Invalidate() + End Sub + + Private Sub pixelToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pixelToolStripMenuItem.Click + gUnit = GraphicsUnit.Pixel + Invalidate() + End Sub + + Private Sub toolStripMenuItem100by100_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles toolStripMenuItem100by100.Click + renderingOrgPt.X = 100 + renderingOrgPt.Y = 100 + Invalidate() + End Sub + + Private Sub toolStripMenuItem5by5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles toolStripMenuItem5by5.Click + renderingOrgPt.X = 5 + renderingOrgPt.Y = 5 + Invalidate() + End Sub + + Private Sub toolStripMenuItem0by0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles toolStripMenuItem0by0.Click + renderingOrgPt.X = 0 + renderingOrgPt.Y = 0 + Invalidate() + End Sub +#End Region + + Private Sub MainForm_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + ' Configure graphics unit. + g.PageUnit = gUnit + ' Configure origin. + g.TranslateTransform(renderingOrgPt.X, renderingOrgPt.Y) + g.DrawRectangle(New Pen(Color.Red, 5), 0, 0, 100, 100) + Me.Text = String.Format("PageUnit: {0}, Origin: {1}", gUnit, renderingOrgPt.ToString()) + End Sub +End Class diff --git a/Code/Chapter 28/CoorSystem/My Project/Application.Designer.vb b/Code/Chapter 28/CoorSystem/My Project/Application.Designer.vb new file mode 100644 index 0000000..59f4d39 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.CoorSystem.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/CoorSystem/My Project/Application.myapp b/Code/Chapter 28/CoorSystem/My Project/Application.myapp new file mode 100644 index 0000000..01c7691 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/CoorSystem/My Project/AssemblyInfo.vb b/Code/Chapter 28/CoorSystem/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6cc2737 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/CoorSystem/My Project/Resources.Designer.vb b/Code/Chapter 28/CoorSystem/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7a5f0eb --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CoorSystem.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/CoorSystem/My Project/Resources.resx b/Code/Chapter 28/CoorSystem/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/CoorSystem/My Project/Settings.Designer.vb b/Code/Chapter 28/CoorSystem/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d5a5135 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CoorSystem.My.MySettings + Get + Return Global.CoorSystem.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/CoorSystem/My Project/Settings.settings b/Code/Chapter 28/CoorSystem/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/CoorSystem/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/CoorSystem/UpgradeLog.XML b/Code/Chapter 28/CoorSystem/UpgradeLog.XML new file mode 100644 index 0000000..8674202 --- /dev/null +++ b/Code/Chapter 28/CoorSystem/UpgradeLog.XML @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/CustomPenApp.sln b/Code/Chapter 28/CustomPenApp/CustomPenApp.sln new file mode 100644 index 0000000..d071339 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/CustomPenApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomPenApp", "CustomPenApp.vbproj", "{254CF2AA-43C3-4988-9FBD-2057902D1593}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {254CF2AA-43C3-4988-9FBD-2057902D1593}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {254CF2AA-43C3-4988-9FBD-2057902D1593}.Debug|Any CPU.Build.0 = Debug|Any CPU + {254CF2AA-43C3-4988-9FBD-2057902D1593}.Release|Any CPU.ActiveCfg = Release|Any CPU + {254CF2AA-43C3-4988-9FBD-2057902D1593}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/CustomPenApp/CustomPenApp.suo b/Code/Chapter 28/CustomPenApp/CustomPenApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..523937eeff76453e1b4942ccb937d1bb1fcfb2f6 GIT binary patch literal 17408 zcmeHOUyK_^86PK2no=N?q=A+YHrFJi?VY(eNs~*Ow&%4kx%Mu(p6@P!nxu}sck$iY zd#rs)PLv1UP$eX!BGCsBEh-WU5+V{p6#@i-htikuhJ<)166zBYs1H2R9KYYpj=f&5 z?Y)b0aZtzlcGtVJ^L^jUe1GQqX8(Niq4(ar{^;LDpgbcsid!oWh|RwHF5)f+<$sn`VInBNcB0(b!MF~Ea>j{`md_#}X1{t(We z25bjx13V1a0r(8y5x{2wj{VTiOSCuF~SFdJyrrLu`lnsPvQ{s?F;yj4skQl%*f$KqB9l$Szs|z(Mr$FtJsGy&8IR^ZcAId~j{C<78 zI{X=6&H*fqUJyU=>QZ~q=Hfm)`!9tRg|ukk{iyO!o~OO{sRJngx*e?pI3^rs>Hxp| zv!2!g`klv6XAfX6U?1R%fc=2S0Z#y)1e^s70QkoSA; zUjdx+J%0(;S-@Ald#w91u5*BkfIPt8hHmRlpAVOp-@I z7D9+WnBN-x;ctwy-x+xLHE9r5)ymo{)Bm7-%A3csDJQ>FvdYzpkt-LBj8&}`%X5`% zuIf6LU9rmX(bH4u$*Ht?Dx0z@3sq+^YhKDNRxQ^^B(kPcu(FvemTlv$5vN=oUR=zM z=ZfVK$1TNOt8$f8ZhpGFWZRrUD9#;1x@=6i&b*bcW+$zRv*hNjN;m;CAYgpiNIK3! zB|DRpd{-}7M*MVo%9zO6)mhMP9CQmtx}X@WF?=*@E>)^d(#%X;`(SLZfBfEqZaA6D zn4GI7q$i76zYGhJl(u34`Y$VH@Xx^PEsFxqRdESA$q;eKMp{haY68z}+^0@=MG1Ef z;>@~f9J6TG!P$~mmr!?6YBd+n6OdazS9;dLyA!BahNLdy*ZN6ZT!thqdiEqazGV|_ z4Q1&4LxZs(^7Dd=L`Yc6A zd|BF36V~%Itn4VP>yg!AzXVB8Ptgoa-$xI(O@~v#W>zKS7exN6!w8}KF zQ9`K`$tAs63p0~<%ebd{Atj&X@Spy64s(~(&f)*K>>s{W0nDNW>eeFuEuo$*=H9qm3iSIYGJ|aOPqxc^#KBQ2|eL z;EeN2SvPWazDGIB$??#V*N%f?k8(gCCpb14^nMjTC9myAhU=kToO8jEp`XN=ROnH9 z!^UA4QbC_T|imt69d-4-+M)`W|-}1uY)t_d1_dWLmaeFOIx@q0J|+M46P<<|P&!iUN(aY}8J<1;A^uapxO>mAvM*^cKF}bz1`~?w|S(sPS&dz_VL}-HqA6@edMRH zcl0!)+5WkpJlUXD_tSnibZBtK`so=42kWO(8}*OYqn-4WpWa@x0jtqrem?G|&%^v| zD6Z1Qa7%^ATuC9JY znwVQ=X+dw^MzJ5Dt-oF?(>>bqr_-=9`O!ZVGB_zM#Hsj^D4GDvHyuzmlo9;ZZrS-sz*R+ z!YX%8bX>gcJVOmn3$w}Er=(wd0*_>>55SotdxWL!}Tdq6U$lgewnK$MfxdPS-Ea#G7J!2;_M;I1w5$6Z{9a9krQ z#Epl5G6CcVKh&M@Tu1GHzy4|5JrswfXFOM}0Ft1MilHuj&*EPTuh(vF`|;VWW5WH@^TUt7KL5f`{_@5* zCvUxdP4#_79G%^M|BG$%)|P_y~UuGal5 zuX@vo`d91TsQCT*?-Y8uAaR$$vkhuEPpJ3U3z6{GbpKlLpOLnYI{~EnK{u-zxhU;RZ-$sTDZ<^CvonAFA4 zdw=XH$}{j9=+&uNq;wuNpw=9%#(-1c?VjSK)xOfOap0=&cRfYDwmf0lyVV$Qh4tH> z;-b@RYPO@)|Gi~L!)3YE7;q`DBi0=sMt>{O>9M zi$@man>FJ`9 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {254CF2AA-43C3-4988-9FBD-2057902D1593} + WinExe + CustomPenApp.My.MyApplication + CustomPenApp + CustomPenApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CustomPenApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomPenApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/CustomPenApp.vbproj.user b/Code/Chapter 28/CustomPenApp/CustomPenApp.vbproj.user new file mode 100644 index 0000000..fdcb14e --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/CustomPenApp.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/MainForm.Designer.vb b/Code/Chapter 28/CustomPenApp/MainForm.Designer.vb new file mode 100644 index 0000000..71a46b6 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Custom Pens!" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/CustomPenApp/MainForm.resx b/Code/Chapter 28/CustomPenApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/MainForm.vb b/Code/Chapter 28/CustomPenApp/MainForm.vb new file mode 100644 index 0000000..f7e2764 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/MainForm.vb @@ -0,0 +1,45 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Drawing2D + +Public Class MainForm + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + ' Make a big blue pen. + Dim bluePen As Pen = New Pen(Color.Blue, 20) + + ' Get a stock pen from the Pens type. + Dim pen2 As Pen = Pens.Firebrick + + ' Render some shapes with the pens. + g.DrawEllipse(bluePen, 10, 10, 100, 100) + g.DrawLine(pen2, 10, 130, 110, 130) + g.DrawPie(Pens.Black, 150, 10, 120, 150, 90, 80) + + ' Draw a purple dashed polygon as well... + Dim pen3 As Pen = New Pen(Color.Purple, 5) + pen3.DashStyle = DashStyle.DashDotDot + g.DrawPolygon(pen3, New Point() {New Point(30, 140), _ + New Point(265, 200), New Point(100, 225), _ + New Point(190, 190), New Point(50, 330), _ + New Point(20, 180)}) + + ' And a rectangle containing some text... + Dim r As Rectangle = New Rectangle(150, 10, 130, 60) + g.DrawRectangle(Pens.Blue, r) + g.DrawString("Hello out there...How are ya?", _ + New Font("Arial", 12), Brushes.Black, r) + + ' Draw custom dash pattern all around the boarder of the form. + Dim customDashPen As Pen = New Pen(Color.BlueViolet, 10) + Dim myDashes As Single() = {5.0F, 2.0F, 1.0F, 3.0F} + customDashPen.DashPattern = myDashes + g.DrawRectangle(customDashPen, ClientRectangle) + End Sub + + Private Sub MainForm_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize + Invalidate() + End Sub +End Class diff --git a/Code/Chapter 28/CustomPenApp/My Project/Application.Designer.vb b/Code/Chapter 28/CustomPenApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..5535334 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.CustomPenApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/CustomPenApp/My Project/Application.myapp b/Code/Chapter 28/CustomPenApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/CustomPenApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a92d8f1 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/CustomPenApp/My Project/Resources.Designer.vb b/Code/Chapter 28/CustomPenApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..3c75998 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomPenApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/CustomPenApp/My Project/Resources.resx b/Code/Chapter 28/CustomPenApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/CustomPenApp/My Project/Settings.Designer.vb b/Code/Chapter 28/CustomPenApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a5a8dd2 --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomPenApp.My.MySettings + Get + Return Global.CustomPenApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/CustomPenApp/My Project/Settings.settings b/Code/Chapter 28/CustomPenApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/CustomPenApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/DraggingImages/DraggingImages.sln b/Code/Chapter 28/DraggingImages/DraggingImages.sln new file mode 100644 index 0000000..789f4e8 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/DraggingImages.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DraggingImages", "DraggingImages.vbproj", "{E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/DraggingImages/DraggingImages.suo b/Code/Chapter 28/DraggingImages/DraggingImages.suo new file mode 100644 index 0000000000000000000000000000000000000000..1c9e9f37bc9c5a4de0a8efda3c38821c09b81ed2 GIT binary patch literal 22016 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 Q^O@qmhA}yJV#!9}zm71{g#Z8m literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/DraggingImages/DraggingImages.vbproj b/Code/Chapter 28/DraggingImages/DraggingImages.vbproj new file mode 100644 index 0000000..a019a69 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/DraggingImages.vbproj @@ -0,0 +1,153 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E3B3A050-6A59-48D2-A646-C5DE5FE8FF9C} + WinExe + DraggingImages.My.MyApplication + DraggingImages + DraggingImages + WindowsForms + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + v3.5 + + + true + full + true + true + bin\Debug\ + DraggingImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DraggingImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/DraggingImages/DraggingImages.vbproj.user b/Code/Chapter 28/DraggingImages/DraggingImages.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 28/DraggingImages/DraggingImages.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/DraggingImages/HappyDude.bmp b/Code/Chapter 28/DraggingImages/HappyDude.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3f7a6994911ca81f3cfc635b17990963f43c2345 GIT binary patch literal 630 zcmZuuu@QqX3{-MyxZGuil$j%a)}i(YwBEwK8;a~j{$H|v1O$@xua^+;{>)dC&4@4f zGyGyVWH8jf4|gY8OlG((B|i|6!jrA*io&Mbwv8Da7b%8QtFTeH6V_T9GcsurbS|{c;B`OKWQwdgJ1X`$F`*X4-5h2utqrYM|5>pwCeu+0XS^> A;Q#;t literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/DraggingImages/MainForm.Designer.vb b/Code/Chapter 28/DraggingImages/MainForm.Designer.vb new file mode 100644 index 0000000..4660cb1 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(356, 336) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Dragging Images" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/DraggingImages/MainForm.resx b/Code/Chapter 28/DraggingImages/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/DraggingImages/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/DraggingImages/MainForm.vb b/Code/Chapter 28/DraggingImages/MainForm.vb new file mode 100644 index 0000000..3a05acd --- /dev/null +++ b/Code/Chapter 28/DraggingImages/MainForm.vb @@ -0,0 +1,72 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + + Private happyBox As PictureBox = New PictureBox() + Private oldX As Integer, oldY As Integer + Private isDragging As Boolean + Private dropRect As Rectangle = New Rectangle(100, 100, 140, 170) + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + ' Configure the PictureBox and add to + ' the Form's Controls collection. + happyBox.SizeMode = PictureBoxSizeMode.StretchImage + happyBox.Location = New System.Drawing.Point(64, 32) + happyBox.Size = New System.Drawing.Size(50, 50) + happyBox.Cursor = Cursors.Hand + happyBox.Image = New Bitmap("happyDude.bmp") + + ' Add handlers for the following events. + AddHandler happyBox.MouseDown, AddressOf happyBox_MouseDown + AddHandler happyBox.MouseUp, AddressOf happyBox_MouseUp + AddHandler happyBox.MouseMove, AddressOf happyBox_MouseMove + Controls.Add(happyBox) + End Sub + +#Region "Event handlers" + Private Sub happyBox_MouseDown(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) + isDragging = True + ' Save the (x, y) of the mouse down click, + ' because we need it as an offset when dragging the image. + oldX = e.X + oldY = e.Y + End Sub + + Private Sub happyBox_MouseMove(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) + If isDragging Then + ' Need to figure new Y value based on where the mouse + ' down click happened. + happyBox.Top = happyBox.Top + (e.Y - oldY) + ' Same deal for X (use oldX as a base line). + happyBox.Left = happyBox.Left + (e.X - oldX) + End If + End Sub + + Private Sub happyBox_MouseUp(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) + isDragging = False + ' Is the mouse within the area of the drop rect? + If dropRect.Contains(happyBox.Bounds) Then + MessageBox.Show("You win!", "What an amazing test of skill...") + End If + End Sub + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + ' Draw the drop box. + Dim g As Graphics = e.Graphics + g.FillRectangle(Brushes.BlueViolet, dropRect) + ' Display instructions. + g.DrawString("Drag the happy guy in here...", _ + New Font("Times New Roman", 25), Brushes.WhiteSmoke, dropRect) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 28/DraggingImages/My Project/Application.Designer.vb b/Code/Chapter 28/DraggingImages/My Project/Application.Designer.vb new file mode 100644 index 0000000..7ff4693 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.DraggingImages.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/DraggingImages/My Project/Application.myapp b/Code/Chapter 28/DraggingImages/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/DraggingImages/My Project/AssemblyInfo.vb b/Code/Chapter 28/DraggingImages/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b98b084 --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/DraggingImages/My Project/Resources.Designer.vb b/Code/Chapter 28/DraggingImages/My Project/Resources.Designer.vb new file mode 100644 index 0000000..017ccca --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DraggingImages.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/DraggingImages/My Project/Resources.resx b/Code/Chapter 28/DraggingImages/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/DraggingImages/My Project/Settings.Designer.vb b/Code/Chapter 28/DraggingImages/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1c5e56b --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.DraggingImages.My.MySettings + Get + Return Global.DraggingImages.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/DraggingImages/My Project/Settings.settings b/Code/Chapter 28/DraggingImages/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/DraggingImages/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.sln b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.sln new file mode 100644 index 0000000..95e1361 --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DrawingUtilTypes", "DrawingUtilTypes.vbproj", "{58048E58-0826-4793-BD6C-2E126F14EE4A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {58048E58-0826-4793-BD6C-2E126F14EE4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58048E58-0826-4793-BD6C-2E126F14EE4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58048E58-0826-4793-BD6C-2E126F14EE4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58048E58-0826-4793-BD6C-2E126F14EE4A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.suo b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..ac2505c2a06149cc308dca4df7810e175c8b261f GIT binary patch literal 16896 zcmeHOUu+yl8J|nqkW!#D389n_wvHPb8Xx`}+i?lp?VVG%c5QsNW1&OU+9;F5a`}3dx!$>1K0cPHRM{~kNOeRgQyRneiZfNs1Krk4D}PJ520fD#lxsvdsdbs zxc?ODQPfYPK7#rg)JIW2i+T+8bEwBrKaZ;4Q*Yn9?gRzKMIL`8VTicMp)H72tW5B7 z6da@RCOHdOv?(n<(%^5Dzo-^zv$<&WHX<_#+UZ7TFXSg)98 zlOwA}G@rj*Oio3OR4!wbE?GwSx%h-Jmdci9@`VMXtB^6`nWUM|SV{9zYO!RUyRHyj zUt>$lGzD{>#83jhb{`xsjD@oBmi>> z^d>A5{fylzTbu`nH7=w-;Zny2g-_Vpf+YYsZLb37O!x&cj_a&=7FR!Sfbi+p(Iy0i zPhE}SvT(&Of&#PnBjgL<#}Y6ipZf70KcLs2uvyes8(-3bERpA69j z3Q$+XaZQ$alD$iy3-RJQ8L+y2_&tVxN?ZZ1IjrEM#5xO!TE$4NV2}}#5KUgR95wlR z`89rr`bOzdrIlvo+(?r_%r9%tX9WE;e#v8YdC-l%^Aw&H!NsJd0S!_@KZ9p^-1S4- zwo6TH;>tHmXp3mmXyFNO160aX7OOiWVQSdCck>@-N?YO7OF*!00sn=_PxK3e${*v% zqf~+@_2I7qUuxvW8n7AuZ=`=lu*wU7$~fqPO^ZDEyPhsO4f$h?OdmMt{23!ppt4Zj zl|!dZl^x z0eX%~&So&{Sv;j})4x>1)pwA8>3Pv^8!SpMr(;EAT%< zq$hPsQ1~Y>cFO)ReIdy~Xc_yn{Nc6kL+`EKS%=x`gPA{rpu1c2!jN^z^hgX(O!PXT zygKMdkAPD2A?BpzV~j-mw^;V=8FlZ6o)TgJ9}?mP(Sr}Squ+;5u-_I0ltg6^5q~${ zisKp)FT%EFpq*)PD{vXP(Z3~BmI0ZutR7RXT{-q3e5tL)Z2%ZcQ1T|(5?`aP@idD$~g9;tKvgPzmEUn?4Q%u{bs52%LM;XmlS0TV?md? ztq?xjpy>PqZE8^a2wdoSGrm;Xn*MI%Lin^{gw4`;wEFdNG{3h8PC|bY zYD)TmnX=7N`KWqce+3HduY#6iuo(n4)Z3&&Ao%6E2c5qY zzB3p2!Aqk*Uyn$QM}NYCr4Pe0kgt`qo~gkUwg3?m`6R|1ON>-V%$>bL;$f0(O=@X8!bnb^dJ-K2RK7N}tvQueQO-CeIF{r}iJa9Q%*8)ZzXgw^FqZ;+*`-84S?z zPr>NyOU4SRD|5No$3AgajTeLDx|GqxL_4m21~B?wY0xWn?x2TohxhOmUHj-BafWu^nSlCS+0kg45}K*Kjp-) zApag>Jj>WIsQmR{>>c~V)6lzFSltxl?J}<11yJ!@knFb*TK6CDfo=<-9hzL-?Y9m%!^QzJiKugi^uK9y%_+hS?FZHn%Py%=>;SlOsR}} z(DtI&CR;w$%9+pl@Mp^02%U}ys)<|)l{fFZ(SH%E)zR72-NVF5bNjR(ly4S=|Kau_ z=s%o~Cd_4^z1#4uM7I9Eq~C~YCjQB((nz8E78L1+Y1UzQIcmqh@Y97Mp3VYCnB2{+ zpMPPl(Vw;!B05X5{$A#xyv)xs^3eO#UQtN3T@PdCv}$vEoRhrfemBmE@dNYNemqS- z$8Sv7&LC)W5|=zMit{#uIOBL8x!4v5FSX!ITMV9m6uDdeMzeAnG08a0h>7R=$@B7L zkKR@1H&m8}JJ5`j`JFN3C?j}x5dPCR#&eX)4y)X73oxnV`s9try?)O20;-Z-y%WRz zd}fzv_ANlB=E&h$1i70<%!I$Ca6gXUdD=-ulsuQ@-ZSUPq{^N-;~KqVo`k{FJLU;j zK1RWzWTho6!al zwDVnlk0-mF&%(k@PffqwZYyeOOv=!j(1NgVzITK6K90FmubJlLAU42Bjh)r9wJWCQ z;ly$G*e9MscGJDqnmKXb3ESb8awk3!%wYR`C~sTB{ZuyJu7PaN==wNK> + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {58048E58-0826-4793-BD6C-2E126F14EE4A} + Exe + DrawingUtilTypes.Program + DrawingUtilTypes + DrawingUtilTypes + 512 + Console + v3.5 + On + Binary + Off + On + + + true + full + true + true + bin\Debug\ + DrawingUtilTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + DrawingUtilTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.vbproj.user b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/DrawingUtilTypes.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.Designer.vb b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.myapp b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/AssemblyInfo.vb b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..386ee6c --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.Designer.vb b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..0bba586 --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("DrawingUtilTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.resx b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.Designer.vb b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6738068 --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.DrawingUtilTypes.My.MySettings + Get + Return Global.DrawingUtilTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.settings b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/Program.vb b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/Program.vb new file mode 100644 index 0000000..1f232d6 --- /dev/null +++ b/Code/Chapter 28/DrawingUtilTypes/DrawingUtilTypes/Program.vb @@ -0,0 +1,65 @@ +Option Strict On +Option Explicit On + +Imports System.Drawing + +Module Program + Sub Main() + Console.WriteLine("***** Working with Drawing utility types *****") + Console.WriteLine() + UsePoint() + Console.WriteLine() + UseRectangle() + Console.ReadLine() + End Sub + +#Region "Use Point" + Sub UsePoint() + Console.WriteLine("***** Exercise Point *****") + + ' Create and offset a point. + Dim pt As New Point(100, 72) + Console.WriteLine(pt) + pt.Offset(20, 20) + Console.WriteLine(pt) + + ' Overloaded Point operators. + Dim pt2 As Point = pt + If pt = pt2 Then + Console.WriteLine("Points are the same") + Else + Console.WriteLine("Different points") + End If + + ' Change pt2's X value. + pt2.X = 4000 + + ' Now show each point's value + Console.WriteLine("First point: {0}", pt) + Console.WriteLine("Second point: {0}", pt2) + End Sub +#End Region + +#Region "Use Rectangle" + Sub UseRectangle() + Console.WriteLine("***** Point in Rect? *****") + Dim r1 As New Rectangle(0, 0, 100, 100) + Dim pt3 As Point = New Point(101, 101) + If r1.Contains(pt3) Then + Console.WriteLine("Point is within the rect!") + Else + Console.WriteLine("Point is not within the rect!") + End If + + ' Now place point in rectangle's area. + pt3.X = 50 + pt3.Y = 30 + If r1.Contains(pt3) Then + Console.WriteLine("Point is within the rect!") + Else + Console.WriteLine("Point is not within the rect!") + End If + End Sub +#End Region + +End Module diff --git a/Code/Chapter 28/FontDlgForm/FontDlgForm.sln b/Code/Chapter 28/FontDlgForm/FontDlgForm.sln new file mode 100644 index 0000000..7e5389d --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/FontDlgForm.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FontDlgForm", "FontDlgForm.vbproj", "{5B149348-1B56-4FFD-90CC-59BFDAD5BF3C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5B149348-1B56-4FFD-90CC-59BFDAD5BF3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5B149348-1B56-4FFD-90CC-59BFDAD5BF3C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5B149348-1B56-4FFD-90CC-59BFDAD5BF3C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5B149348-1B56-4FFD-90CC-59BFDAD5BF3C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/FontDlgForm/FontDlgForm.suo b/Code/Chapter 28/FontDlgForm/FontDlgForm.suo new file mode 100644 index 0000000000000000000000000000000000000000..1cc3ac3723575f6d8aa902023c93c4afc929aa9d GIT binary patch literal 17408 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5B149348-1B56-4FFD-90CC-59BFDAD5BF3C} + WinExe + FontDlgForm.My.MyApplication + FontDlgForm + FontDlgForm + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FontDlgForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FontDlgForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/FontDlgForm/FontDlgForm.vbproj.user b/Code/Chapter 28/FontDlgForm/FontDlgForm.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/FontDlgForm.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/FontDlgForm/MainForm.Designer.vb b/Code/Chapter 28/FontDlgForm/MainForm.Designer.vb new file mode 100644 index 0000000..033c8a9 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/MainForm.Designer.vb @@ -0,0 +1,35 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "MainForm" + Me.Text = "Fun with the Font Dialog" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/FontDlgForm/MainForm.resx b/Code/Chapter 28/FontDlgForm/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/FontDlgForm/MainForm.vb b/Code/Chapter 28/FontDlgForm/MainForm.vb new file mode 100644 index 0000000..b2d8ec2 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/MainForm.vb @@ -0,0 +1,27 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + End Sub + Private fontDlg As New FontDialog() + Private currFont As New Font("Times New Roman", 12) + + Private Sub MainForm_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown + If fontDlg.ShowDialog() <> Windows.Forms.DialogResult.Cancel Then + currFont = fontDlg.Font + Me.Text = String.Format("Selected Font: {0} ", currFont) + Invalidate() + End If + End Sub + + Private Sub MainForm_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + g.DrawString("Testing...", currFont, Brushes.Black, 0, 0) + End Sub +End Class diff --git a/Code/Chapter 28/FontDlgForm/My Project/Application.Designer.vb b/Code/Chapter 28/FontDlgForm/My Project/Application.Designer.vb new file mode 100644 index 0000000..3c05656 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.FontDlgForm.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/FontDlgForm/My Project/Application.myapp b/Code/Chapter 28/FontDlgForm/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/FontDlgForm/My Project/AssemblyInfo.vb b/Code/Chapter 28/FontDlgForm/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..e9ffbf3 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/FontDlgForm/My Project/Resources.Designer.vb b/Code/Chapter 28/FontDlgForm/My Project/Resources.Designer.vb new file mode 100644 index 0000000..39929e3 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FontDlgForm.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/FontDlgForm/My Project/Resources.resx b/Code/Chapter 28/FontDlgForm/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/FontDlgForm/My Project/Settings.Designer.vb b/Code/Chapter 28/FontDlgForm/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d6b70e4 --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FontDlgForm.My.MySettings + Get + Return Global.FontDlgForm.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/FontDlgForm/My Project/Settings.settings b/Code/Chapter 28/FontDlgForm/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/FontDlgForm/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/FontFamilyApp/FontFamilyApp.sln b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.sln new file mode 100644 index 0000000..5b4c7c9 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FontFamilyApp", "FontFamilyApp.vbproj", "{8D1CA4E8-300D-499D-BEF5-BF64783D30A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8D1CA4E8-300D-499D-BEF5-BF64783D30A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D1CA4E8-300D-499D-BEF5-BF64783D30A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D1CA4E8-300D-499D-BEF5-BF64783D30A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D1CA4E8-300D-499D-BEF5-BF64783D30A6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/FontFamilyApp/FontFamilyApp.suo b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..6cf56dc9db717a67478589ce1e5dd3b24b516d36 GIT binary patch literal 16384 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 O29G6UDgLu#gW~_{@buyU literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj new file mode 100644 index 0000000..22d5026 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {8D1CA4E8-300D-499D-BEF5-BF64783D30A6} + WinExe + FontFamilyApp.My.MyApplication + FontFamilyApp + FontFamilyApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FontFamilyApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FontFamilyApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj.user b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/FontFamilyApp.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/FontFamilyApp/MainForm.Designer.vb b/Code/Chapter 28/FontFamilyApp/MainForm.Designer.vb new file mode 100644 index 0000000..03a4bdc --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(469, 264) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Form1" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/FontFamilyApp/MainForm.resx b/Code/Chapter 28/FontFamilyApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/FontFamilyApp/MainForm.vb b/Code/Chapter 28/FontFamilyApp/MainForm.vb new file mode 100644 index 0000000..8108e8b --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/MainForm.vb @@ -0,0 +1,36 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) _ + Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim myFamily As FontFamily = New FontFamily("Verdana") + Dim myFont As Font = New Font(myFamily, 12) + Dim y As Integer = 0 + Dim fontHeight As Integer = myFont.Height + + ' Show units of measurement for FontFamily members. + Me.Text = "Measurements are in GraphicsUnit." & myFont.Unit.ToString() + g.DrawString("The Verdana family.", myFont, Brushes.Blue, 10, y) + y += 20 + ' Print our family ties... + g.DrawString("Ascent for bold Verdana: " _ + & myFamily.GetCellAscent(FontStyle.Bold), _ + myFont, Brushes.Black, 10, y + fontHeight) + y += 20 + g.DrawString("Descent for bold Verdana: " _ + & myFamily.GetCellDescent(FontStyle.Bold), _ + myFont, Brushes.Black, 10, y + fontHeight) + y += 20 + g.DrawString("Line spacing for bold Verdana: " _ + & myFamily.GetLineSpacing(FontStyle.Bold), _ + myFont, Brushes.Black, 10, y + fontHeight) + y += 20 + g.DrawString("Height for bold Verdana: " & _ + myFamily.GetEmHeight(FontStyle.Bold), _ + myFont, Brushes.Black, 10, y + fontHeight) + y += 20 + End Sub +End Class diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Application.Designer.vb b/Code/Chapter 28/FontFamilyApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..1129d45 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.FontFamilyApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Application.myapp b/Code/Chapter 28/FontFamilyApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/FontFamilyApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/FontFamilyApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..26c6475 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Resources.Designer.vb b/Code/Chapter 28/FontFamilyApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2ed85c8 --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FontFamilyApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Resources.resx b/Code/Chapter 28/FontFamilyApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Settings.Designer.vb b/Code/Chapter 28/FontFamilyApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4d4be1c --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FontFamilyApp.My.MySettings + Get + Return Global.FontFamilyApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/FontFamilyApp/My Project/Settings.settings b/Code/Chapter 28/FontFamilyApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/FontFamilyApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/GradientBrushes/GradientBrushes.sln b/Code/Chapter 28/GradientBrushes/GradientBrushes.sln new file mode 100644 index 0000000..0ad2c9f --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/GradientBrushes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "GradientBrushes", "GradientBrushes.vbproj", "{79C104C7-E763-4719-821B-77AF78B9FD6D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79C104C7-E763-4719-821B-77AF78B9FD6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79C104C7-E763-4719-821B-77AF78B9FD6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79C104C7-E763-4719-821B-77AF78B9FD6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79C104C7-E763-4719-821B-77AF78B9FD6D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/GradientBrushes/GradientBrushes.suo b/Code/Chapter 28/GradientBrushes/GradientBrushes.suo new file mode 100644 index 0000000000000000000000000000000000000000..56ab867e632742e30f65c1e6a0e560057577212a GIT binary patch literal 20480 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {79C104C7-E763-4719-821B-77AF78B9FD6D} + WinExe + GradientBrushes.My.MyApplication + GradientBrushes + GradientBrushes + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + GradientBrushes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + GradientBrushes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/GradientBrushes/GradientBrushes.vbproj.user b/Code/Chapter 28/GradientBrushes/GradientBrushes.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/GradientBrushes.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/GradientBrushes/MainForm.Designer.vb b/Code/Chapter 28/GradientBrushes/MainForm.Designer.vb new file mode 100644 index 0000000..3b156d5 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(362, 343) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Fun with Gradient Brushes." + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/GradientBrushes/MainForm.resx b/Code/Chapter 28/GradientBrushes/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/GradientBrushes/MainForm.vb b/Code/Chapter 28/GradientBrushes/MainForm.vb new file mode 100644 index 0000000..6894e0a --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/MainForm.vb @@ -0,0 +1,35 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Drawing2D + +Public Class MainForm + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim r As Rectangle = New Rectangle(10, 10, 100, 100) + + ' A gradient brush. + Dim theBrush As LinearGradientBrush = Nothing + Dim yOffSet As Integer = 10 + + ' Get all members of the LinearGradientMode enum. + Dim obj As Array = [Enum].GetValues(GetType(LinearGradientMode)) + + For x As Integer = 0 To obj.Length - 1 + ' Draw an oval with a LinearGradientMode member. + ' Configure Brush. + Dim temp As LinearGradientMode = CType(obj.GetValue(x), LinearGradientMode) + theBrush = New LinearGradientBrush(r, Color.GreenYellow, Color.Blue, temp) + + ' Print name of LinearGradientMode enum. + g.DrawString(temp.ToString(), _ + New Font("Times New Roman", 10), _ + New SolidBrush(Color.Black), 0, yOffSet) + ' Fill a rectangle with the correct brush. + g.FillRectangle(theBrush, 150, yOffSet, 200, 50) + yOffSet += 80 + Next + End Sub +End Class diff --git a/Code/Chapter 28/GradientBrushes/My Project/Application.Designer.vb b/Code/Chapter 28/GradientBrushes/My Project/Application.Designer.vb new file mode 100644 index 0000000..9dc98e8 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.GradientBrushes.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/GradientBrushes/My Project/Application.myapp b/Code/Chapter 28/GradientBrushes/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/GradientBrushes/My Project/AssemblyInfo.vb b/Code/Chapter 28/GradientBrushes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..02ee227 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/GradientBrushes/My Project/Resources.Designer.vb b/Code/Chapter 28/GradientBrushes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..95c7cfe --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("GradientBrushes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/GradientBrushes/My Project/Resources.resx b/Code/Chapter 28/GradientBrushes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/GradientBrushes/My Project/Settings.Designer.vb b/Code/Chapter 28/GradientBrushes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c9e2cb2 --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.GradientBrushes.My.MySettings + Get + Return Global.GradientBrushes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/GradientBrushes/My Project/Settings.settings b/Code/Chapter 28/GradientBrushes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/GradientBrushes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/HitTestingImages/HitTestingImages.sln b/Code/Chapter 28/HitTestingImages/HitTestingImages.sln new file mode 100644 index 0000000..70ca33c --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/HitTestingImages.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "HitTestingImages", "HitTestingImages.vbproj", "{DC947AD4-F7B9-42D7-B0A3-68D085B55002}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DC947AD4-F7B9-42D7-B0A3-68D085B55002}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC947AD4-F7B9-42D7-B0A3-68D085B55002}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC947AD4-F7B9-42D7-B0A3-68D085B55002}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC947AD4-F7B9-42D7-B0A3-68D085B55002}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/HitTestingImages/HitTestingImages.suo b/Code/Chapter 28/HitTestingImages/HitTestingImages.suo new file mode 100644 index 0000000000000000000000000000000000000000..8e1f247ad79a6cfafa9c43b8a963d2f3431352a6 GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj b/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj new file mode 100644 index 0000000..d345532 --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj @@ -0,0 +1,159 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DC947AD4-F7B9-42D7-B0A3-68D085B55002} + WinExe + HitTestingImages.My.MyApplication + HitTestingImages + HitTestingImages + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + HitTestingImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + HitTestingImages.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + Always + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj.user b/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/HitTestingImages.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/HitTestingImages/MainForm.Designer.vb b/Code/Chapter 28/HitTestingImages/MainForm.Designer.vb new file mode 100644 index 0000000..1a1f94a --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/MainForm.Designer.vb @@ -0,0 +1,35 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(397, 415) + Me.Name = "MainForm" + Me.Text = "Hit testing regions" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/HitTestingImages/MainForm.resx b/Code/Chapter 28/HitTestingImages/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/HitTestingImages/MainForm.vb b/Code/Chapter 28/HitTestingImages/MainForm.vb new file mode 100644 index 0000000..71e90db --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/MainForm.vb @@ -0,0 +1,119 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Drawing2D + +Enum ClickedImage + ImageA + ImageB + ImageC + StrangePath +End Enum + +Public Class MainForm + + ' To hold the *.bmp data. + Private myImages As Bitmap() = New Bitmap(2) {} + Private imageRects As Rectangle() = New Rectangle(2) {} + Private isImageClicked As Boolean = False + Private imageClicked As ClickedImage = ClickedImage.ImageA + Private myPath As GraphicsPath = New GraphicsPath() + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + myImages(0) = New Bitmap("imageA.bmp") + myImages(1) = New Bitmap("imageB.bmp") + myImages(2) = New Bitmap("imageC.bmp") + + ' Set up the rectangles. + imageRects(0) = New Rectangle(10, 10, 90, 90) + imageRects(1) = New Rectangle(10, 110, 90, 90) + imageRects(2) = New Rectangle(10, 210, 90, 90) + + ' Create an interesting path. + myPath.StartFigure() + myPath.AddLine(New Point(150, 10), New Point(120, 150)) + myPath.AddArc(200, 200, 100, 100, 0, 90) + Dim point1 As Point = New Point(250, 250) + Dim point2 As Point = New Point(350, 275) + Dim point3 As Point = New Point(350, 325) + Dim point4 As Point = New Point(250, 350) + Dim points As Point() = {point1, point2, point3, point4} + myPath.AddCurve(points) + myPath.CloseFigure() + CenterToScreen() + End Sub + +#Region "Event handlers" + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + ' Render all three images. + Dim yOffset As Integer = 10 + For Each b As Bitmap In myImages + g.DrawImage(b, 10, yOffset, 90, 90) + yOffset += 100 + Next + + ' Draw the graphics path. + g.FillPath(Brushes.Sienna, myPath) + + ' Draw outline (if clicked) + If isImageClicked = True Then + Dim outline As Pen = New Pen(Color.Red, 5) + Select Case imageClicked + Case ClickedImage.ImageA + g.DrawRectangle(outline, imageRects(0)) + Exit Select + Case ClickedImage.ImageB + g.DrawRectangle(outline, imageRects(1)) + Exit Select + Case ClickedImage.ImageC + g.DrawRectangle(outline, imageRects(2)) + Exit Select + Case ClickedImage.StrangePath + g.DrawPath(outline, myPath) + Exit Select + Case Else + Exit Select + End Select + End If + End Sub + + Private Sub MainForm_MouseDown(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown + ' Get (x, y) of mouse click. + Dim mousePt As Point = New Point(e.X, e.Y) + + ' See if the mouse is anywhere in the 3 Rectangles. + If imageRects(0).Contains(mousePt) Then + isImageClicked = True + imageClicked = ClickedImage.ImageA + Me.Text = "You clicked image A" + ElseIf imageRects(1).Contains(mousePt) Then + isImageClicked = True + imageClicked = ClickedImage.ImageB + Me.Text = "You clicked image B" + ElseIf imageRects(2).Contains(mousePt) Then + isImageClicked = True + imageClicked = ClickedImage.ImageC + Me.Text = "You clicked image C" + ElseIf myPath.IsVisible(mousePt) Then + isImageClicked = True + imageClicked = ClickedImage.StrangePath + Me.Text = "You clicked the strange shape..." + Else + ' Not in any shape, set defaults. + isImageClicked = False + Me.Text = "Hit Testing Images" + End If + + ' Redraw the client area. + Invalidate() + End Sub +#End Region + +End Class diff --git a/Code/Chapter 28/HitTestingImages/My Project/Application.Designer.vb b/Code/Chapter 28/HitTestingImages/My Project/Application.Designer.vb new file mode 100644 index 0000000..4ab5124 --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.HitTestingImages.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/HitTestingImages/My Project/Application.myapp b/Code/Chapter 28/HitTestingImages/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/HitTestingImages/My Project/AssemblyInfo.vb b/Code/Chapter 28/HitTestingImages/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..be25269 --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/HitTestingImages/My Project/Resources.Designer.vb b/Code/Chapter 28/HitTestingImages/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5c3eacb --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("HitTestingImages.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/HitTestingImages/My Project/Resources.resx b/Code/Chapter 28/HitTestingImages/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/HitTestingImages/My Project/Settings.Designer.vb b/Code/Chapter 28/HitTestingImages/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3d5be7c --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.HitTestingImages.My.MySettings + Get + Return Global.HitTestingImages.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/HitTestingImages/My Project/Settings.settings b/Code/Chapter 28/HitTestingImages/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/HitTestingImages/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/HitTestingImages/imageA.bmp b/Code/Chapter 28/HitTestingImages/imageA.bmp new file mode 100644 index 0000000000000000000000000000000000000000..ddda3a4e9931b87eefba0586d3bf0f4b063f44c4 GIT binary patch literal 49206 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

D1`>cMeAig=aP`3Tt#rU_ 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 _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.PictureBox1 = New System.Windows.Forms.PictureBox + Me.Label1 = New System.Windows.Forms.Label + Me.btnLoadResources = New System.Windows.Forms.Button + Me.myPictureBox = New System.Windows.Forms.PictureBox + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.myPictureBox, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = Global.MyResourcesWinApp.My.Resources.Resources.HappyDude + Me.PictureBox1.Location = New System.Drawing.Point(12, 41) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(49, 45) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.PictureBox1.TabIndex = 0 + Me.PictureBox1.TabStop = False + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(229, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "This image in embedded in the Form's *.resx file" + ' + 'btnLoadResources + ' + Me.btnLoadResources.Location = New System.Drawing.Point(12, 111) + Me.btnLoadResources.Name = "btnLoadResources" + Me.btnLoadResources.Size = New System.Drawing.Size(129, 23) + Me.btnLoadResources.TabIndex = 2 + Me.btnLoadResources.Text = "Load Resources" + Me.btnLoadResources.UseVisualStyleBackColor = True + ' + 'myPictureBox + ' + Me.myPictureBox.Location = New System.Drawing.Point(15, 160) + Me.myPictureBox.Name = "myPictureBox" + Me.myPictureBox.Size = New System.Drawing.Size(100, 50) + Me.myPictureBox.TabIndex = 3 + Me.myPictureBox.TabStop = False + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Controls.Add(Me.myPictureBox) + Me.Controls.Add(Me.btnLoadResources) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.PictureBox1) + Me.Name = "MainForm" + Me.Text = "Embedded Images" + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.myPictureBox, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents btnLoadResources As System.Windows.Forms.Button + Friend WithEvents myPictureBox As System.Windows.Forms.PictureBox + +End Class diff --git a/Code/Chapter 28/MyResourcesWinApp/MainForm.resx b/Code/Chapter 28/MyResourcesWinApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/MainForm.vb b/Code/Chapter 28/MyResourcesWinApp/MainForm.vb new file mode 100644 index 0000000..1b91f60 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MainForm.vb @@ -0,0 +1,28 @@ +Option Explicit On +Option Strict On + +Imports System.Resources +Imports System.Reflection + +Public Class MainForm + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + End Sub + + Private Sub btnLoadResources_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnLoadResources.Click + ' Make a resource manager. + Dim rm As ResourceManager = _ + New ResourceManager("MyResourcesWinApp.MyResources", Assembly.GetExecutingAssembly()) + ' Get the embedded string (case sensitive!) + MessageBox.Show(rm.GetString("WelcomeString")) + ' Get the embedded bitmap (case sensitive!) + myPictureBox.Image = CType(rm.GetObject("HappyDude"), Bitmap) + ' Clean up. + rm.ReleaseAllResources() + End Sub +End Class diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Application.Designer.vb b/Code/Chapter 28/MyResourcesWinApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..ec16471 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.MyResourcesWinApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Application.myapp b/Code/Chapter 28/MyResourcesWinApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/MyResourcesWinApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..8360e9e --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.Designer.vb b/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..58739b9 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.Designer.vb @@ -0,0 +1,70 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

+ ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyResourcesWinApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property HappyDude() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("HappyDude", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.resx b/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.resx new file mode 100644 index 0000000..8658021 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\HappyDude.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.Designer.vb b/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8eaa320 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MyResourcesWinApp.My.MySettings + Get + Return Global.MyResourcesWinApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.settings b/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/MyResourcesWinApp/MyResources.Designer.vb b/Code/Chapter 28/MyResourcesWinApp/MyResources.Designer.vb new file mode 100644 index 0000000..c42951b --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MyResources.Designer.vb @@ -0,0 +1,83 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Class MyResources + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MyResourcesWinApp.MyResources", GetType(MyResources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend Shared ReadOnly Property HappyDude() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("HappyDude", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized string similar to Some text data.... + ''' + Friend Shared ReadOnly Property WelcomeString() As String + Get + Return ResourceManager.GetString("WelcomeString", resourceCulture) + End Get + End Property + End Class +End Namespace diff --git a/Code/Chapter 28/MyResourcesWinApp/MyResources.resx b/Code/Chapter 28/MyResourcesWinApp/MyResources.resx new file mode 100644 index 0000000..2bd776a --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MyResources.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + Qk12AgAAAAAAAHYAAAAoAAAAIAAAACAAAAABAAQAAAAAAAAAAADEDgAAxA4AABAAAAAQAAAAAAAA/wAA + gP8AgAD/AICA/4AAAP+AAID/gIAA/4CAgP/AwMD/AAD//wD/AP8A/////wAA//8A/////wD//////wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAC7u7u7AAAAAAAAAAAAAAu7u7u7u7uwAAAAAAAAAAC7u7u7u7u7uwAA + AAAAAAC7u7u7u7u7u7u7AAAAAAALu7u7uwAAu7u7u7AAAAAAu7u7u7CZmQu7u7u7AAAAALu7u7sJmZmQ + u7u7uwAAAAu7u7uwkAAACQu7u7uwAAC7u7u7AAu7u7AAu7u7uwAAu7u7sAu7u7u7sAu7u7sAALu7u7C7 + u7u7u7sLu7u7AAu7u7sLu7u7u7u7sLu7u7ALuwAAu7u7u7u7u7sAALuwC7u7sLu7u7u7u7u7C7u7sAu7 + u7sLu7u7u7u7sLu7u7ALu7u7C7u7u7u7u7C7u7uwC7u7u7uwC7u7sAu7u7u7sAu7u7u7AAC7uwAAu7u7 + u7ALu7u7uwAAu7sAALu7u7uwALu7u7sAALu7AAC7u7u7AAC7u7u7AAC7uwAAu7u7uwAAu7u7uwAAu7sA + ALu7u7sAAAu7u7uwC7u7sAu7u7uwAAAAu7u7u7u7u7u7u7u7AAAAALu7u7u7u7u7u7u7uwAAAAALu7u7 + u7u7u7u7u7AAAAAAALu7u7u7u7u7u7sAAAAAAAAAu7u7u7u7u7sAAAAAAAAAAAu7u7u7u7uwAAAAAAAA + AAAAALu7u7sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + + + + Some text data... + + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.sln b/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.sln new file mode 100644 index 0000000..a86f508 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MyResourcesWinApp", "MyResourcesWinApp.vbproj", "{211508A4-1732-4CB4-8CA3-DF06972CC7DB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {211508A4-1732-4CB4-8CA3-DF06972CC7DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {211508A4-1732-4CB4-8CA3-DF06972CC7DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {211508A4-1732-4CB4-8CA3-DF06972CC7DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {211508A4-1732-4CB4-8CA3-DF06972CC7DB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.suo b/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..ad2bb8af8b1f949e9f1fb2f9eeccdb80ff14b2fa GIT binary patch literal 27648 zcmeHPU2q%K6<#}#gr7E02!Ewigpfi>R9klbfKsfLofz!ISjta95M*hs$d9pmEzICR3pnYlk&?$ZD8*#ty-o4Ulwc1@L zYkLE_p0jtgdw0*d_nvd^x#yhqpFX}*WWc)c}&})U0S_P+v>PJfOCQ|m;LpXSKq4sBmLgX2UB z{`wOx1RGQafQLMGMt?Y;F^kJJqi!`5g?cHGH7u)AFE{fAt6>_|rcqB$9?Ol-=En7- z`HazAw9KWvezve=8I43LmDkOZk)JT@R;F5>FdMb}bfHq`NwQ%yg;Lu3Xnna_CHJ5d zqd}N`(Wq8ICJ~PV?JUgdbt3OX!kb^2PM(B z8n~1?I?jCV)w`>aX4)vU6@vNhzEG`_;!W}>bwU;Tp$Khap*F#_T)B0u)yK36SeQq! z`tNe^$SznE8R(-lMahMGW49oNL2 zy^yXcJfFkW<9O4wXfI_?N*=8p$3EIV9}ri)541BRf1Usi$~iSKdr7@!fP;Cpj%#uh zGU8qVziHhUKpC}W8Na8+`0y#})p@*un!JKv%V<}H6=UJ7Bt|a}+bId_mo2g_3)sN; zS~ec{XeY(nO;G!I+fTqrN4Xx5cwL-oJM8*iyWVBj_u2K3U60!JZo9tUuJ_ore4DiA zSq)EF(5^AkgS!~zP~+x)E`%0zq;)xKOW_7FW!B0>x(JR6Z*ruhnexIN$N@N_vMVqHdgbe33K)g} z`*A#o)$br^@1*23=&5?rk=al>IDbo^#Kbt&a87Tg*XVHnzHy_YY%woN4sR$W-F$Ln zL-BX=VzOn6Q1-fM8{1IYGD4cAjaTlXN9lkapsADhJD;QMF-GEULrc9NB$H7R_uUHa z(Tbr>PJL8F%{S4D+N~v$9rk(}&(b<5iYMrM?RCu5r6(TIpo9m*W_3uD0o>QRyQmjq%ab^bR
}b(%1LidXplwtEa(NW;0ci)26erO{`i&M z$N-?;VSJdu3BR`L9`Q4_%+hI>xot4n#_yQ0<8RcgVe!wPE#p=!C(+*=^cpqW9FFI~ zf7DLrgnnW)#=q=B|EZ}N@(7EcE|F{O*UEhZec}~iub8l5+R;V3kxz98`p@xX6ecWw z#+KA8rS(Q{eGwiIu0#g>R-{4cch%Cn#{922{<;OP`j8GG6wbKxP!n?lo;9wPMG;R3 z;ypgk`M(qOwSchwr*~0>sNDF|puqqQix>kFV?Zm?kB$d`pL0pvEI17;yV2rJyOkS1 z$KG~^xanu{jdm1z{pWkkCsYlX7W3!v@0hjC)ga$?!IHYe%r2d>?7tJYe8oh-TouraUndPGd)u z5FvyhYpqlR1tB8o%Nggb<%S_Ob|BJ{vSm5tms9xs&j8Y9k7u5P>=*5#b~XjA)FLbt zWk+64-}#K&{-8Ir4r?@vcdNV$zjxFApxwc|(6IK$18BR|jtln2PcI%V@~R(t^ld%{5rzy*wYgqilXq&TNM|+Px-3CUT5!kjjxpQYk z-vVt>>DO#qq{#ofqW;@t2tI0i^8I|=-9D*AhfgX2-f2gX6C#`EB;+d(er@1R9`-cz zd6*4%0U#xBeK1mHs+iAtfluL8zc&lNq-x{)PsuJ~JQ(3;=2cY17UhoDUCFhM7X|#- zs)_CIzqqG_BcgO|Wedb{byXj1r63%7_Mh}lh?2SfFWD|vwvar-w4{iCIpfw*U@eJkhP=PlDNk3j9w4 zNY@npEYc9vp7*~6V2(12^yQORwu`*$D0%Y{2ujr4PJbCA5R7{mU0IDuXnMv(qz5UD zmL*WomOl18${tGpw0DMO5G_&@@Jj>d-@eu_|1|BO*?X5V^c2{Qu3Z%&plSKe8|24;>HgUS-7N3c6fm>B7= z>&z0C{&2QtmaxpVdpo8y?#4*d`@9GZOzq5Zqdmp>9fo%2kws-%)9!cXEu8*{)~ALy zwDSOy$f`L83v(R#2t4Zexq5a z!XB0K|KEZ8Vb>q${!7_N+y}`xALY4WTQtruoxBMketxfb*BbDTp{;TpoPbTtoRNaC ziAyb;O|FaWeU>+Ne!H~x_21e5qp&ne0(TvKu7VooXmZ`+D1^c<#(gdJhZFyCVf!%e zkU6c)66WrWE2x20paL5F3*&zZci8#gi&yTk18{Eb*T(LTSKYn)GVo8}Vfr9gRGd@A zKeNz^-2Kynpj8+&1DDf(=H00Hi{JRCu+0c6j6ZVR`L##b@t;H6(E<5p_qRU-_qYe~NL#ykeaA@q$jkFiFS+;EjAy{2Dcqwa zB|UAy<`}7T=Uj95q-h^pPg}~nA~n3zg7=kz;nc|J{sR!Pb`RbA2d+hO2ArNB?+j%% zUcJ7Z3CLcPit}!e&^opGWojN=&W%Qr^BgTM8ySG1t zU*L15#!xGcn?ygk7wz7|JH696wD8W2Pl^9AKvx?1<~{qp-8!H*|9gE$x0e00^Sk8~ z=xob;J2!Vy?CqJ~B<0Fm&S?<;I#xa4PJ}V14E7^s%mD4;nwSfDM*oD=QM6_+&wlCF z(I`5CswjY+DW-{efN?&uJyl*73Ep@@@OAR-;UJZ)aFWa z^s+a%#ZLdt3N3ybRtvuxp=YWAZtX??t+AVlBcPZ5MSlCo8DNev|BDp=XNsRiz?f#- zY#K#5{d6nfE&m?SD-|!Pphdup8^(4SV+uPLjG(_8EBV$14{Ak}Bngi~&-j3BANZ!|>VV8U)fP3_d zv7%dkJ6guRWG%ZB?*HSZhrGtW7xyshrtk4ndb-yrF`p-1IznbiF;dxHFI6wPbsYUb z?}yAk==)FT-$gK zd3l{)aBu6fd(`{>ll9~OzW-#cSrzN$32j?Xeg8@On}f|+75e^@usL4qr + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {211508A4-1732-4CB4-8CA3-DF06972CC7DB} + WinExe + MyResourcesWinApp.My.MyApplication + MyResourcesWinApp + MyResourcesWinApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + MyResourcesWinApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + MyResourcesWinApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + True + True + MyResources.resx + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + Designer + My.Resources + ResXFileCodeGenerator + MyResources.Designer.vb + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.vbproj.user b/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/MyResourcesWinApp/MyResourcesWinApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/MyResourcesWinApp/Resources/HappyDude.bmp b/Code/Chapter 28/MyResourcesWinApp/Resources/HappyDude.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3f7a6994911ca81f3cfc635b17990963f43c2345 GIT binary patch literal 630 zcmZuuu@QqX3{-MyxZGuil$j%a)}i(YwBEwK8;a~j{$H|v1O$@xua^+;{>)dC&4@4f zGyGyVWH8jf4|gY8OlG((B|i|6!jrA*io&Mbwv8Da7b%8QtFTeH6V_T9GcsurbS|{c;B`OKWQwdgJ1X`$F`*X4-5h2utqrYM|5>pwCeu+0XS^> A;Q#;t literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/PenCapApp/MainForm.Designer.vb b/Code/Chapter 28/PenCapApp/MainForm.Designer.vb new file mode 100644 index 0000000..32387d2 --- /dev/null +++ b/Code/Chapter 28/PenCapApp/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(357, 364) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Pen Cap App" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/PenCapApp/MainForm.resx b/Code/Chapter 28/PenCapApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/PenCapApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/PenCapApp/MainForm.vb b/Code/Chapter 28/PenCapApp/MainForm.vb new file mode 100644 index 0000000..081df64 --- /dev/null +++ b/Code/Chapter 28/PenCapApp/MainForm.vb @@ -0,0 +1,33 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Drawing2D + +Public Class MainForm + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim thePen As Pen = New Pen(Color.Black, 10) + Dim yOffSet As Integer = 10 + ' Get all members of the LineCap enum. + Dim obj As Array = [Enum].GetValues(GetType(LineCap)) + For x As Integer = 0 To obj.Length - 1 + ' Draw a line with a LineCap member. + ' Get next cap and configure pen. + Dim temp As LineCap = CType(obj.GetValue(x), LineCap) + thePen.StartCap = temp + thePen.EndCap = temp + ' Print name of LineCap enum. + g.DrawString(temp.ToString(), New Font("Times New Roman", 10), _ + New SolidBrush(Color.Black), 0, yOffSet) + ' Draw a line with the correct cap. + g.DrawLine(thePen, 100, yOffSet, Width - 50, yOffSet) + yOffSet += 40 + Next + End Sub + + Private Sub MainForm_Resize(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles MyBase.Resize + Invalidate() + End Sub +End Class diff --git a/Code/Chapter 28/PenCapApp/My Project/Application.Designer.vb b/Code/Chapter 28/PenCapApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..84f190f --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.PenCapApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/PenCapApp/My Project/Application.myapp b/Code/Chapter 28/PenCapApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/PenCapApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/PenCapApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a077b90 --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/PenCapApp/My Project/Resources.Designer.vb b/Code/Chapter 28/PenCapApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d766aea --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("PenCapApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/PenCapApp/My Project/Resources.resx b/Code/Chapter 28/PenCapApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/PenCapApp/My Project/Settings.Designer.vb b/Code/Chapter 28/PenCapApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..69a4d2d --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.PenCapApp.My.MySettings + Get + Return Global.PenCapApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/PenCapApp/My Project/Settings.settings b/Code/Chapter 28/PenCapApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/PenCapApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/PenCapApp/PenCapApp.sln b/Code/Chapter 28/PenCapApp/PenCapApp.sln new file mode 100644 index 0000000..b50c7e4 --- /dev/null +++ b/Code/Chapter 28/PenCapApp/PenCapApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PenCapApp", "PenCapApp.vbproj", "{FA834229-4205-4BD5-A52F-1F22BF1C9240}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FA834229-4205-4BD5-A52F-1F22BF1C9240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA834229-4205-4BD5-A52F-1F22BF1C9240}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA834229-4205-4BD5-A52F-1F22BF1C9240}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA834229-4205-4BD5-A52F-1F22BF1C9240}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/PenCapApp/PenCapApp.suo b/Code/Chapter 28/PenCapApp/PenCapApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..9fd2c4c4cf32320e38fd4dd54f787dfba45263eb GIT binary patch literal 18432 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {FA834229-4205-4BD5-A52F-1F22BF1C9240} + WinExe + PenCapApp.My.MyApplication + PenCapApp + PenCapApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + PenCapApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + PenCapApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/PenCapApp/PenCapApp.vbproj.user b/Code/Chapter 28/PenCapApp/PenCapApp.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 28/PenCapApp/PenCapApp.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/ResXWriter/HappyDude.bmp b/Code/Chapter 28/ResXWriter/HappyDude.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3f7a6994911ca81f3cfc635b17990963f43c2345 GIT binary patch literal 630 zcmZuuu@QqX3{-MyxZGuil$j%a)}i(YwBEwK8;a~j{$H|v1O$@xua^+;{>)dC&4@4f zGyGyVWH8jf4|gY8OlG((B|i|6!jrA*io&Mbwv8Da7b%8QtFTeH6V_T9GcsurbS|{c;B`OKWQwdgJ1X`$F`*X4-5h2utqrYM|5>pwCeu+0XS^> A;Q#;t literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/ResXWriter/MainForm.Designer.vb b/Code/Chapter 28/ResXWriter/MainForm.Designer.vb new file mode 100644 index 0000000..4e7e342 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/MainForm.Designer.vb @@ -0,0 +1,46 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.btnGenResX = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'btnGenResX + ' + Me.btnGenResX.Location = New System.Drawing.Point(12, 29) + Me.btnGenResX.Name = "btnGenResX" + Me.btnGenResX.Size = New System.Drawing.Size(267, 23) + Me.btnGenResX.TabIndex = 1 + Me.btnGenResX.Text = "Generate a *.resx file" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 86) + Me.Controls.Add(Me.btnGenResX) + Me.Name = "MainForm" + Me.Text = "ResX Writer" + Me.ResumeLayout(False) + + End Sub + Private WithEvents btnGenResX As System.Windows.Forms.Button + +End Class diff --git a/Code/Chapter 28/ResXWriter/MainForm.resx b/Code/Chapter 28/ResXWriter/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/ResXWriter/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/ResXWriter/MainForm.vb b/Code/Chapter 28/ResXWriter/MainForm.vb new file mode 100644 index 0000000..d56c250 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/MainForm.vb @@ -0,0 +1,17 @@ +Imports System.Resources + +Public Class MainForm + + Private Sub btnGenResX_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnGenResX.Click + ' Make an resx writer & specify the file to write to. + Dim w As ResXResourceWriter = New ResXResourceWriter("C:\ResXForm.resx") + ' Add happy dude & string. + Dim bMap As Bitmap = New Bitmap("happyDude.bmp") + w.AddResource("happyDude", bMap) + w.AddResource("welcomeString", "Hello new resource format!") + ' Commit it. + w.Generate() + w.Close() + End Sub +End Class diff --git a/Code/Chapter 28/ResXWriter/My Project/Application.Designer.vb b/Code/Chapter 28/ResXWriter/My Project/Application.Designer.vb new file mode 100644 index 0000000..88ea91a --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.ResXWriter.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/ResXWriter/My Project/Application.myapp b/Code/Chapter 28/ResXWriter/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/ResXWriter/My Project/AssemblyInfo.vb b/Code/Chapter 28/ResXWriter/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2a50ba4 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/ResXWriter/My Project/Resources.Designer.vb b/Code/Chapter 28/ResXWriter/My Project/Resources.Designer.vb new file mode 100644 index 0000000..47bdb08 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ResXWriter.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/ResXWriter/My Project/Resources.resx b/Code/Chapter 28/ResXWriter/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/ResXWriter/My Project/Settings.Designer.vb b/Code/Chapter 28/ResXWriter/My Project/Settings.Designer.vb new file mode 100644 index 0000000..95ebf1d --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ResXWriter.My.MySettings + Get + Return Global.ResXWriter.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/ResXWriter/My Project/Settings.settings b/Code/Chapter 28/ResXWriter/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/ResXWriter/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/ResXWriter/ResXWriter.sln b/Code/Chapter 28/ResXWriter/ResXWriter.sln new file mode 100644 index 0000000..811a1e6 --- /dev/null +++ b/Code/Chapter 28/ResXWriter/ResXWriter.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ResXWriter", "ResXWriter.vbproj", "{E6250875-7F12-4C1F-99B5-908C3472D347}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E6250875-7F12-4C1F-99B5-908C3472D347}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6250875-7F12-4C1F-99B5-908C3472D347}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6250875-7F12-4C1F-99B5-908C3472D347}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6250875-7F12-4C1F-99B5-908C3472D347}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/ResXWriter/ResXWriter.suo b/Code/Chapter 28/ResXWriter/ResXWriter.suo new file mode 100644 index 0000000000000000000000000000000000000000..4e2d6834884a91297cac1a43b0087553266a57ac GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/ResXWriter/ResXWriter.vbproj b/Code/Chapter 28/ResXWriter/ResXWriter.vbproj new file mode 100644 index 0000000..3a8918e --- /dev/null +++ b/Code/Chapter 28/ResXWriter/ResXWriter.vbproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E6250875-7F12-4C1F-99B5-908C3472D347} + WinExe + ResXWriter.My.MyApplication + ResXWriter + ResXWriter + WindowsForms + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ResXWriter.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ResXWriter.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/ResXWriter/ResXWriter.vbproj.user b/Code/Chapter 28/ResXWriter/ResXWriter.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 28/ResXWriter/ResXWriter.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/SolidBrushApp/MainForm.Designer.vb b/Code/Chapter 28/SolidBrushApp/MainForm.Designer.vb new file mode 100644 index 0000000..39d0b32 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(292, 266) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Fun with Brushes" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/SolidBrushApp/MainForm.resx b/Code/Chapter 28/SolidBrushApp/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/SolidBrushApp/MainForm.vb b/Code/Chapter 28/SolidBrushApp/MainForm.vb new file mode 100644 index 0000000..32a291e --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/MainForm.vb @@ -0,0 +1,31 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + ' Make a blue SolidBrush. + Dim blueBrush As SolidBrush = New SolidBrush(Color.Blue) + + ' Get a stock brush from the Brushes type. + Dim pen2 As SolidBrush = CType(Brushes.Firebrick, SolidBrush) + + ' Render some shapes with the brushes. + g.FillEllipse(blueBrush, 10, 10, 100, 100) + g.FillPie(Brushes.Black, 150, 10, 120, 150, 90, 80) + + ' Draw a purple polygon as well... + Dim brush3 As SolidBrush = New SolidBrush(Color.Purple) + g.FillPolygon(brush3, New Point() {New Point(30, 140), _ + New Point(265, 200), New Point(100, 225), _ + New Point(190, 190), New Point(50, 330), _ + New Point(20, 180)}) + + ' And a rectangle with some text... + Dim r As Rectangle = New Rectangle(150, 10, 130, 60) + g.FillRectangle(Brushes.Blue, r) + g.DrawString("Hello out there...How are ya?", New Font("Arial", 12), Brushes.White, r) + End Sub +End Class diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Application.Designer.vb b/Code/Chapter 28/SolidBrushApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..0cc7c74 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SolidBrushApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Application.myapp b/Code/Chapter 28/SolidBrushApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/SolidBrushApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/SolidBrushApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..bb6b4a3 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Resources.Designer.vb b/Code/Chapter 28/SolidBrushApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..bc9f751 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SolidBrushApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Resources.resx b/Code/Chapter 28/SolidBrushApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Settings.Designer.vb b/Code/Chapter 28/SolidBrushApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..445983d --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SolidBrushApp.My.MySettings + Get + Return Global.SolidBrushApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/SolidBrushApp/My Project/Settings.settings b/Code/Chapter 28/SolidBrushApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/SolidBrushApp/SolidBrushApp.sln b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.sln new file mode 100644 index 0000000..4968449 --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SolidBrushApp", "SolidBrushApp.vbproj", "{1D93C41F-FC4B-43B3-A345-4F39BC0039CC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1D93C41F-FC4B-43B3-A345-4F39BC0039CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1D93C41F-FC4B-43B3-A345-4F39BC0039CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1D93C41F-FC4B-43B3-A345-4F39BC0039CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1D93C41F-FC4B-43B3-A345-4F39BC0039CC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/SolidBrushApp/SolidBrushApp.suo b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..2206a1a7e4a23be733bf84b006db431b892c168d GIT binary patch literal 19456 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj new file mode 100644 index 0000000..3d0603b --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1D93C41F-FC4B-43B3-A345-4F39BC0039CC} + WinExe + SolidBrushApp.My.MyApplication + SolidBrushApp + SolidBrushApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SolidBrushApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SolidBrushApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj.user b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj.user new file mode 100644 index 0000000..fdcb14e --- /dev/null +++ b/Code/Chapter 28/SolidBrushApp/SolidBrushApp.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 28/SwellingFontApp/MainForm.Designer.vb b/Code/Chapter 28/SwellingFontApp/MainForm.Designer.vb new file mode 100644 index 0000000..fa41741 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/MainForm.Designer.vb @@ -0,0 +1,115 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.timesToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.arialToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.listInstalledFontsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.wingDingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.configureToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.swellToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.fontFaceToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.menuStrip1 = New System.Windows.Forms.MenuStrip + Me.swellTimer = New System.Windows.Forms.Timer(Me.components) + Me.menuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'timesToolStripMenuItem + ' + Me.timesToolStripMenuItem.Name = "timesToolStripMenuItem" + Me.timesToolStripMenuItem.Size = New System.Drawing.Size(172, 22) + Me.timesToolStripMenuItem.Text = "&Times New Roman" + ' + 'arialToolStripMenuItem + ' + Me.arialToolStripMenuItem.Name = "arialToolStripMenuItem" + Me.arialToolStripMenuItem.Size = New System.Drawing.Size(172, 22) + Me.arialToolStripMenuItem.Text = "&Arial" + ' + 'listInstalledFontsToolStripMenuItem + ' + Me.listInstalledFontsToolStripMenuItem.Name = "listInstalledFontsToolStripMenuItem" + Me.listInstalledFontsToolStripMenuItem.Size = New System.Drawing.Size(175, 22) + Me.listInstalledFontsToolStripMenuItem.Text = "&List Installed Fonts" + ' + 'wingDingsToolStripMenuItem + ' + Me.wingDingsToolStripMenuItem.Name = "wingDingsToolStripMenuItem" + Me.wingDingsToolStripMenuItem.Size = New System.Drawing.Size(172, 22) + Me.wingDingsToolStripMenuItem.Text = "&WingDings" + ' + 'configureToolStripMenuItem1 + ' + Me.configureToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.swellToolStripMenuItem, Me.fontFaceToolStripMenuItem, Me.listInstalledFontsToolStripMenuItem}) + Me.configureToolStripMenuItem1.Name = "configureToolStripMenuItem1" + Me.configureToolStripMenuItem1.Size = New System.Drawing.Size(66, 20) + Me.configureToolStripMenuItem1.Text = "&Configure" + ' + 'swellToolStripMenuItem + ' + Me.swellToolStripMenuItem.Name = "swellToolStripMenuItem" + Me.swellToolStripMenuItem.Size = New System.Drawing.Size(175, 22) + Me.swellToolStripMenuItem.Text = "&Swell?" + ' + 'fontFaceToolStripMenuItem + ' + Me.fontFaceToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.arialToolStripMenuItem, Me.timesToolStripMenuItem, Me.wingDingsToolStripMenuItem}) + Me.fontFaceToolStripMenuItem.Name = "fontFaceToolStripMenuItem" + Me.fontFaceToolStripMenuItem.Size = New System.Drawing.Size(175, 22) + Me.fontFaceToolStripMenuItem.Text = "&Font Face" + ' + 'menuStrip1 + ' + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.configureToolStripMenuItem1}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 0) + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(374, 24) + Me.menuStrip1.TabIndex = 1 + Me.menuStrip1.Text = "menuStrip1" + ' + 'swellTimer + ' + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(374, 162) + Me.Controls.Add(Me.menuStrip1) + Me.Name = "MainForm" + Me.Text = "Swelling Font App" + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents timesToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents arialToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents listInstalledFontsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents wingDingsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents configureToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents swellToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents fontFaceToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents menuStrip1 As System.Windows.Forms.MenuStrip + Friend WithEvents swellTimer As System.Windows.Forms.Timer + +End Class diff --git a/Code/Chapter 28/SwellingFontApp/MainForm.resx b/Code/Chapter 28/SwellingFontApp/MainForm.resx new file mode 100644 index 0000000..ed0db65 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/MainForm.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 126, 17 + + \ No newline at end of file diff --git a/Code/Chapter 28/SwellingFontApp/MainForm.vb b/Code/Chapter 28/SwellingFontApp/MainForm.vb new file mode 100644 index 0000000..87b4ac4 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/MainForm.vb @@ -0,0 +1,94 @@ +Option Explicit On +Option Strict On + +Imports System.Drawing.Text + +Public Class MainForm + Private swellValue As Integer + Private strFontFace As String = "WingDings" + Private installedFonts As String + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + BackColor = Color.Honeydew + CenterToScreen() + ' Configure the Timer. + swellTimer.Enabled = True + swellTimer.Interval = 100 + End Sub + +#Region "Event handlers" + Private Sub swellToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles swellToolStripMenuItem.Click + swellTimer.Enabled = Not swellTimer.Enabled + End Sub + + Private Sub arialToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles arialToolStripMenuItem.Click + strFontFace = "Arial" + Invalidate() + End Sub + + Private Sub timesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timesToolStripMenuItem.Click + strFontFace = "Times New Roman" + Invalidate() + End Sub + + Private Sub wingDingsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles wingDingsToolStripMenuItem.Click + strFontFace = "WingDings" + Invalidate() + End Sub + + Private Sub listInstalledFontsToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles listInstalledFontsToolStripMenuItem.Click + Dim fonts As InstalledFontCollection = New InstalledFontCollection() + For i As Integer = 0 To fonts.Families.Length - 1 + installedFonts &= fonts.Families(i).Name & " " + Next + ' This time, we need to invalidate the entire client area, + ' as we will paint the installedFonts string on the lower half + ' of the client rectangle. + Invalidate() + End Sub + + Private Sub swellTimer_Tick(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles swellTimer.Tick + ' Increase current swellValue by 5. + swellValue += 5 + ' If this value is greater than or equal to 50, reset to zero. + If swellValue >= 50 Then + swellValue = 0 + End If + ' Just invalidate the 'minimal dirty rectangle to help reduce flicker. + Invalidate(New Rectangle(0, 0, ClientRectangle.Width, 100)) + End Sub + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim theFont As Font = New Font(strFontFace, 12 + swellValue) + Dim message As String = "Hello GDI+" + + ' Display message in the center of the window! + Dim windowCenter As Single = CSng(Me.DisplayRectangle.Width / 2) + Dim stringSize As SizeF = e.Graphics.MeasureString(message, theFont) + Dim startPos As Single = windowCenter - (stringSize.Width / 2) + g.DrawString(message, theFont, Brushes.Blue, startPos, 10) + + ' Show installed fonts in the rectangle below the swell area. + Dim myRect As Rectangle = New Rectangle(0, 100, ClientRectangle.Width, ClientRectangle.Height) + ' Paint this area of the Form black. + g.FillRectangle(New SolidBrush(Color.Black), myRect) + g.DrawString(installedFonts, New Font("Arial", 12), Brushes.White, myRect) + End Sub + + Private Sub MainForm_Resize(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles MyBase.Resize + Invalidate() + End Sub +#End Region + +End Class diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Application.Designer.vb b/Code/Chapter 28/SwellingFontApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..402245f --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SwellingFontApp.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Application.myapp b/Code/Chapter 28/SwellingFontApp/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/SwellingFontApp/My Project/AssemblyInfo.vb b/Code/Chapter 28/SwellingFontApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..8b1dd81 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Resources.Designer.vb b/Code/Chapter 28/SwellingFontApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1ce0620 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SwellingFontApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Resources.resx b/Code/Chapter 28/SwellingFontApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Settings.Designer.vb b/Code/Chapter 28/SwellingFontApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..39dbd0e --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SwellingFontApp.My.MySettings + Get + Return Global.SwellingFontApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/SwellingFontApp/My Project/Settings.settings b/Code/Chapter 28/SwellingFontApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/SwellingFontApp/SwellingFontApp.sln b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.sln new file mode 100644 index 0000000..af26597 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SwellingFontApp", "SwellingFontApp.vbproj", "{C03CF165-9DBC-4F2D-B778-6DAA512ACB44}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C03CF165-9DBC-4F2D-B778-6DAA512ACB44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C03CF165-9DBC-4F2D-B778-6DAA512ACB44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C03CF165-9DBC-4F2D-B778-6DAA512ACB44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C03CF165-9DBC-4F2D-B778-6DAA512ACB44}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 28/SwellingFontApp/SwellingFontApp.suo b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..dcf068f5ec308186ca08a52b66adc7921914cc01 GIT binary patch literal 18432 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 D2fo>- literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj new file mode 100644 index 0000000..7ac4008 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj @@ -0,0 +1,148 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {C03CF165-9DBC-4F2D-B778-6DAA512ACB44} + WinExe + SwellingFontApp.My.MyApplication + SwellingFontApp + SwellingFontApp + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SwellingFontApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SwellingFontApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj.user b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/SwellingFontApp/SwellingFontApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 28/TexturedBrushes/Clouds.bmp b/Code/Chapter 28/TexturedBrushes/Clouds.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2964f104d28ae2137af38df58b77b42e76e37ab8 GIT binary patch literal 307514 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 Jdp$=CL9&F?z{t>?0!;zu|SVwSKSUi&b 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/TexturedBrushes/MainForm.Designer.vb b/Code/Chapter 28/TexturedBrushes/MainForm.Designer.vb new file mode 100644 index 0000000..dcf538b --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/MainForm.Designer.vb @@ -0,0 +1,36 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(540, 334) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Bitmap brushes!" + Me.ResumeLayout(False) + + End Sub + +End Class diff --git a/Code/Chapter 28/TexturedBrushes/MainForm.resx b/Code/Chapter 28/TexturedBrushes/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/TexturedBrushes/MainForm.vb b/Code/Chapter 28/TexturedBrushes/MainForm.vb new file mode 100644 index 0000000..2b58c5a --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/MainForm.vb @@ -0,0 +1,46 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Private texturedTextBrush As Brush + Private texturedBGroundBrush As Brush + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + + ' Load images brushes. + Try + Dim bGroundBrushImage As Image = New Bitmap("Clouds.bmp") + texturedBGroundBrush = New TextureBrush(bGroundBrushImage) + Dim textBrushImage As Image = New Bitmap("Soap Bubbles.bmp") + texturedTextBrush = New TextureBrush(textBrushImage) + Catch + MessageBox.Show("Can't find bitmap files!") + Application.Exit() + End Try + End Sub + +#Region "Event Handlers" + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim r As Rectangle = ClientRectangle + + ' Paint the clouds on the client area. + g.FillRectangle(texturedBGroundBrush, r) + + ' Some big bold text with a textured brush. + g.DrawString("Bitmaps as brushes! Way cool...", _ + New Font("Arial", 50, FontStyle.Bold Or FontStyle.Italic), texturedTextBrush, r) + End Sub + + Private Sub MainForm_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize + Invalidate() + End Sub +#End Region + +End Class diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Application.Designer.vb b/Code/Chapter 28/TexturedBrushes/My Project/Application.Designer.vb new file mode 100644 index 0000000..153d7cc --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.TexturedBrushes.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Application.myapp b/Code/Chapter 28/TexturedBrushes/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 28/TexturedBrushes/My Project/AssemblyInfo.vb b/Code/Chapter 28/TexturedBrushes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..c24354e --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Resources.Designer.vb b/Code/Chapter 28/TexturedBrushes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..6462fcd --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

+ ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TexturedBrushes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Resources.resx b/Code/Chapter 28/TexturedBrushes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Settings.Designer.vb b/Code/Chapter 28/TexturedBrushes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1ea872f --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.TexturedBrushes.My.MySettings + Get + Return Global.TexturedBrushes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 28/TexturedBrushes/My Project/Settings.settings b/Code/Chapter 28/TexturedBrushes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 28/TexturedBrushes/Soap Bubbles.bmp b/Code/Chapter 28/TexturedBrushes/Soap Bubbles.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f4e47bb3916dee5240609343be989f0b67d11a82 GIT binary patch literal 65978 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
Ak-;0;=a&#S5xPtgd|#=<^lIPhA{uxp~9K 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

hn+YPZy7Vk8$L{6>1tA_tFoHmF_v_z&Txl z)yNE4GScyc_Uy@KIl>mR#yT(sOS^^#hx0GKeD(bwvm5UIvUOF2v0cK5Im=-)-~kuO zp6BnHe&=j#be4xRx5$Z18LYZ`A#Wt(E2-)K{)){Li?KKhpg`1;441YHNszB!q)TdN z&q=gQm}nD$NScmxIA`MOxQ&+OS>{q0B~?Kc1t_q`_o>)8;_B-ApYPveCn?^D*#0^4 z>%uiB;b-d*R#8q&tJ-F)L1WrJokZC-ESd`){C-!u4xxWiPcFbk#uKGYX_(d7C$$|^<5V#<$lEyUR5i!Gv%|*4rXY4X zI(hYdCe#smz7fsoj!fAKdlW=(q<;?K7`S}-(isEpUpyWo zYGTQXk_W=@XmGNs)^Q4RP^KLbeQnnp5PI8#rT;D?Trk_mUNBPwGfA0**S<}vjEV&V znLy;qC3dT>Kd56eLgCuR|Nr`b3+oQKg;Mt}o6xkbxI$MlVvGV-sDG9weTIvgF6HS% zWK)Lp)7N`YIvz|oR4Wd7t=!F$WjaKkvD5=V+%qw8d2unHDPsyw zT0(RA_)pwFo2~+n=uj;lODncd;IZ?aYC+^SFHj1UBqncMe)EQ}6rEHGC<-u$*O%At zE_Vked?oGC|Id1=Cw<@7QDKASQFpJ=E%Sr&luMzwVkGUkXTnwkumd#CaEoS0m}KDQ zWv#eSxf-%7S}8Cw|ho~ z`I`RQ!oHFzxO~N(84)(47+2W zB{qsNl>UQTy1Rh!ZFzFGW=-$Sx;@he_e0^Wk2K0O9ISTZQchcmoL5&d%Me$YMQOB&uyUsA_4(3~Ry6%deFHYBUo44$EBB1(J&^1WR*KyEv->d%9wu|}_7wU-&mYp$S@qd!pw zE=s{=`tp0XZ9g&GjG1^+M`Rb3lCfk>-thjsmtCbxyN;SQrAU(*gcH4fk%aH$jNK82 z%cTjRq_umyRb#_uzdDqp9&tqC0>$%7o3RB52HXDkN871VLy!* z!`VvVnkq zGWf+_Vl+>N$FFGz#JQ*%g)%vajXQUSr!1#he|l?q7}@a}apR^C^J%`>-Lz>?-tbzv zxOsSU!S*E38G^vzSwC(8;bLcDuWzHP55+^uWMCT`S}9j(t~g+`7i41hOu!ESG!HUbJWmVBI=a@HpAWh<-`2$Wl9A^PJxzGM8~EiLEF>9 zQ&q8~T3|xm)02$1#Eyj2K{`*{R!hy(mUYb+CCvZ&X*)>^?%?I=WQ+OKW*DD;|5)RB zd6B!orh*o&K{aLpX4il47gbc!nhml*(9}ns`~A57INcbSz~iWNB+#6E1<`alXY}Zc()X6^@?WZzp3%lgVgksZ27F56*)66 z31KU$`Vmb+t+E|9yf;@t-K!2ljY6;Wv6`MXyj!*2KjM{a`wfijF_Zy}T)S93BMReW zjj7@?!nga^l(2#@^>jy^+f^YEkc-50G5tMO16K<%i2K55p}XewXBUUlZFjpBgl~Sw zaB!MsIMe66I2x(UO@|Y8wteDplO`~&v8bLd^CHH72TN!j<702&*W;x?Ap3$ddLRlau>2KwCYhvQJl(FrdZmokh3ckYh2BRsxbS;iE$LFjoj0c!ILR z-L%g?5JDB)q`;f3bZ)l{${glz3pGMCZbsEW7O zmzN`BDt%e-pj$Va@DfKy`XyQ$Ly|? zxIkNIU;0q-QmF{FQfVndP*qS>6-B6O5f8L4@X{9bsk~HuqpDP-RwC)|KX=kF@6^Py8$?sk?tr%qq!tPEXGa4zu67aV69 zCxTO_PoFjy9f#A;$~iOwpFr!SOx{fZQ|g=tXwJ_EE&whBJ_lR`Tnt&W_d=a<| zxE%Nra0PHBa22o$xCXcyxE5FgtOl+Ft_QvhB!RWS4Zw|n_(*Vb==>ZS%5##`eU8Vc z!d&z_MUEwBmeG%2u7qQ3$CtNxtgHC5Q!ka?O{m@uF$858jGlAU*$wt_&ib8`=0?o# zE73p}zm72<^Lbr$H#nP}9;c6E7vI~Q+xhP1yo<99d@`IJnxk?AYG<4><7CSn&a#B? zN+#ms59`bM;m?9O54aY+Bm9zI>EXEeS5Wt`1eIcCPDfpjEC0eNeIfam9*_=@{7Vn0 z=`x@;CI8X`7EitWiw&#}kWNuO=^|TS$FK1FHefw)JCFjt3UmP*fNntbdV=F-j$4BB zZ5;0awgYzpcL8?;_W(P9UZ4+10~w$n7yxzxyMW!my}*6IATR{%0rmpJ!2Q5JAPbBD z`+)<%LEr)4LEs_aVIT)Q0z3*F0v-eMz+qq%7y~r3bNF zC;_S?t~?%`pWrA-`Udbd;0fT{z*E38fa-sf{VV^S=N}RyEKx~-N4)rKB7H|Lp_S)3^6 z@|BY37RqihH#D1^tD_%%o_DOAJJ6R*?dc!!AF3R2&5z+izB2BWrf6o=qqY9AT-qCR zbLk_8y1SG9>4GE;KL`bsn9BW^i2l%FgP@JOoUmVGU@^3LK+p&)jn9Ew3;YWJRz z{(U3;>0P;uTRv9trooq=uDGRScelasBgk49lY{GLog{K1TX788&cWk-T*?BjZ1f`sNn|7M6u2&(UV>|r&PI-^ z+s}87c0G=+e|Chr)4oo#fgKPr20W<0#E5Ji_1lehN7_Oq<5GJoBdy z|L}vu?L@peN?YxKh7n3mqD-mfz~{>rfrRsuWQVAFA_Y> z+)ZK~<@HRWGm5@7PGf)fV5fIur|-glsPe;Fyo3xorVpOiJ$Z5Kp=uxUkmkC*a>&Os zf`m-N^J?QD?Ms_^&IvTkK%lqE+*ywV4f6a5SNGD=kYC@(myxcu^eePB4$c$))#$J4 z{O$*vWLa8Gy_C*!>9wvFxn@Qo?`65y#H?UdiTM<;ev*Z!Jpiq?h67yVP`(%`rzIIazj zHw4G7;Mfx!*9FHLgX2xX(X?iKG{gV3^AgoxYjtwWPstw}mpPQ(IYv*9V|h}}CeCDU z#<@Sks8qOig1!~G+s$aol1*|~)}?~=8{92Vt5YS=*yGyy6K9BekN%aIQJtrJ$tcsa z3Hm24GnP^PlXu#={mc7vW2LZ4wK%bJsg{>iKP%B%tkulO&p)^Nn1#10e2h+N&3E~Z z?p;0K$+AStk5*{s)-3hX6Iqohyr=?}Z#OzY{<)E^O#k3+=>@H9O}`8$PXszOiFTdj zIgN+WHPV*y&WpabNn%05?N0_ZqwG^_J)MO%X<<>Cf);6Vm$Naj7kn!u%PLy6nm4qb zxs~V!Ll>}#?=9GbE%dUMk_Vut5J^X7N$C(z$}jR5rzy@Aw~HDbEj*WQbgYLGMTw#? zOGil~pD3EMbogs|F%|M9qsFFpNomXY(ri4Ri3YB*IzSPXTHddHPO^7#L>>9Bd0#RW z53Fxtl6&$)+0{0UG+KQWrm=JM zv|{G992}+9!?d3b9a_(^VS0M$!P4o}TK!}7XgfU>rnl2h#1N3(UZ7+R)nD3KFrF8ajUu#$Q*-Y)m@3ri_X(naw;^J5MWJS=F@hKH8A0=8L z`{)v5QZ(FJouFcqgT`NYZD~@i=JIlW{YRVpl=d4A*%NM|z&^@=SFH3-Pq*3S@ZxMb zECA_ja=7Fjbw?|?eQw#CDUG`2=xvrq7Keagx0udPx9{&F?doW7GX=)DG}UH+AEbZb zoh$8hRX45j1+!_ju@v613U-jT=H|C!a z6=Nw9>B!Q18^>+c82EktFaI|#e&u1U3}X1=pXUMN$#vd7FQie1vCiVl>Ta^E^eAIw z?Wn1@@Nc!Fyb3c8ts-BI@vLOcN;S#cRd-yH{%-aG+RZ_4i90#?S@C&ggFN{uW7L=x zh!KtZ_$*%g`)uJiR4sk~C0V14hjzo1d9YX|5T%;t&g5E6Lv4PnbP^Kbzssk?34L|N z=yF`~)29>5oJ8);Iq7)q;Wt;j%Wq>YLc}%KKZ-5NBQCV0K>E+>{wOVQ?zu)oLx!MgO($Zs)-7RGY7xxi5RA5-bD0mw19S$c=P=GXd}n zpG|C?Z{*s5pA^|cI9#caw-e-7JtayiO>%?AeF*xsqdMtpzPzvHX0V`k1eJB?^Cww& zJ=9+yDm3W;WNl_ge=7uRgOsQI2 z-)biLInv0M$Bmqg!%Guf)o#AM(}3E)fc($ljw}DS^5pSA2ku439fgCn%T+Jq2jH`I zh4p_z@$32Yes)`w+@osHdVe1$O-}pE_>;YxQqTL2n{`RsCI`an_C( z6*1~X_i28Q!^>%ScYCrNTt^`50W)OOL2o4v-^cV?F75Pg={R+|T6qIbUvsLs%jumvrLMqI0ea9%=G zhE z#0_TUw>n`){7h-LnYoSa*gK6myEa?O@TIlU@`KEtvew_Fz@m!3S{Lb`>!@-y5Lf?f zqVCHSqPj8xGRHR`L3{4-_rY4s>+b>XE+XlPv+|9Rt=Rl7whmeMSHyV-hMv5Dv$?n5|) z-Q1J?(&)9z%oT@5OSk;lH#<_g2cTG)m&%?od0kNwF5jlJw3FsUQdSD|Q}eNxpZ?2^ z8hg<$%EP;*QKO!K@^?Cl@+{t*ymcep#wy50Sk7t2|B5HR)logEzI`F>G)s?67Fe?$ z=v{=)nu`%A4tq+~9<}a?R*r9U)Lf)}4^Mu{6xLGl2+L26zJ^w2zwIdMt)CR7NtXm93w>>gvOvmbPE37qI@Aq*cWLRcxM-%|FVr&X%{Q2&STf?N(q5S^pdb zuibxbwf@>b#HU@+`cwP4+Ru)={`08&LC~<`xn-gbdOu59+=@0-f_rfetH3YMS2i*( z{_y(OzGt>j`KyhBEY!<-c4qTFt(w#Wl{h^&bxPUUa>XTSCU$zsV~dn~F;lL1Q^T#j z$A517$y1sct*T7V>igyv+vgbN7l-1kSC};Ks)tav=KsxYCt@M-mt(ZrBc`Ra#=pf> zYVj@ntGO@#DlX?}*ZrLqZO-?Wo!Pkf=i7d}`e%ZFe($`pu%oTIoQ3YO*jJQu#Gg{xpc>4}2>)>io0v|1$#B|EGC$alDMQ=gs+KE&mV4 oaCq~7cxkpK{_&baA6Rc!^AuN7qU%+oXU*`L^=b6e=l<3I0vE|psQ>@~ literal 0 HcmV?d00001 diff --git a/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj b/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj new file mode 100644 index 0000000..63467e2 --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {43F65DD5-34F9-47D0-A439-2018F561899A} + WinExe + TexturedBrushes.My.MyApplication + TexturedBrushes + TexturedBrushes + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + TexturedBrushes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + TexturedBrushes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj.user b/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 28/TexturedBrushes/TexturedBrushes.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/AnchoringControls.sln b/Code/Chapter 29/AnchoringControls/AnchoringControls.sln new file mode 100644 index 0000000..32aba56 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/AnchoringControls.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AnchoringControls", "AnchoringControls.vbproj", "{ECBE7544-B732-42B9-AD36-178BAACC4770}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ECBE7544-B732-42B9-AD36-178BAACC4770}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ECBE7544-B732-42B9-AD36-178BAACC4770}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ECBE7544-B732-42B9-AD36-178BAACC4770}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ECBE7544-B732-42B9-AD36-178BAACC4770}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/AnchoringControls/AnchoringControls.suo b/Code/Chapter 29/AnchoringControls/AnchoringControls.suo new file mode 100644 index 0000000000000000000000000000000000000000..b028d8607ed9ffe1e99f91466667270e4d42f5af GIT binary patch literal 26112 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 rjo-;+hDcdtQ%bEy*VTPnV$ae_>n~wW + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {ECBE7544-B732-42B9-AD36-178BAACC4770} + WinExe + AnchoringControls.My.MyApplication + AnchoringControls + AnchoringControls + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + AnchoringControls.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + AnchoringControls.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/AnchoringControls.vbproj.user b/Code/Chapter 29/AnchoringControls/AnchoringControls.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/AnchoringControls.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/MainForm.Designer.vb b/Code/Chapter 29/AnchoringControls/MainForm.Designer.vb new file mode 100644 index 0000000..8e270be --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/MainForm.Designer.vb @@ -0,0 +1,175 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.ancBotLeft = New System.Windows.Forms.MenuItem + Me.ancBotRight = New System.Windows.Forms.MenuItem + Me.ancRight = New System.Windows.Forms.MenuItem + Me.ancTopRight = New System.Windows.Forms.MenuItem + Me.mnuDock = New System.Windows.Forms.MenuItem + Me.dockTop = New System.Windows.Forms.MenuItem + Me.dockBottom = New System.Windows.Forms.MenuItem + Me.dockLeft = New System.Windows.Forms.MenuItem + Me.dockRight = New System.Windows.Forms.MenuItem + Me.dockFill = New System.Windows.Forms.MenuItem + Me.dockNone = New System.Windows.Forms.MenuItem + Me.btnTheButton = New System.Windows.Forms.Button + Me.ancBottom = New System.Windows.Forms.MenuItem + Me.ancNone = New System.Windows.Forms.MenuItem + Me.ancTopLeft = New System.Windows.Forms.MenuItem + Me.ancTop = New System.Windows.Forms.MenuItem + Me.mnuAnchor = New System.Windows.Forms.MenuItem + Me.ancLeft = New System.Windows.Forms.MenuItem + Me.mnuMainMenu = New System.Windows.Forms.MainMenu(Me.components) + Me.SuspendLayout() + ' + 'ancBotLeft + ' + Me.ancBotLeft.Index = 7 + Me.ancBotLeft.Text = "BottomLeft" + ' + 'ancBotRight + ' + Me.ancBotRight.Index = 8 + Me.ancBotRight.Text = "BottomRight" + ' + 'ancRight + ' + Me.ancRight.Index = 3 + Me.ancRight.Text = "Right" + ' + 'ancTopRight + ' + Me.ancTopRight.Index = 6 + Me.ancTopRight.Text = "TopRight" + ' + 'mnuDock + ' + Me.mnuDock.Index = 1 + Me.mnuDock.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.dockTop, Me.dockBottom, Me.dockLeft, Me.dockRight, Me.dockFill, Me.dockNone}) + Me.mnuDock.Text = "Dock Value" + ' + 'dockTop + ' + Me.dockTop.Index = 0 + Me.dockTop.Text = "Top" + ' + 'dockBottom + ' + Me.dockBottom.Index = 1 + Me.dockBottom.Text = "Bottom" + ' + 'dockLeft + ' + Me.dockLeft.Index = 2 + Me.dockLeft.Text = "Left" + ' + 'dockRight + ' + Me.dockRight.Index = 3 + Me.dockRight.Text = "Right" + ' + 'dockFill + ' + Me.dockFill.Index = 4 + Me.dockFill.Text = "Fill" + ' + 'dockNone + ' + Me.dockNone.Index = 5 + Me.dockNone.Text = "None" + ' + 'btnTheButton + ' + Me.btnTheButton.Location = New System.Drawing.Point(169, 98) + Me.btnTheButton.Name = "btnTheButton" + Me.btnTheButton.Size = New System.Drawing.Size(120, 40) + Me.btnTheButton.TabIndex = 1 + Me.btnTheButton.Text = "The Button" + ' + 'ancBottom + ' + Me.ancBottom.Index = 2 + Me.ancBottom.Text = "Bottom" + ' + 'ancNone + ' + Me.ancNone.Index = 4 + Me.ancNone.Text = "None" + ' + 'ancTopLeft + ' + Me.ancTopLeft.Index = 5 + Me.ancTopLeft.Text = "TopLeft" + ' + 'ancTop + ' + Me.ancTop.Index = 0 + Me.ancTop.Text = "Top" + ' + 'mnuAnchor + ' + Me.mnuAnchor.Index = 0 + Me.mnuAnchor.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.ancTop, Me.ancLeft, Me.ancBottom, Me.ancRight, Me.ancNone, Me.ancTopLeft, Me.ancTopRight, Me.ancBotLeft, Me.ancBotRight}) + Me.mnuAnchor.Text = "Anchor Value" + ' + 'ancLeft + ' + Me.ancLeft.Index = 1 + Me.ancLeft.Text = "Left" + ' + 'mnuMainMenu + ' + Me.mnuMainMenu.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuAnchor, Me.mnuDock}) + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(459, 237) + Me.Controls.Add(Me.btnTheButton) + Me.Menu = Me.mnuMainMenu + Me.Name = "MainForm" + Me.Text = "Anchoring and Docking Controls" + Me.ResumeLayout(False) + + End Sub + Private WithEvents ancBotLeft As System.Windows.Forms.MenuItem + Private WithEvents ancBotRight As System.Windows.Forms.MenuItem + Private WithEvents ancRight As System.Windows.Forms.MenuItem + Private WithEvents ancTopRight As System.Windows.Forms.MenuItem + Private WithEvents mnuDock As System.Windows.Forms.MenuItem + Private WithEvents dockTop As System.Windows.Forms.MenuItem + Private WithEvents dockBottom As System.Windows.Forms.MenuItem + Private WithEvents dockLeft As System.Windows.Forms.MenuItem + Private WithEvents dockRight As System.Windows.Forms.MenuItem + Private WithEvents dockFill As System.Windows.Forms.MenuItem + Private WithEvents dockNone As System.Windows.Forms.MenuItem + Private WithEvents btnTheButton As System.Windows.Forms.Button + Private WithEvents ancBottom As System.Windows.Forms.MenuItem + Private WithEvents ancNone As System.Windows.Forms.MenuItem + Private WithEvents ancTopLeft As System.Windows.Forms.MenuItem + Private WithEvents ancTop As System.Windows.Forms.MenuItem + Private WithEvents mnuAnchor As System.Windows.Forms.MenuItem + Private WithEvents ancLeft As System.Windows.Forms.MenuItem + Private WithEvents mnuMainMenu As System.Windows.Forms.MainMenu + +End Class diff --git a/Code/Chapter 29/AnchoringControls/MainForm.resx b/Code/Chapter 29/AnchoringControls/MainForm.resx new file mode 100644 index 0000000..a6a1dba --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/MainForm.vb b/Code/Chapter 29/AnchoringControls/MainForm.vb new file mode 100644 index 0000000..f2d442f --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/MainForm.vb @@ -0,0 +1,83 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + +#Region "Menu handlers" + Private Sub ancTop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancTop.Click + btnTheButton.Anchor = AnchorStyles.Top + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancLeft.Click + btnTheButton.Anchor = AnchorStyles.Left + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancBottom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancBottom.Click + btnTheButton.Anchor = AnchorStyles.Bottom + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancRight.Click + btnTheButton.Anchor = AnchorStyles.Right + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancNone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancNone.Click + btnTheButton.Anchor = AnchorStyles.None + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancTopLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancTopLeft.Click + btnTheButton.Anchor = AnchorStyles.Top Or AnchorStyles.Left + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancTopRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancTopRight.Click + btnTheButton.Anchor = AnchorStyles.Top Or AnchorStyles.Right + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancBotLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancBotLeft.Click + btnTheButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub ancBotRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ancBotRight.Click + btnTheButton.Anchor = AnchorStyles.Bottom Or AnchorStyles.Right + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockTop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockTop.Click + btnTheButton.Dock = DockStyle.Top + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockBottom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockBottom.Click + btnTheButton.Dock = DockStyle.Bottom + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockLeft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockLeft.Click + btnTheButton.Dock = DockStyle.Left + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockRight_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockRight.Click + btnTheButton.Dock = DockStyle.Right + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockFill_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockFill.Click + btnTheButton.Dock = DockStyle.Fill + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub + + Private Sub dockNone_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dockNone.Click + btnTheButton.Dock = DockStyle.None + btnTheButton.Text = "Anchor: " + btnTheButton.Anchor.ToString() + "" & Chr(10) & "Dock: " + btnTheButton.Dock.ToString() + End Sub +#End Region + +End Class diff --git a/Code/Chapter 29/AnchoringControls/My Project/Application.Designer.vb b/Code/Chapter 29/AnchoringControls/My Project/Application.Designer.vb new file mode 100644 index 0000000..10d73f6 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.AnchoringControls.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/AnchoringControls/My Project/Application.myapp b/Code/Chapter 29/AnchoringControls/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/My Project/AssemblyInfo.vb b/Code/Chapter 29/AnchoringControls/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..dbba0fe --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/AnchoringControls/My Project/Resources.Designer.vb b/Code/Chapter 29/AnchoringControls/My Project/Resources.Designer.vb new file mode 100644 index 0000000..07f30f4 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

+ ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("AnchoringControls.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/AnchoringControls/My Project/Resources.resx b/Code/Chapter 29/AnchoringControls/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/AnchoringControls/My Project/Settings.Designer.vb b/Code/Chapter 29/AnchoringControls/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f18eca3 --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.AnchoringControls.My.MySettings + Get + Return Global.AnchoringControls.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/AnchoringControls/My Project/Settings.settings b/Code/Chapter 29/AnchoringControls/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/AnchoringControls/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/Buttons/Buttons.sln b/Code/Chapter 29/Buttons/Buttons.sln new file mode 100644 index 0000000..ea31000 --- /dev/null +++ b/Code/Chapter 29/Buttons/Buttons.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Buttons", "Buttons.vbproj", "{1C23C51F-6507-462E-8885-779A240BD245}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C23C51F-6507-462E-8885-779A240BD245}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C23C51F-6507-462E-8885-779A240BD245}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C23C51F-6507-462E-8885-779A240BD245}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C23C51F-6507-462E-8885-779A240BD245}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/Buttons/Buttons.suo b/Code/Chapter 29/Buttons/Buttons.suo new file mode 100644 index 0000000000000000000000000000000000000000..6894c286761dd8262362f8bae6ae94bf0e275560 GIT binary patch literal 15872 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 sAK5=*BdZN&c2sTa + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1C23C51F-6507-462E-8885-779A240BD245} + WinExe + Buttons.My.MyApplication + Buttons + Buttons + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Buttons.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Buttons.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/Buttons/Buttons.vbproj.user b/Code/Chapter 29/Buttons/Buttons.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 29/Buttons/Buttons.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 29/Buttons/MainForm.Designer.vb b/Code/Chapter 29/Buttons/MainForm.Designer.vb new file mode 100644 index 0000000..bbfbd8e --- /dev/null +++ b/Code/Chapter 29/Buttons/MainForm.Designer.vb @@ -0,0 +1,92 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainForm)) + Me.btnImage = New System.Windows.Forms.Button + Me.btnStandard = New System.Windows.Forms.Button + Me.btnPopup = New System.Windows.Forms.Button + Me.btnFlat = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'btnImage + ' + Me.btnImage.BackgroundImage = CType(resources.GetObject("btnImage.BackgroundImage"), System.Drawing.Image) + Me.btnImage.Font = New System.Drawing.Font("Microsoft Sans Serif", 20.0!, System.Drawing.FontStyle.Bold) + Me.btnImage.ForeColor = System.Drawing.Color.Black + Me.btnImage.Image = CType(resources.GetObject("btnImage.Image"), System.Drawing.Image) + Me.btnImage.Location = New System.Drawing.Point(18, 207) + Me.btnImage.Name = "btnImage" + Me.btnImage.Size = New System.Drawing.Size(312, 72) + Me.btnImage.TabIndex = 7 + Me.btnImage.Text = "Image Button" + Me.btnImage.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'btnStandard + ' + Me.btnStandard.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.btnStandard.ForeColor = System.Drawing.SystemColors.ControlText + Me.btnStandard.Location = New System.Drawing.Point(18, 95) + Me.btnStandard.Name = "btnStandard" + Me.btnStandard.Size = New System.Drawing.Size(312, 88) + Me.btnStandard.TabIndex = 6 + Me.btnStandard.Text = "I am a standard button" + ' + 'btnPopup + ' + Me.btnPopup.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.btnPopup.ForeColor = System.Drawing.SystemColors.ControlText + Me.btnPopup.Location = New System.Drawing.Point(178, 39) + Me.btnPopup.Name = "btnPopup" + Me.btnPopup.Size = New System.Drawing.Size(152, 32) + Me.btnPopup.TabIndex = 5 + Me.btnPopup.Text = "I am a Popup!" + ' + 'btnFlat + ' + Me.btnFlat.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnFlat.ForeColor = System.Drawing.Color.Blue + Me.btnFlat.Location = New System.Drawing.Point(18, 39) + Me.btnFlat.Name = "btnFlat" + Me.btnFlat.Size = New System.Drawing.Size(152, 32) + Me.btnFlat.TabIndex = 4 + Me.btnFlat.Text = "I am flat..." + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(349, 319) + Me.Controls.Add(Me.btnImage) + Me.Controls.Add(Me.btnStandard) + Me.Controls.Add(Me.btnPopup) + Me.Controls.Add(Me.btnFlat) + Me.Name = "MainForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Fun with Buttons" + Me.ResumeLayout(False) + + End Sub + Private WithEvents btnImage As System.Windows.Forms.Button + Private WithEvents btnStandard As System.Windows.Forms.Button + Private WithEvents btnPopup As System.Windows.Forms.Button + Private WithEvents btnFlat As System.Windows.Forms.Button + +End Class diff --git a/Code/Chapter 29/Buttons/MainForm.resx b/Code/Chapter 29/Buttons/MainForm.resx new file mode 100644 index 0000000..09b1ac8 --- /dev/null +++ b/Code/Chapter 29/Buttons/MainForm.resx @@ -0,0 +1,1232 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + Qk0mAQEAAAAAACYBAAAoAAAAAAEAAAABAAABAAgAAAAAAAAAAAASCwAAEgsAADwAAAA8AAAA/////3N7 + zv9rc8b/Y2u9/2tzzv9ja8b/a3vO/2Nzxv9jc87/UmO9/3OEzv9re8b/Y3O9/1Jjtf9CWrX/Y3vO/1Jr + vf9Sa8b/SmO1/0pjvf8YMYz/a4TO/2N7xv9Sa7X/MVK1/ylKrf9rhMb/UnPO/0prxv9CY73/OVq1/zFS + rf9Sc8b/Smu9/0Jjtf8pUrX/Y4TO/1Jzvf9Ka7X/SnPO/0Jrxv8xWrX/KVKt/2OExv9Sc7X/UnvO/0pz + xv9Ca73/OWO1/1J7xv9Kc73/Qmu1/0p7zv9Cc8b/QnO9/zlrvf8xY7X/UoTO/zlrtf8AAAD/JBYkFQ8g + LQcQIBwiECAQICAgIAgPJBUGDzEPIDERIBAiIR0mECUgLRYkJCQgJA8gDyAgDyAgIDEWGyQWLQckJA8z + ICAgICAHLTEgCw8bJA8VFjkgICAkFiAtKyQtICAkOSQkJBUVDzkkJAstJBYgJCAWMSAkFSQtKwckJBUV + JA8gETEaGzExICAgICAxMSsPFiAGJBUVFSQgJCQkDy0WDy0WMQ8kDysVDxUlIA8gMQcrJBUkFRYkFiQV + FQ8GJBUWLTEgBw8xJCQVChUkFRUVCiQKFRoIESYiHjciIi8hJCQkChUVChUPISIrFRUVJA8rICAxIBcR + JSArICQVJDEPDyUgDBAgKyAkFhEQIRUPIBAgIDErMS0kKxsrICQkFSAPIBIhICAGFSQkIBUbDy0tKy0P + JCUHICAuJDEtFiAgJDkrEzMtMSA5FisICjkVFSQkLQ8gIS4tFjEgJSAgOSQkJBUWJBUGJBUVFiQPJCQV + MSQkFjEPJBUVDxYWDxYVDwYkFiAxBw8kLSsHIDEIJQgWJCArDw85JCQMLQ8kFRUkICQPJAwILQ8bDDEg + IBUkFRUgDzEHJCAtICA5JCQkKyAWLSUHJCQVICstDw85OQoVChUVFQoVChUIIBIeIhAQIBYxJCQKFRUK + ORYgLSsPOQg5CCQgIAcgIBYgDxUVFS0WKyAuMRYxBy0WDw85ISAgIDEQICAxIAgrLSQxGwYVJAoVFQo5 + JBUVJCAgIA8kFTkkFSAlJBYgORYkORUPKxsrDyAPFi4vIQgkJA8gMTkVJCsHJAYQIBAhIBAlDyARLyAK + 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 + MQcWICs5LSQtFSQVFQokFRUKORUVFSQVDxYgIDEHFiQVJCQVFRUVLRUkDzkPFRUxMRYtDyQLJBUVFRUk + ORUVFRAeHjouICQHKzEkFjEgIBYPIBUkOSAQEBYKJAokJA8kJCQtJA8POQggIBELFQoVCjkTIiIvIBAQ + JSAlGyskFTkgICsWJBYkJBUkJA8rIBAQICEhJSQgKwcrMRsWJCQVORUkDy0KJBUPKwgWKzEPJAcWIBYg + MSskFg8WDysVORU5FRUkFQ8kFRUVJBUVDxEhLiAHMQ8VFSstFS0GJCQVFSQbOQYkFSQVFTkKJCAgDxUV + ChUkDxUkFiAhMiExFjkPIA8gMQ8HIBUVFRUVJBUkFQoVFQokFQoxIAckIC0xDyQkFTEgMS0VJCQWJCQV + FSQtLRYcKyAkMSQ5DzkVChUkFRUVAhAeHhwlLiAgDw8WICsIFTkkJAcgEC4kFTkxDwM5FhUtFjErGxUV + MSAxJBUVChUVFQ8hIiERIBEgMSQkJA8PMSAgDxYVFRUkDxYhICAhISIiICAlICAgIBExFRUVJBUPFisP + LSsGKzElByAHKyAlISUgKwcgIBYxFSAgJBYkFiQtFg85FRUVFSQkFQokGhsVJBUPMSAxBw8kFiAkJBUk + FRUkFRUVJBULLQskFTkVJBU5FSQWDyAHBw8GFg8tFSQkJBU5JCQVCgokJCQkFQoVChUVFSQPDzkVFSQb + JCQPJC0kDyQPKyAPDzkKFTkVJCAlDxUtFiQPJBUVJBUKFSQtMS0VEBIeHx4fKR4mHCAxFRUVJBYkMRsV + FSsgKy0HDyQGJCsbFiAVJAccLyAPFRUkFQoVFRYlISEQIBYxBjErJBUVFi05FQ8xDysHESEhERAQExAQ + LhAQJREWJCQaJCQWJDkGKw8WICAHGysgICAhCSUhECAgDCAgJSAlBzEIFg8kFjEVFRU5FQYkDw85FRUV + ChUKJBYrBy0VMTElIC0VDyQPBhUVJA8PJA8rFSQWByAuFiAQORU5JBU5DzkkBiQVFRUkChUKFSQVFQ8k + FRUVJBUVFSQbJCQVFTkKJBUkDzEgJRYgECAlICQkFRUVFRUVOSAkCiQlECAVFRYgMSQVKxskDxUkFRUV + ByESHiEWJBUVDyQPMgcVLQ8bFhUrMQ8gLSsPJDkgFQokIh4HJDEkFSQVChUPICAQITIhECAxICAHJBUx + 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 + KyAgFQcPFiAPJAcREBAgIBYHIBAQMSAgBw8rICAlEBEgFRUkJCQHERAzEiEhECEgDxY5FSQPFiQ5DyQk + FTkPLSArDyAgETEgMQ8xIDEPJCQ5LSAkICAWMSQVJBUVMSAQEBAQExAlCCAhMSArDyAgFiQVFQ8VFTkW + JBYkFRUaJBUVJBU5FRUtDw8hIi8hIBAgICAWJAgxICAWESAgICUILRYWIBYWKw8VFQoVJBUtDysVDyQt + JCAgICAlEBAQISAgJCQVLSEiJSElICUgECQxDyQVOSQkCgoKFRUkFSQkFTkkFSQVFRUPGysVLSQxICA5 + FRUVFSQkJBUVFQcxOTEVDw8VIA8kICExBzkkFTkPJCAuLxAuECAgGysxDyQIOSAgJQ8kFRUGDzEgBxAh + HSIgKxskFRUVOSQgByAkFQoVJCAPCDEMICUHIDEWORUIDxUkFTEVIA8rDyQ5FQ8VJA8VFSAgICAQEDEg + BxAlGxUVFRUkFRUVMSAWIBEgKyQVDzkVFSQVChUVDyQVJBYSHiIiEBAgORUkBxAQESEQAyAlEBAlHDIR + MRsVFSQVChUVFTkVFSQVFQ8rIBEgIBAhJSArDyQVFRUPEBEHFiAPMTEVJCQVFSAkDyQVJA85IBYPJBYr + DxUVJCQxKyAPJBUWCCsgDxYtBzkkLRUVLSsPJAYkKw8gMSUgMQsWDw8lGwoVCg8gIhAmISEQMiAPORUV + FQYkFQ8rDyQWJDkkDyAVIiIlIA8VJBUVJA8kDw8HDzkkJCQKOQwgOQcxKwcQBw8kOSQPByAWJCsgBxsW + DysbOSAkJAY5MRAgICEhISEkJBY5JBUVDxU5DysHFiAHDBElIBYKORUkFRUKJBUVFRUkFRAOISEgFgcx + DDEuECAkFiArESAgESYSIRAgICsVFRUVFRUVJBUVCiQtDwcgIRYgFQ8WMQ8kJAoVFTElMQgMIA8PJA8k + MSAQICsVFRYVFiA5IBsPMQ85FTkGDyArGiAWICQxJDEgMTEWMSQWJCQgDy0WFQ8gKy0gIBEvIBAhESAW + JCQkIBATERAQISEQBw8kByQkFhU5JA8xIA8WByArIBAHIAgxJAoVJBYPIA85JCsPJBUkOSQkCBUPGw8x + DyQkLRYkKyALICURJTExKw8rICsIFjkVFgcQIBAhCRAgFiAxFRU5JAoVJAcgIAcxICAgJSArLRUVFRUk + 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 + IBskByUHBxYgJBUgICAgIDEVChUVChUkGxYxIA85Dy0tKyAWICEuBxsxOSQVDysPCxsHDyAHICAkFRUV + FRUkICUcIA8VFSAvHQ4iEhMgIDEWFiAgMRUkFSQVJCQkORYrBzkWKy0rFRUkFSQVJBUVFRUPORUVFRYx + BxYPLQg5JCQVChUVCC0VFTkkJBUtFTEkDyQWMRAgICsWKy4rICYNICAWERAROSQkFSQVFQokOSQVFTkV + Dw8WJBY5FRUkFRUgHQ4hLiAkJA8xICQtJA8gKxUVJBUPIDEgKyAHIBYPKw8WBiQHICUgGyAgICQWFhYP + JAYkFiAgICAgICAhIBYgMSslJS4gGxsyMSQkFS0rGyAbFiQVFQoVFSQPICAWFRUVBiQVDxYQIi4gDw8H + MQcWLSQgJCUgByAgDyQKFS0VFSQtDyQVJBUVIBMSIDEMDzEgMSAWMSAWFQ8PLQ8rJSAPFRYHIBYkDyQ5 + ChUkFSQVJBUkFQokJBoVDyQVFRUVCiQVChUKFQoVJBUVFTkVFTEkFg8xDzEgDCAgGyAgICAcIRAgFiAg + IDEPLRUkJCQkJBUVFRUVDysgDyQPJAoVFSQVBhM3IiEQICQPJCQkCzEPDy0HMSQ5KxUxDyAgISAgFSAg + JDEkDyAHICUxIBYgDyQtKw8xFRsrISEhECEhFiAxIDEHIBYPFRUVMQggBxUVFSQkFTkPLRUVJAoVBzEl + ICsPIBYPIDEVDyASIiIvECAPMQcyFg8gDzkHFS0rICQVDzkVFTkVCgoVOSQVFSQkFSQ5FRUPCAc5ICAL + JRoWIActKzEHJBYkICsVFRUVJBUkJBUVFRUkFRUVDxUVFSQVJBUVCiQVJAoVChUVChUVJA8gJSQVFiQM + DyQgEBAiLwchISUlIDEPIDIIKyQGLTEIDzkxIAYPMSAgBys5FSQVJBUVJCQkEg4dICAgICQVJA8kBhUP + KyAgBw8xJCQVFggrByUgIActIBEgJC0PORsrICsgByAlMRYrLQcgKyAgByAgLiAgMSQVFSQrMSAHKy0k + FRUkJBUKFRUVJBUVFTkHIBAlICUlDwckJBUkCCEhEA4iICQgByAHKxUkFSQGICAMJBYVFRUVJBUVJCQK + FRUKFQ8WFRUrFSsxAQcrICAgIAIrMQYbKzEHBxYrDzkVChUPDxUVChUkFRUkFTkVFQoVChUVChUVChUK + JAoVCiQVChUVLQYWJAcgIBAlIAcQECAQGw0QECEgFisILSQPFSQKFSQkDysxORU5FjkPDxU5KxYVFSQk + FSQhIiEgICsPMQ8PLSQkOSQkFjEkFSQkICsgFg8gFiArDBYxGxYkFRUkGyAgIDEgICARCDEIMRsxCCQg + FiAlESUgDy0gICAQICAaLSQkDw8VFRUVJCQVJCQPFiAgERARIRAgJBUkFRUlETEPISYuIBwgIC0PIBYk + JCsgICAgMQ8kKy0kFRUkFRU5FRUPMTEIMQ8HDxogESUgICAgByQlIQcgBisRJQcVJBUkFRUVCiQKFQoV + ChUKFRUkFRUKJBUKFRUKFRUkFRUVChU5FSQ5FQYxICAhESUhMQggEDEgIA8PKw8tFhYgOTkVJBUVMQ8g + CBUVFQ8PFjkWJA8rJCQVFRUVFg0iLiAgIDEgJA8kDyQgFQ8VICAgLhAHFiAxDysgIBsPICQkJCQWFiQV + JBYuFisgISArLSQVJBUVFQgcISEhIRAlIRARECAgICUgJBUxGyQKFSAMOSAkJCQxJCsRJQcxMRY5FjEP + LRUQECAhMiEmIBYkCysbJSAGDysgJBYgCCQkFjEgMTEPKysgJSAVKxUkKxslICARMQcQJSAgJRwgKyAt + Fg8yKw8WDyQVFRUVFQokFSQVJC0VORUKFQoVJAoVChUVFSQVFSQKFQoVFjEkFRYbFiAgBiQkOQcPJBUV + MSAhIDEkFRUkFSQkJCQPKxYgJC0kOSAxDyQgIDkVJDkWJC0RLxIgIBAlIAc5Dw8VFTkkKyAgFiAgDCQH + ETEkByQWKyAMICAxEQ8kORYgJCAgICEhIBUVFRU5FRUVFiAQIRIvISAxIDEgICAgICAxGiAxFSQ5IAcl + CBYxDw8kICAuBw8kCyARKxUVFS0iHh4eHSEHJCAHMiAHKwYtBzExJTkPLREQETIJIRsgETEbFRUkKyAW + ECAlMSUgKxYrBxAgGg8HKxUrBgcxJCQVFQoVJBUkFRUaIBYWFSQVFSQVFRUVFSQVJBUVFRUVFRUVJA8l + ECQVFRUPKw8kFRUVIBYgFiQxDxYVLRYkIBYxBhYWIC0WMSAWKxYVJCsWIBElBgcWDy0VDyEvIRwgIA8W + DxUtKxYrFhsgIRMMKyAHMSAWIBYWIC4QJSEQIDElFhsIFiUJISIiFistFSQkJBU5JCQgISIQIhAWDy0Q + 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 + IBYrGyQVBjkkICsgICUgFg8kFRU5FRUVFTEWDxUkFRY5FisGICArIDEPDw8rDyQxJAgxICAVJCQVFRUK + FRUKFQoVJBUVFSQVCjkPJCQtJBUkFjkVFRUKFQoVFQckJBUkFSQKJAckLRUkJA8kJBUVChUkFQY5Fhsk + LSQgICUQISETMRUKJBUKFRYPJCQkMSEiMhMwHiISMCIgOQ85FSQVDyArGwsxIDExFS0VKxYWKysxFiQV + Dw8aDxYkFSQHJCAgICsPFRUVCxYtFQsPFiAWICAPJQ8xGwYWKyAlIBsgKy0rByAWDy0kFRUkFRUVJCQV + CiQVFRUkJBUKDzkVKyAxJRAgIDEkLSsVBwcgICAxCDkVFSQPFiQVFSQgDyQKFSsxDyAuFjEbFhYgFjEW + Gw8xDyQxMSArJCAlJCsVJBUVCiQVCiQGFhUkFRUVFSQVFRU5FSQGJCQ5JBUVFQoVJBUVJA8tFRUkFSQk + FRUkFSQVJBUVFRUVFQYkFhUPMSAQMRYkFQoVFRUVJBYrDwcuEyIeHyofHx8YHx4OIhAxFRUVFRU5GyUk + FiAQIQcVFS0gMQgVFQYkFiQVFRU5FRUVFQcrIBYHFTkVFRUVJBU5FisPKxElKw8HKxYrCDEgDyQtJA8W + FhsWFjkVFSQkJCQKFQoVChUVFTEWMRYVFQYrDyQbJSARKxYkJBUPDzkgFiQPJDkVFQoPORYrLSAHMSQ5 + JBUVJA8WFRYWJBYkByAxICQWFQ8xByAHLiAgICAgLSQtFSQVCiQKFTkPFRUVFSQPJA8KJBUtMSQWFRUk + OTkkFRUGChUVFRUKFRUVFRUVFSQGJBUVJBUkFSQkDzEWMQ8WGyAgFRUVFRUPKwYgGyAgECEQEBISHiIS + DRMhEyEhLhUPJBUVFQ8PCA8gECAxDysVJDEVFRUVFSQVFTkKFRUkFRU5DysrIBYWBhUkFRUVFSsPJAcx + KwcxFhYHLRYPFRUkFRUPICQtKw8kFRUkFiUVJBUkFRUVJA8GOQQkJDkrDyQkGjEbICAgJBUtFSstJBUV + DxUVFRU5FQ8xIBAgJAoVDxU5FRUxDy0WJCQtFjEgIDkWDzEPFi0kICAhIS8RISArJA8PJCQkJBUPJDkP + CjkkIBU5DyQkJBsWLRYkBhYPJCQVFSQVJCQkFQoVFQ8kGzkVJBU5JBUVFSQVFTkHITEWIDEHICAxICAr + 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 + DyQVChUVLQYVJAoVFQokChUKJCArIA8VCgoVChUkJBUKJBUVChUVFRYPFSQKFRUVLQ8WDwggFSQtKyQP + BiQGJBUkFRUVFQoVFRU5FQoVCiQVCiQVJAY5JCQkFRUKFQoxGyQVFSQVJBUVJAo5MSQVFQ85DyQVJDkg + Fg8kGxASIS0VCiQVEB0yLRY5ByAbICArFS0POQYrIA8kFgwPLRYkFRUVCi0VFRU5FRYVFgsWJA8aJA8V + Dw8VJCQPOSsPGhUVFRUkDxUkCiQVChUVJA8kLSQVDxU5Fg8kKxUKJBUVFSQVORUVJBUVOQoVDxUkLhUk + JDkVFRUkOQgkFS0rGyskLRUVChUKFRUVFSQVFRUVFQokFRUgIDEkFRUVChUkFSQVJBUVFSQVFRYtFRUK + FQokBiQxLSsxFTkIMQc5FSQ5FRUVFQokFRUVFSQkChUVChUVJBUkFSQVFQYWGxUVJBUVFRUVFRUVFRUk + JBUkGw8WKyAPJAckChUGIQcrIDkPFRUKFQoKFRUhEiExBxsgJTElLiArFgcPDyU5DCAtMTErDyQVJBUk + DxYWDxUVJBUrGysGORUxJCQkJAcxFg8WDy0WJBUVORUVFRUVChUVFSQbJBUVJCQVDw8kLRUVJBUVChUk + FQ8kFRUVJBU5FTkkDyAVFRUkORUkByQVJCQVJBUtFRUKFSQVFRUkJBUVFTkVChUVFRUVFiAHDyAkFRUK + FSQVFSAkFQoVJC0PFSQKFRUKFSQVFQ8PJA8VDyQkFRUVJCQ5DxUVFQoVORUkJBUKFRUKJAoVFRUkFRU5 + DyQkChUKJBUKDy0VFSQ5FQ8VFRUxCC0VJA85FTkVChUbMSQWJAoVChUVFRUVFh4gIRAxICAgIRAQICAW + FjEgByAPFjEPLSQVJCQkFSEgICAkJBUVFQ8kDxUWJBUVBjkPDy0VJBUPKy0VFQcrLRUKFRUKFTkkFQYV + FRUVORUVCw8kFRoPFhsrLRYtFSAxLQ8WFQ8kBy4VJBUVBSAPMS0kFRUkGxYkFRUkFQoVOS0VFTEPFQYP + JBUVFSQkFiEgJS0gLRUKFQoVChUkJCAkJDEkCiQVFRUKFQoVChUkFSQVJBUkFTkVFQoVFRUtFRUVFRUV + JBUKJAoVFRU5JBUkFSQVFRUkFRUKFRUKFTkVLSQKFTkVFSQkFRUVFRUVFRUVChUVFSEhICA5FSQVFSsk + FS0QEi8QICURECEQICArICAgJRAlMSEHKw8VFRUkJBUTISEhIDEPFhUVFRUkJBsVFSQVFRUVFQ8kJBU5 + Dy0VBiQVFQoVChUVFTkgOSQkFRUKFS0VFTkWLRUPKwcrCCsgFhYWICQkISAhChUKJBU5ITEkDw8VBjkk + FjkPFRUVJBUVJBYkFiskJCQVORUWFiAhIREgICs5FQoVJBUPFiQkGyQVFRU5FRUkFSQVFRUVFRUkFRUV + FRUkDzEkJBUVDxAkFRU5FRUVFRUVJBUkFRUkFRUVJBUkFSQVChUkFRUKFRUVChUVDzktFRUVCgoVChUK + FSQVCiQVISEhIS4bMRsIKwoVJCIiLiEIICAQEhAHFg8gICARECAHICAWGysxLRUPKzAhIRsHMTkWFRUk + FRUVChUVFSQtJBUVJBUKFRUkDyQ5FRU5FRUKFSQkByQkFRUKFRUVFRUVFistDw8kICAgICAWDw8tICES + JAoVFRUVJBUkChU5FRUkDyQGJA8kJDkgJAsgICQPFRUVFSQGJCAhJg8rICAkFQokCiQtJBskFSQVJBUK + FRUVFRUVFS0kDyQkFRUVChUkFjkkJCQPMRUVETEVFSQVJBUkFQ8kFRUKJBUkFRUVFRUkJCQKFSQVFQoV + FSQVChUVFQYVFTkkFRUKJAoVChUVChUVJBAhIg4wFSQVFRUbIiImHCAgKyUxIBAgMQcxIBYgIBYxIDEg + JCUrIA8gIjEHMSUgIC0rJBUKFQoVFSQKFQokFRUVFRUVFSQKFQoKFRUtFRUVJBUVChUtOSQkOSsWJA8t + JAcrIBAQJiAVJCQkJBUkFRUKFQoKJBUKFRUVKy0PFTkVFQ8PDxYtDxY5ICAtJA8kFSQVORURIAcxEBEP + ORUVFSQVJBU5ChUVFQ8kCiQVFRUkFRUVDzkVFRUVORUVLQ8VICAPIA8kFSQgJA8kFRUGJBUkFRUVJBUV + FRUKJCQVFQoVFRUVFRUVMQ8VFRU5FRUkFRUVFTkVFRUVFRUVJBUKFQokFRUWEA8VFS0PFQcOIhAgJQct + Dy0kEDEPFRUrGysHICsgDCAgIA8VBhYHICARFjEPDwwgDwYVJBUVJBUkFSQkFQoVLSQVFRUVJBUkJCQV + FRUKFRUVFQctFg8PIBYxIDEgByAlHBAIJBUWLi4KFQoVFRUVChUKFRUVJAgkJBUkFTkVOQ8kKxYkMQcx + ICAlJCArJCsPIS0QICAxJBUKFSQWMQ8kFRUVFSQ5FRUkLS0xICsGJBUVJC0VJCQkOSQVJBUVFRUKFRUK + MREhICQkLi8hLi4QJBUWJBUrLRUVChUKFSQVFRU5Dw8VFg8VFRUVOSQtFQoVFRUVJBUPMRUKJBUVChUK + ChUtFRUGKyQKFSYdICAkFhoVDyAIFisPIBYgJSUgESAgEBsHMTEgIQw5FiAPFRUgICQtJBUKJBUkFSQV + LSQVFRUVJBUkDxUVFTkaICQVChUKORUVFQ8xFistDy0MLSQgMRUVFQo5Gw8LFRUkChY5JBUVChUVGxYg + FTkkFSQVFRUVOQ8xIAcWFg83ICAlICAHICEgByAkICQVJCQPJC0kFSQVORUkJBU5JCQaLS0GOQoVFSQP + JBUVJBUVFQoVChUkChUKFQo5EA0iLyESIh4iITIvICAkIBUVFRUKFQoVFTkVFS0rMQcgKyQVJAoVFRUK + FQo5ASQrLSsPFhUVChUKJBUVFRUVJCAWJBUVECYhMRYPLSArFhYgICArICAcIRAlMRYHKyAWIBYgIAck + KxYRITEWCy0VFRUKFSQVFSQVKxU5JA8kFRUVJCQkByQGFSQKFRUVFRUKFRUGFRoVDyQVFQoVChUkFRUk + JDkKFQo5DzEVCi0VJBUVFQ8WFTkPKxYVJA8IJSQVOSQgIBYgLSQHORAkFTkVJCQkFSQkJBUVDzkkJA8W + DxUVFRUgDxUkBhUVJBUkJBUkFRUVChUVFQoKFRUVFRUVFRUbFhAhBw8RIR0QDSIvEiAHLRUkFRUVChUV + FQokFi0lICAVFRUVFQoVJBUVFS0GFhYGJA8kFSQVFQ8kFRUtFhYWJBUVJAYQHSEhIQ8gByAxICUgICAh + JiEgBw8rKyAQESAkKwclICAgJQcgECQGFSQGFRUkJBUKFQ8VJBUkFSQVFS0rIDEWFRUKFQokFSQkLRUV + JC0VJCQkFSQVJBUVFQoVJAoVFRUVDysPJDkkJDEVFTkPJAgrICAtFjkrDyQkFRUPJAYPJBUVJBYgFRUV + ChUKJCQVJCQVChUVJCQVLSQ5ChUKJC0kFRUkFRUkFRUVFRUVKxUVCiQkJCQGFSQ5FSQKFRUVJBUKJBUW + BzkIMQckFSQkFRUVORUKJBUVFS0PMQg5FRUVFRUkChUkFRUVJDkWDzkkORUVBg8rJA8rFhYbFhU5FRUV + OQcTJQYkFSAgEDEHECEgFgYVJBYgIAcrIA8lIC05Bw0hICAkFg8xJA85JBUkFRU5FQokFSQIFSQVFRYW + CCQHGzkVFRUVCgoVFQ85JAYkFS0kFRUVJBUVChUkChUVFQoVFTkPMSQPFSQPFRUVFSAlIBAlMQ8PDxUk + FRUVFRUVLQYkJC0gMRUKChUKFRUVKzEPJBUVChUKJBUVChUVFRUkICskLRUVJBUKFQoVOS0gJA8kFSQk + JDEkFRUVFQokJBUVChUKFSQKFSQVMRsrLSQWJAYVFRUKFTkVFRUVFS0gDyQ5JBUkFRUkCgYPDzEVFRUV + CiQxDyAWIA8tFRUkFRUKFSQVFTkVOQcrLhAgGyskICQVJCAQECAPCgYxIQcHFRUtBysgIDkgCyAWFRU5 + ChUVChUkFQoVFTkVLSQtJCQkFTkVFSQVJBUVChUVFRU5ChUVFSQVBiQkFTkVFRUVJBU5DzkkJBYgFTkV + FTkkFiAQJSEQICAgFg8VFRUVOQYkORUkJBUPKy0KFRUVJAoVOQgtFSskFQoVFRUKChUVORUVBhUIICsx + FQoVORUkLRYPFi0VFQokJCAgBzEkFQoVChUKCiQKFRUKFQoVFSQPMQ8VLRYgKxUKFRUVFQoVJAokLSQ5 + DyQPFRUVJCQrOSsVFRUKFTkPJCsWDyAHFRUVCgokJCQVLQsVFRUVBg8xISUgKxUHICAhECUgFSQ5IAc5 + FRUKFQYgEwwgFhUbFhUkBhUVJBUVChUVDyQVJBUPFRUVChUKFRUVJA8kFQoVJAoVChUKFQoVFTkVFQoV + ChUkICsVChUPDxUtLSQVFRUkByAxICAbDzEHFTkVDxUkFRU5JA8kFSQrBy4VFQokFRUVFSQVKy0PFSQ5 + JCQVFRUVJAcxOTkrLQ8HFjkVFRUVJCQWOSQWJDkVChUVMSQWBhUVFSQKFRUVCiQKFQokJAYtFSQkFRUt + ICAxJA8tByQVChUVChUVKw8WGxYtBysxBw8PJAYlJAsrJAYPGyQkFSQkFRUVFRUHFRYtJBUKFRUkDyQg + MQcrICEhJRwQMSUWJRYVFhUkJBU5IBYHJBUKFRUGFRUkFSQVFTkVFRUVFRUVJBUKFRUKFRUkFRUVFSQV + FRUVFSQVFSQVJBUVFRUVFRUVJA8PJCQPJCUgMSUtGiQWGyUgDzkVFRU5DyQkJDkVFQoVFRUxICAgLi8h + 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 + JDkkJCQkDxUVJCsPFi0VFTkPOSQKFQo5BzkkChUKFRU5JA8KJBUVORUkJBUKFRUVFSQPJBUkKyAgBxUH + MTExFQ85ByQGFSQVJBYxISAaICshITIQIBUPJA8VJBUKFQokFQoVLSQPLSsbEhAkFRUVJCQKKwYkFTkP + KxYGJCQHJA8WKzkVDCAVAQcrJBUkFSQPFRUPJCQgMSAbDxUVCgokFRUgIDErLhUVJA8VFgcxDxYkFQoV + ChUkIBUPMQ8kICUPMSsVFRUaLSsPIAcPBiQgECEVFRUKJAoVFQ8RJBAWDxsWLQgkDw8kJDEIFSQkDw85 + JBUVFTkkMQ8xFhAlDCQkORUVDyQgFTktJCQPMS0rGxUkDyskORUVChUKFRUVJBsrFistJCQkChUkFRUV + FSQPFRs5FRUVJAcgMSAPFiAgKyAxCBYgFg8VFQ8gDxYgFSAgMhEPDw8rICAHLRUVFRUVFRUkFRUVFggW + IQ8tFSQVJBUVFg8rLSQWFQc5KwcgICArBxYPCCQVJCAgIAgVFSQkFjkkORUIOQgVFSQVFRUVFSQVCCAH + IAcxJCQPKwogDyQtJCQkFRU5BzkWFRUPDyQPKwcPJDkVBiQPKyA5JBUWHBwkFQoVFQoVChUKIA8VFRUV + ORUkFi0kMQcVFTkGJBUkFRUVJCAVJBUkIBYtBhskJBUkJDkkDzkkFRUkFQcHLRYkDzkPFQ8VFRUkFRUV + JC4MCCAcGyQVJBUVFRUkBjkkORYkFRU5JCQHKxYPKyAgBSAPBhYxICArFRU5FQYkLSQgIQckJDkVFSAQ + ICsxFg85ChUKFQokICArERAkFQoVFRUVJCQgFhUWIDEWFgcPFiAxIAcaORUVCiQkFiQWJBUPJCQPFRUV + ORUVJAoVFRYbFiQVFRUVFRUrLQ8WKyAgIAckFRUWFSQkFQ8HDyAkFjExMQ8tKy0kBiArJA8PDxUgISAK + FSQVFQoVFQoVFRUVJDkVFRUKOQ8kFg8xJDkkFQoVFRUVORUPFSQPMSQkFSsVFRUVFSQVFSQkDyQVFRUP + LSQrLRUVFSQPOQ8VFRUkDzEHOQ85JBU5JBUGJBUPKyQkFRUkBxsVFSQVOQ8bISEgJCArMRUGICUrMQgr + FhU5FRUkFRUVJBUVBiQVJAY5ByQgKxUVJAoVFRUVIBEVChUkDyQkDyQIKy0GKyAKFSQgKzEHICAVJCsG + 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 + JAoVChUVFiAhJSQWJCAgGxUtLSQgLSQPJBUPOQgtMSskJDkkDyQVFSQVJCQVORU5FRUVLSQkOQoVFRUP + DxYPFSQVJCAhDyQgMQcPOQ8VJBUKDyEgICQVCiAgMS0tJBUVJRskFRUkLRUVFRUVOSsbJBsrLRUVJCsk + ORUGJCQVICQkFS05BiQlEC8iIiIeKh4iERARIDEIMQ85JBUVDw8bJRExICAREyUWIA8lBysbMSQWICAr + JAogGxUVFRUVDxARIiEQICAgEDIgKw8kMQ85FQYkJBAxICQ5JBYgIBEkDxYrCzkKFQ8VFhEQDSIOIiEH + FiQkJBUVORUkFSQVJC0VFRUVChUVJBUVJCUgByArByQVFSQVJBUkFRU5FRUVFQYVJBUVFTkKFRU5FRUV + FSQPFRUkJBUGFRUVOSQtIDkgOSstJCQPFhAxDyAuKw8rJAckFSQKFRUKFSQVISEQJSAVOS0hMSQkFSQk + JCQkFSQPJCQPMQ8VFQ8kIA8WJBUVLRYrLSQ5BysWICAQISENIh8QDxUVOSEhMRsrFgglKzkPKyAgJSAx + ECAPDzEgMSAgBysPIBYkBjkVJCAxLQoVChU5DxAhISAgIDEgERElByA5FhUVFhU5FhUkFQY5FSQGFRUk + Dy0VJBUVORUgFhEgKxskFS0kCw85JC0VJBUVFRUWJCQPJCQKFSAGFRUPIBAgICAkJBUVJBUkFSQVFRUK + JDEkLSQVDwYVFRUVFRUkDzkkJC0WDwYkOSQVFRUVDysPFgcWJA8VLSQgMQgrICAgLS0bFiQVFSQ5DxU5 + DyEiIi4HORUVIC8WFSQkDyAhLiAgFjkkFjEVFTkPICAkFiQPJA8kGyQVJA8tIDExChYgMhEWORUKChUW + ITIQICArICAHFi0QEBwgFg85Cg8xBxEgIDEPIDkVFRUkDzELDyAVChUKFQo5EzAiLyAQECUgJS0WFRUk + ICArFg8WFSQVFQYVOSQ5DxoVFRUVBxYIJBY5ECAlDyQVFSAtFg8PFQoGJBUkDyURMSsIMSArETEPMSAg + ISEuIA8tGyAgORYVJAoVJBUPFhUkLSQPJBU5JCQkJCQVDyArJCQVOQoVChUkFTkPICsgJA8VLSQVLQ8x + ICAgDyArJC0WFRUKJBYVFTkPESEQMRUVJBYRLjEgMSQkJAcgJBUVFSQWLRYPCy4gJQgrBiQ5FSQkFSQV + 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 + IQcPDw8VFRUPDw== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAJpJREFUOE+lU4EN + wCAIm/8fzcRZrKxuJi4hcUpL0VIu/dlivyz2Y9uBZqbDz3pIngBSIgATsSJpYADrov6+I85H7pAOAgdy + YiZGi6wiqgOMO1BEnAMSSdAq9eCqvwTcCt9DvE5vkVp7niwq8lqo+FWQ5WbANsF0+91YULn1EuxI9ocC + uxmOjRQkLD1bOvlDz8PJMDHjNERfU3gDvwxpp71FEQgAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Code/Chapter 29/Buttons/MainForm.vb b/Code/Chapter 29/Buttons/MainForm.vb new file mode 100644 index 0000000..8d8563d --- /dev/null +++ b/Code/Chapter 29/Buttons/MainForm.vb @@ -0,0 +1,34 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + ' Hold the current text alignment + Private currAlignment As ContentAlignment = ContentAlignment.MiddleCenter + Private currEnumPos As Integer = 0 + + Private Sub btnStandard_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnStandard.Click + ' Get all possible values + ' of the ContentAlignment enum. + Dim values As Array = [Enum].GetValues(currAlignment.GetType()) + + ' Bump the current position in the enum. + ' & check for wrap around. + currEnumPos += 1 + If currEnumPos >= values.Length Then + currEnumPos = 0 + End If + + ' Bump the current enum value. + currAlignment = CType([Enum].Parse(currAlignment.GetType(), _ + values.GetValue(currEnumPos).ToString()), ContentAlignment) + btnStandard.TextAlign = currAlignment + + ' Paint enum value name on button. + btnStandard.Text = currAlignment.ToString() + + ' Now assign the location of the icon on + ' btnImage... + btnImage.ImageAlign = currAlignment + End Sub +End Class diff --git a/Code/Chapter 29/Buttons/My Project/Application.Designer.vb b/Code/Chapter 29/Buttons/My Project/Application.Designer.vb new file mode 100644 index 0000000..319ce3c --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.Buttons.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/Buttons/My Project/Application.myapp b/Code/Chapter 29/Buttons/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/Buttons/My Project/AssemblyInfo.vb b/Code/Chapter 29/Buttons/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..5eb4f15 --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/Buttons/My Project/Resources.Designer.vb b/Code/Chapter 29/Buttons/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d2372bd --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Buttons.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/Buttons/My Project/Resources.resx b/Code/Chapter 29/Buttons/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/Buttons/My Project/Settings.Designer.vb b/Code/Chapter 29/Buttons/My Project/Settings.Designer.vb new file mode 100644 index 0000000..48d8fc7 --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Buttons.My.MySettings + Get + Return Global.Buttons.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/Buttons/My Project/Settings.settings b/Code/Chapter 29/Buttons/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/Buttons/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/CarConfig/CarConfig.sln b/Code/Chapter 29/CarConfig/CarConfig.sln new file mode 100644 index 0000000..a3d90c3 --- /dev/null +++ b/Code/Chapter 29/CarConfig/CarConfig.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarConfig", "CarConfig.vbproj", "{74D47550-418A-4B12-9CEF-034D51FA834B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {74D47550-418A-4B12-9CEF-034D51FA834B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74D47550-418A-4B12-9CEF-034D51FA834B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74D47550-418A-4B12-9CEF-034D51FA834B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74D47550-418A-4B12-9CEF-034D51FA834B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/CarConfig/CarConfig.suo b/Code/Chapter 29/CarConfig/CarConfig.suo new file mode 100644 index 0000000000000000000000000000000000000000..e290f2bb6d6f51cd4379ad4dba890558513d5025 GIT binary patch literal 17408 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {74D47550-418A-4B12-9CEF-034D51FA834B} + WinExe + CarConfig.My.MyApplication + CarConfig + CarConfig + WindowsForms + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CarConfig.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarConfig.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/CarConfig/CarConfig.vbproj.user b/Code/Chapter 29/CarConfig/CarConfig.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 29/CarConfig/CarConfig.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 29/CarConfig/MainForm.Designer.vb b/Code/Chapter 29/CarConfig/MainForm.Designer.vb new file mode 100644 index 0000000..0d0f1d5 --- /dev/null +++ b/Code/Chapter 29/CarConfig/MainForm.Designer.vb @@ -0,0 +1,257 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Me.label4 = New System.Windows.Forms.Label + Me.label2 = New System.Windows.Forms.Label + Me.radioPink = New System.Windows.Forms.RadioButton + Me.radioYellow = New System.Windows.Forms.RadioButton + Me.radioRed = New System.Windows.Forms.RadioButton + Me.radioGreen = New System.Windows.Forms.RadioButton + Me.infoLabel = New System.Windows.Forms.Label + Me.checkedBoxRadioOptions = New System.Windows.Forms.CheckedListBox + Me.btnOrder = New System.Windows.Forms.Button + Me.checkFloorMats = New System.Windows.Forms.CheckBox + Me.groupBoxColor = New System.Windows.Forms.GroupBox + Me.label3 = New System.Windows.Forms.Label + Me.carMakeList = New System.Windows.Forms.ListBox + Me.label5 = New System.Windows.Forms.Label + Me.monthCalendar = New System.Windows.Forms.MonthCalendar + Me.label1 = New System.Windows.Forms.Label + Me.comboSalesPerson = New System.Windows.Forms.ComboBox + Me.calendarTip = New System.Windows.Forms.ToolTip(Me.components) + Me.groupBoxColor.SuspendLayout() + Me.SuspendLayout() + ' + 'label4 + ' + Me.label4.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold) + Me.label4.Location = New System.Drawing.Point(9, 197) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(208, 24) + Me.label4.TabIndex = 24 + Me.label4.Text = "Order Stats:" + ' + 'label2 + ' + Me.label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold) + Me.label2.Location = New System.Drawing.Point(157, 15) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(144, 16) + Me.label2.TabIndex = 21 + Me.label2.Text = "Radio Options:" + ' + 'radioPink + ' + Me.radioPink.BackColor = System.Drawing.SystemColors.ControlLight + Me.radioPink.Location = New System.Drawing.Point(176, 24) + Me.radioPink.Name = "radioPink" + Me.radioPink.Size = New System.Drawing.Size(56, 23) + Me.radioPink.TabIndex = 3 + Me.radioPink.Text = "Pink" + Me.radioPink.UseVisualStyleBackColor = False + ' + 'radioYellow + ' + Me.radioYellow.BackColor = System.Drawing.SystemColors.ControlLight + Me.radioYellow.Location = New System.Drawing.Point(96, 24) + Me.radioYellow.Name = "radioYellow" + Me.radioYellow.Size = New System.Drawing.Size(56, 23) + Me.radioYellow.TabIndex = 1 + Me.radioYellow.Text = "Yellow" + Me.radioYellow.UseVisualStyleBackColor = False + ' + 'radioRed + ' + Me.radioRed.BackColor = System.Drawing.SystemColors.ControlLight + Me.radioRed.Location = New System.Drawing.Point(264, 24) + Me.radioRed.Name = "radioRed" + Me.radioRed.Size = New System.Drawing.Size(64, 23) + Me.radioRed.TabIndex = 2 + Me.radioRed.Text = "Red" + Me.radioRed.UseVisualStyleBackColor = False + ' + 'radioGreen + ' + Me.radioGreen.BackColor = System.Drawing.SystemColors.ControlLight + Me.radioGreen.Location = New System.Drawing.Point(16, 24) + Me.radioGreen.Name = "radioGreen" + Me.radioGreen.Size = New System.Drawing.Size(64, 23) + Me.radioGreen.TabIndex = 0 + Me.radioGreen.Text = "Green" + Me.radioGreen.UseVisualStyleBackColor = False + ' + 'infoLabel + ' + Me.infoLabel.BackColor = System.Drawing.Color.OldLace + Me.infoLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.infoLabel.Font = New System.Drawing.Font("Arial", 8.0!) + Me.infoLabel.Location = New System.Drawing.Point(10, 229) + Me.infoLabel.Name = "infoLabel" + Me.infoLabel.Size = New System.Drawing.Size(224, 200) + Me.infoLabel.TabIndex = 18 + ' + 'checkedBoxRadioOptions + ' + Me.checkedBoxRadioOptions.CheckOnClick = True + Me.checkedBoxRadioOptions.Cursor = System.Windows.Forms.Cursors.Hand + Me.checkedBoxRadioOptions.FormattingEnabled = True + Me.checkedBoxRadioOptions.Items.AddRange(New Object() {"Front Speakers", "8-Track Tape Player", "CD Player", "Cassette Player", "Rear Speakers", "Ultra Base Thumper"}) + Me.checkedBoxRadioOptions.Location = New System.Drawing.Point(159, 42) + Me.checkedBoxRadioOptions.Name = "checkedBoxRadioOptions" + Me.checkedBoxRadioOptions.Size = New System.Drawing.Size(157, 49) + Me.checkedBoxRadioOptions.TabIndex = 15 + ' + 'btnOrder + ' + Me.btnOrder.Location = New System.Drawing.Point(267, 407) + Me.btnOrder.Name = "btnOrder" + Me.btnOrder.Size = New System.Drawing.Size(120, 22) + Me.btnOrder.TabIndex = 19 + Me.btnOrder.Text = "Confirm Order" + ' + 'checkFloorMats + ' + Me.checkFloorMats.FlatStyle = System.Windows.Forms.FlatStyle.Popup + Me.checkFloorMats.Location = New System.Drawing.Point(10, 11) + Me.checkFloorMats.Name = "checkFloorMats" + Me.checkFloorMats.Size = New System.Drawing.Size(112, 24) + Me.checkFloorMats.TabIndex = 13 + Me.checkFloorMats.Text = "Extra Floor Mats" + ' + 'groupBoxColor + ' + Me.groupBoxColor.Controls.Add(Me.radioPink) + Me.groupBoxColor.Controls.Add(Me.radioYellow) + Me.groupBoxColor.Controls.Add(Me.radioRed) + Me.groupBoxColor.Controls.Add(Me.radioGreen) + Me.groupBoxColor.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.groupBoxColor.Location = New System.Drawing.Point(10, 116) + Me.groupBoxColor.Name = "groupBoxColor" + Me.groupBoxColor.Size = New System.Drawing.Size(435, 56) + Me.groupBoxColor.TabIndex = 17 + Me.groupBoxColor.TabStop = False + Me.groupBoxColor.Text = "Exterior Color" + ' + 'label3 + ' + Me.label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold) + Me.label3.Location = New System.Drawing.Point(333, 18) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(112, 16) + Me.label3.TabIndex = 22 + Me.label3.Text = "Make:" + ' + 'carMakeList + ' + Me.carMakeList.FormattingEnabled = True + Me.carMakeList.Items.AddRange(New Object() {"BMW", "Caravan", "Ford", "Grand Am", "Jeep", "Jetta", "Saab", "Viper", "Yugo"}) + Me.carMakeList.Location = New System.Drawing.Point(333, 42) + Me.carMakeList.Name = "carMakeList" + Me.carMakeList.ScrollAlwaysVisible = True + Me.carMakeList.Size = New System.Drawing.Size(112, 56) + Me.carMakeList.Sorted = True + Me.carMakeList.TabIndex = 16 + ' + 'label5 + ' + Me.label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.0!, System.Drawing.FontStyle.Bold) + Me.label5.Location = New System.Drawing.Point(265, 197) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(184, 16) + Me.label5.TabIndex = 25 + Me.label5.Text = "Delivery Date:" + ' + 'monthCalendar + ' + Me.monthCalendar.Location = New System.Drawing.Point(267, 229) + Me.monthCalendar.Name = "monthCalendar" + Me.monthCalendar.TabIndex = 23 + Me.calendarTip.SetToolTip(Me.monthCalendar, "When do you want your car?") + ' + 'label1 + ' + Me.label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.label1.Location = New System.Drawing.Point(10, 52) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(112, 24) + Me.label1.TabIndex = 20 + Me.label1.Text = "Sales Person" + ' + 'comboSalesPerson + ' + Me.comboSalesPerson.FormattingEnabled = True + Me.comboSalesPerson.Items.AddRange(New Object() {"Baby Ry-Ry", "Dan 'the Machine'", "Cowboy Dan", "Tom 'the Style' "}) + Me.comboSalesPerson.Location = New System.Drawing.Point(10, 76) + Me.comboSalesPerson.Name = "comboSalesPerson" + Me.comboSalesPerson.Size = New System.Drawing.Size(128, 21) + Me.comboSalesPerson.TabIndex = 14 + ' + 'calendarTip + ' + Me.calendarTip.IsBalloon = True + Me.calendarTip.ShowAlways = True + Me.calendarTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info + ' + 'z + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(517, 454) + Me.Controls.Add(Me.label5) + Me.Controls.Add(Me.label4) + Me.Controls.Add(Me.monthCalendar) + Me.Controls.Add(Me.label3) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.comboSalesPerson) + Me.Controls.Add(Me.carMakeList) + Me.Controls.Add(Me.infoLabel) + Me.Controls.Add(Me.checkedBoxRadioOptions) + Me.Controls.Add(Me.btnOrder) + Me.Controls.Add(Me.checkFloorMats) + Me.Controls.Add(Me.groupBoxColor) + Me.Name = "z" + Me.Text = "Buy a new car!" + Me.groupBoxColor.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + Protected WithEvents label4 As System.Windows.Forms.Label + Protected WithEvents label2 As System.Windows.Forms.Label + Protected WithEvents radioPink As System.Windows.Forms.RadioButton + Protected WithEvents radioYellow As System.Windows.Forms.RadioButton + Protected WithEvents radioRed As System.Windows.Forms.RadioButton + Protected WithEvents radioGreen As System.Windows.Forms.RadioButton + Protected WithEvents infoLabel As System.Windows.Forms.Label + Protected WithEvents checkedBoxRadioOptions As System.Windows.Forms.CheckedListBox + Protected WithEvents btnOrder As System.Windows.Forms.Button + Protected WithEvents checkFloorMats As System.Windows.Forms.CheckBox + Protected WithEvents groupBoxColor As System.Windows.Forms.GroupBox + Protected WithEvents label3 As System.Windows.Forms.Label + Protected WithEvents carMakeList As System.Windows.Forms.ListBox + Protected WithEvents label5 As System.Windows.Forms.Label + Protected WithEvents monthCalendar As System.Windows.Forms.MonthCalendar + Protected WithEvents label1 As System.Windows.Forms.Label + Protected WithEvents comboSalesPerson As System.Windows.Forms.ComboBox + Private WithEvents calendarTip As System.Windows.Forms.ToolTip + +End Class diff --git a/Code/Chapter 29/CarConfig/MainForm.resx b/Code/Chapter 29/CarConfig/MainForm.resx new file mode 100644 index 0000000..77f2b25 --- /dev/null +++ b/Code/Chapter 29/CarConfig/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 29/CarConfig/MainForm.vb b/Code/Chapter 29/CarConfig/MainForm.vb new file mode 100644 index 0000000..a0067cb --- /dev/null +++ b/Code/Chapter 29/CarConfig/MainForm.vb @@ -0,0 +1,84 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CenterToScreen() + End Sub + +#Region "Button Click logic" + Private Sub btnOrder_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnOrder.Click + ' Build a string to display information. + Dim orderInfo As String = "" + If comboSalesPerson.Text <> "" Then + orderInfo &= "Sales Person: " + comboSalesPerson.Text & Chr(10) + Else + orderInfo &= "You did not select a sales person!" & "" & Chr(10) + End If + If carMakeList.SelectedItem IsNot Nothing Then + orderInfo &= "Make: " & carMakeList.SelectedItem.ToString() & "" & Chr(10) + End If + If checkFloorMats.Checked Then + orderInfo &= "You want floor mats." & Chr(10) + End If + If radioRed.Checked Then + orderInfo &= "You want a red exterior." & Chr(10) + End If + If radioYellow.Checked Then + orderInfo &= "You want a yellow exterior." & Chr(10) + End If + If radioGreen.Checked Then + orderInfo &= "You want a green exterior." & Chr(10) + End If + If radioPink.Checked Then + orderInfo &= "Why do you want a PINK exterior?" & Chr(10) + End If + + orderInfo += "--------------------------------" & Chr(10) + For i As Integer = 0 To checkedBoxRadioOptions.Items.Count - 1 + ' For each item in the CheckedListBox... + ' Is the current item checked? + If checkedBoxRadioOptions.GetItemChecked(i) Then + ' Get text of current item. + orderInfo &= "Radio Item: " + orderInfo &= checkedBoxRadioOptions.Items(i).ToString() + orderInfo &= "" & Chr(10) & "" + End If + Next + orderInfo += "--------------------------------" & Chr(10) + + ' Get ship date. + Dim startD As DateTime = monthCalendar.SelectionStart + Dim endD As DateTime = monthCalendar.SelectionEnd + + ' Get correct string representation. + ' + Dim dateStartStr As String = startD.Date.ToShortDateString() + Dim dateEndStr As String = endD.Date.ToShortDateString() + If dateStartStr <> dateEndStr Then + orderInfo &= "Car will be sent between" & Chr(10) & dateStartStr & " and" & Chr(10) & dateEndStr + Else + orderInfo &= "Car will be sent on" & Chr(10) + dateStartStr + ' they picked a single date. + End If + ' Set order info. + infoLabel.Text = orderInfo + End Sub +#End Region + + Private Sub groupBoxColor_Enter(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles groupBoxColor.Enter + groupBoxColor.Text = "Exterior Color: You are in the group..." + End Sub + + Private Sub groupBoxColor_Leave(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles groupBoxColor.Leave + groupBoxColor.Text = "Exterior Color: Thanks for visiting the group..." + End Sub +End Class diff --git a/Code/Chapter 29/CarConfig/My Project/Application.Designer.vb b/Code/Chapter 29/CarConfig/My Project/Application.Designer.vb new file mode 100644 index 0000000..aa324ac --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.CarConfig.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/CarConfig/My Project/Application.myapp b/Code/Chapter 29/CarConfig/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/CarConfig/My Project/AssemblyInfo.vb b/Code/Chapter 29/CarConfig/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9c27fa7 --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/CarConfig/My Project/Resources.Designer.vb b/Code/Chapter 29/CarConfig/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a2c8a3b --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarConfig.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarConfig/My Project/Resources.resx b/Code/Chapter 29/CarConfig/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/CarConfig/My Project/Settings.Designer.vb b/Code/Chapter 29/CarConfig/My Project/Settings.Designer.vb new file mode 100644 index 0000000..954e7e1 --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarConfig.My.MySettings + Get + Return Global.CarConfig.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarConfig/My Project/Settings.settings b/Code/Chapter 29/CarConfig/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/CarConfig/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/CarConfig/UpgradeLog.XML b/Code/Chapter 29/CarConfig/UpgradeLog.XML new file mode 100644 index 0000000..c1c9945 --- /dev/null +++ b/Code/Chapter 29/CarConfig/UpgradeLog.XML @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlLibrary/AboutToBlow.bmp b/Code/Chapter 29/CarControlLibrary/AboutToBlow.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f9da53950f2dd7c32a2df21078bc2fa85ecfe91e GIT binary patch literal 3382 zcmeH`F-sjy6oyYgxCTsNV`USo&n_?!u(cP`Sli8Cut{+%>p(!5E=3YZk;Y$es}yl+ zZDM5+kiZu^ms`yDoHIMKv)8@hgQU#r?#{gDJ?A`ocJJZQ%V%Q8%MFo#SiR`aC$gCX zPxH;LPq^x7$6SPena}f$D@$1{7P9!Zke^>a%ErcqY;JDK*4CD6Z*R-a&W`Nv?#kZY zp6u`M%klBC9336W;o+ei9305}b&^-FlDw5GNk5`|x%yYGzJHfDpFY#baeB_c8S~bm zIW&jnR7=_7(LK6H_vjv7(*k-x4{QQ@K<6eAJ)%eSh!D{e`@}v)>+HBX`a23alAI*5 z_FNnc4h9EWxjj7nvqj2Y{uaOx<`bF3x9FczZYL$Z-L^z^y@L=}3Ns6#USRxRS zhV}`-5=o4hB0_|Pe@^P~P9iK(=V2`RHRxMFgCW6?U`Q||7!nNjIl&NNNH8QAA`Fz_ z#1BJ)A;FMfpfo2s3<-t=LjoYtKT<4_m@s*2c=jHSWVO}f<+*&2lamuUJw27PvokqA zKbOnPOS!nXkn8Jfxw*NK+uK{YyStP7`+IqKc#xmVB=6t7<99q~y80W?8})3bb#
R6PVed)3tf$ZF8NBWVdBBR$Wd;29b9-N|=shwZBgIGgGb98w+WZP$RY|33p8&YbiXai#cdRsw79;|y8rtARE_pT7pC7b1OvbTU)_uQD_`%LyIk z&i21}hFsAasM-AM8|3OeP=V2o)8xyg!u0kTSema`^c!U$FJ-9|jbCP6XF#3dwFz1$ zKV<7i>x)~$(8JsXqfFD9(XZ=r{XR$KatxBLM2+TMNq|A0sWfP^I;*~7FN0`&!}1Y~ zhP3iz^`2))&ntt;3HB2h{Rke>SdKn}{`l%qNQgj}UFWvEzJ zD;cf3G^^hAi`s9!rHxekXke{lWnB|SdR6 _ +Partial Class CarControl + Inherits System.Windows.Forms.UserControl + + 'UserControl1 overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(CarControl)) + Me.currentImage = New System.Windows.Forms.PictureBox + Me.imageTimer = New System.Windows.Forms.Timer(Me.components) + Me.carImages = New System.Windows.Forms.ImageList(Me.components) + CType(Me.currentImage, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'currentImage + ' + Me.currentImage.Location = New System.Drawing.Point(25, 50) + Me.currentImage.Name = "currentImage" + Me.currentImage.Size = New System.Drawing.Size(100, 50) + Me.currentImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.currentImage.TabIndex = 1 + Me.currentImage.TabStop = False + ' + 'imageTimer + ' + Me.imageTimer.Interval = 200 + ' + 'carImages + ' + Me.carImages.ImageStream = CType(resources.GetObject("carImages.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.carImages.TransparentColor = System.Drawing.Color.Transparent + Me.carImages.Images.SetKeyName(0, "Lemon1.bmp") + Me.carImages.Images.SetKeyName(1, "Lemon2.bmp") + Me.carImages.Images.SetKeyName(2, "Lemon3.bmp") + Me.carImages.Images.SetKeyName(3, "AboutToBlow.bmp") + Me.carImages.Images.SetKeyName(4, "EngineBlown.bmp") + ' + 'CarControl + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.Controls.Add(Me.currentImage) + Me.Name = "CarControl" + CType(Me.currentImage, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Private WithEvents currentImage As System.Windows.Forms.PictureBox + Private WithEvents imageTimer As System.Windows.Forms.Timer + Private WithEvents carImages As System.Windows.Forms.ImageList + +End Class diff --git a/Code/Chapter 29/CarControlLibrary/CarControl.bmp b/Code/Chapter 29/CarControlLibrary/CarControl.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c25da69cb95c06d2812da0747ae7a52aaf5894b5 GIT binary patch literal 1334 zcmb7@v1%JZ5QfK~fG{qi#+93>it7P`TJ-`qZtZSfK}`x(CS|~2*v>@~NRh@*pejW? zwbewG3WEs5>I5k!-^|GlA*9GjyR-Y>?)=})-i;?GFQl%Mp2%xPFL!NE`rVDaE>xf6 z=lM*8zszP`pl2xa`CR7T=JNRUqx5<`>G%6`aBv`l!9WfV59R3SNQT3q93LOc+1Z&) zCKDNt$1)m?WcDWH^fcs3?j^pve7XN2_YV*9?$c+ClxDO>^KPnWil%6qT69Yc-Ovr) z&<#DeHS~twm^Ac;P7p_TbVqjtM-S$~JiMHhUh!8FDVtP6%AQVPP#6>jg`tpOP#6>j zg+XB`Oc)dfg+XCZ7z!N*g+XCZ7!(E#G&mFvO^%4F017dGjpj7;d}LS*bHm6;YOqup zxM>Uw7K5eA0*Aq2a2Om0N0kZ=gTY`h7_xK*hrwVlI9@?tCB&!uF|YDwb)dq#v8qaq zcY~>6+AwG^HM|=)8%Y}84evUR@UDy_VF(xk28V$(G}glqFa!(%1F31~Fa!(%LjVx?JIR8L!6GAv zF*i7(a_1V8SMotFE-qv`oyz6qrCeWM%iZ0b+}_^GVzH3raw)6TO4jSOY&IL&ZnyII zGvxiv4d3yM>gG3)fqXT~yg3ay=ZeVwImZ5e3A;!r;a~AQ*Kt*>ED>+HN+W5GpDq?X c4ZGMa{jL2q|8qlfW!~Jd%b(z-)!@IoUpLDHHvj+t literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/CarControlLibrary/CarControl.resx b/Code/Chapter 29/CarControlLibrary/CarControl.resx new file mode 100644 index 0000000..c5b4cc1 --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/CarControl.resx @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 13 + + + 127, 13 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD8 + GwAAAk1TRnQBSQFMAgEBBQEAAQkBAAEEAQABLwEAAS8BAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABvAMAAV4DAAEBAQABCAUAAQgBRRgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc + AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA + AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz + AwABZgMAAZkDAAHMAgABMwMAAjMCAAEzAWYCAAEzAZkCAAEzAcwCAAEzAf8CAAFmAwABZgEzAgACZgIA + AWYBmQIAAWYBzAIAAWYB/wIAAZkDAAGZATMCAAGZAWYCAAKZAgABmQHMAgABmQH/AgABzAMAAcwBMwIA + AcwBZgIAAcwBmQIAAswCAAHMAf8CAAH/AWYCAAH/AZkCAAH/AcwBAAEzAf8CAAH/AQABMwEAATMBAAFm + AQABMwEAAZkBAAEzAQABzAEAATMBAAH/AQAB/wEzAgADMwEAAjMBZgEAAjMBmQEAAjMBzAEAAjMB/wEA + ATMBZgIAATMBZgEzAQABMwJmAQABMwFmAZkBAAEzAWYBzAEAATMBZgH/AQABMwGZAgABMwGZATMBAAEz + AZkBZgEAATMCmQEAATMBmQHMAQABMwGZAf8BAAEzAcwCAAEzAcwBMwEAATMBzAFmAQABMwHMAZkBAAEz + AswBAAEzAcwB/wEAATMB/wEzAQABMwH/AWYBAAEzAf8BmQEAATMB/wHMAQABMwL/AQABZgMAAWYBAAEz + AQABZgEAAWYBAAFmAQABmQEAAWYBAAHMAQABZgEAAf8BAAFmATMCAAFmAjMBAAFmATMBZgEAAWYBMwGZ + AQABZgEzAcwBAAFmATMB/wEAAmYCAAJmATMBAANmAQACZgGZAQACZgHMAQABZgGZAgABZgGZATMBAAFm + AZkBZgEAAWYCmQEAAWYBmQHMAQABZgGZAf8BAAFmAcwCAAFmAcwBMwEAAWYBzAGZAQABZgLMAQABZgHM + Af8BAAFmAf8CAAFmAf8BMwEAAWYB/wGZAQABZgH/AcwBAAHMAQAB/wEAAf8BAAHMAQACmQIAAZkBMwGZ + AQABmQEAAZkBAAGZAQABzAEAAZkDAAGZAjMBAAGZAQABZgEAAZkBMwHMAQABmQEAAf8BAAGZAWYCAAGZ + AWYBMwEAAZkBMwFmAQABmQFmAZkBAAGZAWYBzAEAAZkBMwH/AQACmQEzAQACmQFmAQADmQEAApkBzAEA + ApkB/wEAAZkBzAIAAZkBzAEzAQABZgHMAWYBAAGZAcwBmQEAAZkCzAEAAZkBzAH/AQABmQH/AgABmQH/ + ATMBAAGZAcwBZgEAAZkB/wGZAQABmQH/AcwBAAGZAv8BAAHMAwABmQEAATMBAAHMAQABZgEAAcwBAAGZ + AQABzAEAAcwBAAGZATMCAAHMAjMBAAHMATMBZgEAAcwBMwGZAQABzAEzAcwBAAHMATMB/wEAAcwBZgIA + AcwBZgEzAQABmQJmAQABzAFmAZkBAAHMAWYBzAEAAZkBZgH/AQABzAGZAgABzAGZATMBAAHMAZkBZgEA + AcwCmQEAAcwBmQHMAQABzAGZAf8BAALMAgACzAEzAQACzAFmAQACzAGZAQADzAEAAswB/wEAAcwB/wIA + AcwB/wEzAQABmQH/AWYBAAHMAf8BmQEAAcwB/wHMAQABzAL/AQABzAEAATMBAAH/AQABZgEAAf8BAAGZ + AQABzAEzAgAB/wIzAQAB/wEzAWYBAAH/ATMBmQEAAf8BMwHMAQAB/wEzAf8BAAH/AWYCAAH/AWYBMwEA + AcwCZgEAAf8BZgGZAQAB/wFmAcwBAAHMAWYB/wEAAf8BmQIAAf8BmQEzAQAB/wGZAWYBAAH/ApkBAAH/ + AZkBzAEAAf8BmQH/AQAB/wHMAgAB/wHMATMBAAH/AcwBZgEAAf8BzAGZAQAB/wLMAQAB/wHMAf8BAAL/ + ATMBAAHMAf8BZgEAAv8BmQEAAv8BzAEAAmYB/wEAAWYB/wFmAQABZgL/AQAB/wJmAQAB/wFmAf8BAAL/ + AWYBAAEhAQABpQEAA18BAAN3AQADhgEAA5YBAAPLAQADsgEAA9cBAAPdAQAD4wEAA+oBAAPxAQAD+AEA + AfAB+wH/AQABpAKgAQADgAMAAf8CAAH/AwAC/wEAAf8DAAH/AQAB/wEAAv8CAAP/AQAv7I0AL+yNAC/s + jQAv7I0AL+yNAC/sjQAG7AHtAewEbQHrAu0Q7ALtAewEbQHsAe0H7I0ABQcBvAHwAe8EAAFDAvAQBwLw + ARQEAAHvAfABvAYHjQAEBwG8Ae8IAAEVArwMBwK8ARQIAAHvAbwFB40ABAcB8wQAAQ4BEQQAARIB8wwH + AfIB6gQAAREBQwEOAwAB8QUHjQADBwG8Ae8DAAEOAW0B8AERAwABFQK8CgcCvAEUAwABEQG8Af8BbQEO + AgAB7wG8BAeNAAMHAfMDAAEOAW0C/wHwAUMDAAESAfMKBwHyAW0DAAERAbwD/wFtAQ4CAAHyBAeNAAMH + AfMDAAEQBP8BBwMAARIB8woHAfIBbQMAAe8F/wERAgAB8gQHjQADBwHzAwABDwEHAv8B8wHsAwABEgHz + CgcB8gFtAwAB7AHzA/8BBwEPAgAB8gQHjQADBwHyARMDAAEPAQcB8wHsBAABFQGSCuwBkgEUBAAB7AHz + Af8BBwEQAgABFAHxBAeNAAIHAZMBBwGUAQsBAAELAQABEAHsGAAB7AH3ARADAAHxBQeNAAEHAW8B+QEH + AvkBAQEgBgABDwFKDikBSgEQCAABEwHwBQeNAAFvARcB+QEHARcD+QEeAwABDwFtAXMB5Q77AeUBcwFt + AQ8EAAETAW0B8AYHjQABFwEHARcCbwL5ARcBbwNtAewBoAHlEPsB5QGgAXMEbQG8AfIHB40AAQcCbwEX + A/kBkwEbA6AB5RT7AeUDoAEbCQeNAAEHARcB+QFvAvkBFwEyAXkc+wJ5CAeNAAIHAW8BFwH5AW8BeQz7 + ATgCMgE4EPsBeQcHjQAEBwFvAQcBeQv7ATgEJgIyATgN+wFYBweNAAcHAnkJ+wEyAfkBLAEyA/kBMgv7 + AVgBeQgHjQADBwFvAQcBbwMHAnkG+wE4AiYBMgEmA/kBJgE4CfsBWAMHAW8GB40AAwcB+QEXAfkBBwEX + AW8BBwGZBvsBOAEsByYBOAn7AZkBBwFvAe8BbwYHjQADBwFvAfkBbwEXAfkBRwIHAXkG+wE4ATIBLAQm + ATIH+wEwATcBeQEHAm8BFwHvAW8BFwQHjQABBwMXAW8BFwP5AW8CBwJ5BfsBOAImASwB+QEmATgF+wEw + ASkBDgFzAW0B9wFHApMBBwJvBAeNAAEHAW8C+QEXA/kBbwGTBAcBeQT7ATgCMgEsATIBOAb7ASkCAAFD + AQ4B7QFHAZMBBwFvARcBBwEXAweNAAIHAW8B+QFvAfkBbwGTBwcCeQFYA/sCOAX7AVgBeQFRASICAAHq + ARAB7QJHAe8BkwH5Ae8B+QMHjQADBwH5AQcB+QIXCQcBmQp5AZkBBwEUAwABEQFtARIBIAFvAgcCRwFv + AweNAAMHAZMBBwH5ApMVBwJtAREBAAHqARABEQEOAW4BBwEXAUcBbwGTBAeNAAUHAZMXBwGSAe8BFAHq + ARIB6wEQAQAB7QEHAZMB+QGTBQeNAB4HAW0BDgEQAQ4BEAEOAQABEQH3AQcBkwYHjQABBwJHBAcB7wFH + ARcBkwFHARcBBwGTAUcBbw0HAfcBQwYAARABQwHwAvMEB40AAQcC+QMHAe8CRwKTAfkBRwEHAZMB+QEX + DgcB9wHtAREGAAHxAv8C9AIHjQABBwL5AwcBkwH5AUcBBwGTAfkBRwEHAZMB+QEXEAcBFQYAAfEE/wH0 + AQeNAAEHAvkDBwGTAfkBRwEHAZMB+QFHAQcBkwH5ARcQBwEVBgAB8QETAfMC/wG8AQeNAAEHAvkFRwGT + AQcBkwH5AUcBBwGTAvkERwFvCwcBFQYAARABAAEQAREDB40AAQcC+QSTAfkBRwEHAZMB+QFHAQcBkwH5 + AUcDkwFvAfkBbwoHAe8B9wERBgAB7QEOAe8CB40AAQcC+QMHAZMB+QFHAQcBkwH5AUcBBwGTAfkBFwMH + AW8B+QFvDAcB7wEQBAAB7QERAQABDgIHjQABBwL5AwcBkwH5AUcBBwGTAfkBRwEHAZMB+QEXAwcBbwH5 + AW8NBwHvARACAAHtAREDAAEOAQeNAAEHAvkDBwGTAfkBRwEHAZMB+QFHAQcBkwH5ARcDBwFvAfkBbwEH + AfEM/wHzAREBAAEOAZIB7wEOAQAB7wEHjQABBwb5AUcCBwGTAfkBRwEHAZMG+QHjEP8BQwEAAbwC/wEO + AQACB40AFAcB8BH/AfQBEQMOAfIDB40AGAcB8g//BweNAC8HjQD/7P/s/+z/7HLsAe0B7ARtAesC7RDs + Au0B7ARtAewB7Q3sAe0B7ARtAesC7RDsAu0B7ARtAewB7Q3sAe0B7ARtAesC7RDsAu0B7ARtAewB7Q3s + Ae0B7ARtAesC7RDsAu0B7ARtAewB7QfsBQcBvAHwAe8EAAFDAvAQBwLwARQEAAHvAfABvAsHAbwB8AHv + BAABQwLwEAcC8AEUBAAB7wHwAbwLBwG8AfAB7wQAAUMC8BAHAvABFAQAAe8B8AG8CwcBvAHwAe8EAAFD + AvAQBwLwARQEAAHvAfABvAoHAbwB7wgAARUCvAwHArwBFAgAAe8BvAkHAbwB7wgAARUCvAwHArwBFAgA + Ae8BvAkHAbwB7wgAARUCvAwHArwBFAgAAe8BvAkHAbwB7wgAARUCvAwHArwBFAgAAe8BvAkHAfMEAAEO + AREEAAESAfMMBwHyAeoEAAERAUMBDgMAAfEJBwHzBAABDgERBAABEgHzDAcB8gHqBAABEQFDAQ4DAAHx + CQcB8wQAAQ4BEQQAARIB8wwHAfIB6gQAAREBQwEOAwAB8QkHAfMEAAEOAREEAAESAfMMBwHyAeoEAAER + AUMBDgMAAfEIBwG8Ae8DAAEOAW0B8AERAwABFQK8CgcCvAEUAwABEQG8Af8BbQEOAgAB7wG8BwcBvAHv + AwABDgFtAfABEQMAARUCvAoHArwBFAMAAREBvAH/AW0BDgIAAe8BvAcHAbwB7wMAAQ4BbQHwAREDAAEV + ArwKBwK8ARQDAAERAbwB/wFtAQ4CAAHvAbwHBwG8Ae8DAAEOAW0B8AERAwABFQK8CgcCvAEUAwABEQG8 + Af8BbQEOAgAB7wG8BwcB8wMAAQ4BbQL/AfABQwMAARIB8woHAfIBbQMAAREBvAP/AW0BDgIAAfIHBwHz + AwABDgFtAv8B8AFDAwABEgHzCgcB8gFtAwABEQG8A/8BbQEOAgAB8gcHAfMDAAEOAW0C/wHwAUMDAAES + AfMKBwHyAW0DAAERAbwD/wFtAQ4CAAHyBwcB8wMAAQ4BbQL/AfABQwMAARIB8woHAfIBbQMAAREBvAP/ + AW0BDgIAAfIHBwHzAwABEAT/AQcDAAESAfMKBwHyAW0DAAHvBf8BEQIAAfIHBwHzAwABEAT/AQcDAAES + AfMKBwHyAW0DAAHvBf8BEQIAAfIHBwHzAwABEAT/AQcDAAESAfMKBwHyAW0DAAHvBf8BEQIAAfIHBwHz + AwABEAT/AQcDAAESAfMKBwHyAW0DAAHvBf8BEQIAAfIHBwHzAwABDwEHAv8B8wHsAwABEgHzCgcB8gFt + AwAB7AHzA/8BBwEPAgAB8gcHAfMDAAEPAQcC/wHzAewDAAESAfMKBwHyAW0DAAHsAfMD/wEHAQ8CAAHy + BwcB8wMAAQ8BBwL/AfMB7AMAARIB8woHAfIBbQMAAewB8wP/AQcBDwIAAfIHBwHzAwABDwEHAv8B8wHs + AwABEgHzCgcB8gFtAwAB7AHzA/8BBwEPAgAB8gcHAfIBEwMAAQ8BBwHzAewEAAEVAZIK7AGSARQEAAHs + AfMB/wEHARACAAEUAfEHBwHyARMDAAEPAQcB8wHsBAABFQGSCuwBkgEUBAAB7AHzAf8BBwEQAgABFAHx + BwcB8gETAwABDwEHAfMB7AQAARUBkgrsAZIBFAQAAewB8wH/AQcBEAIAARQB8QcHAfIBEwMAAQ8BBwHz + AewEAAEVAZIK7AGSARQEAAHsAfMB/wEHARACAAEUAfEIBwHzBAABEAHsGAAB7AH3ARADAAHxCQcB8wQA + ARAB7BgAAewB9wEQAwAB8QkHAfMEAAEQAewYAAHsAfcBEAMAAfEJBwHzBAABEAHsGAAB7AH3ARADAAHx + CQcB8QESCAABDwESDikBEgEQCAABEwHwCQcB8QESCAABDwFKDikBSgEQCAABEwHwCQcB8QESCAABDwFK + DikBSgEQCAABEwHwCQcB8QESCAABDwFKDikBSgEQCAABEwHwCgcB8QFtARIEAAEPAW0B7AGgDl4BoAFz + AW0BDwQAARMBbQHwCwcB8QFtARIEAAEPAW0BcwHlDvsB5QFzAW0BDwQAARMBbQHwCwcB8QFtARIEAAEP + AW0BcwHlDvsB5QFzAW0BDwQAARMBbQHwCwcB8QFtARIEAAEPAW0BcwHlDvsB5QFzAW0BDwQAARMBbQHw + DAcB8gHwBG0B7AKgEF4CoAHsBG0BvAHyDQcB8gHwBG0B7AGgAeUQ+wHlAaABcwRtAbwB8g0HAfIB8ARt + AewBoAHlEPsB5QGgAXMEbQG8AfINBwHyAfAEbQHsAaAB5RD7AeUBoAFzBG0BvAHyDwcBGwSgFF4EoAEb + EQcBGwOgAeUU+wHlA6ABGxEHARsDoAHlFPsB5QOgARsRBwEbA6AB5RT7AeUDoAEbDgcB7wHrAZkBeRxe + AXkBmQ0HAW0B6wJ5HPsCeQ8HAnkc+wJ5DwcCeRz7AnkMBwFtAeoBDgIDAVEdXgF5CQcCbQHqAQABIgH7 + AQMBMB37AXkNBwF5IPsBeQwHAe8B6yD7AXkKBwHvAQABDgESAQABDgEDAVEcXgF5CQcCAAESAQABDgEp + AQABIh37AVgNBwF5ATAf+wFYDAcBEgEOAQMBMB77ATAB6gHvCAcB7wEAAQ4BEgEAAQ4BAwFRGl4CeQoH + AgABEgQAAQ4BMBr7AVgBeQ0HA+oBMBz7AVgBeQkHAeoBbwFtAe8DAAEOAQMBMBn7ATACAwEOARIB6gHv + BgcB6gESAgABDgHqAQ4BbQFRGV4BeQwHAQABbQUAAQ4Bcxn7AVgOBwESAQ4BbQETAQ8BeQEwGfsBWAoH + AW8BbQEBAQABbwMAAQ4BbQFzGfsBIgESAQ4BAAETAQ4B7wYHAW0BAAFtAQABDgETAQ4BFAEiGV4BmQwH + AW0BEgQAAQ4B7AGZGfsBmQ0HARIBAAEOARMBDgFtARQBIhn7AZkKBwEBAW8CAAH5AwABDgISATAW+wEw + AQMBDgEUAW0BDgIAAe8HBwEOAe8BAAEOAeoCAAERAXkXXgF5DQcBEgFtAQABDgFtAQABEAIHAXkX+wF5 + DQcBEwQAAQ4BFAEOAW0BAxf7AXkLBwEAAW8CAAEeBQABDwFzFvsBNwEiAQACEgEOAQABbQHvBwcB7AHv + AQABDgESAusB7AEHAZkBeRJeAXkCmQ4HAesBBwFtAQ4BEgHrAewDBwJ5EvsBWAJ5DgcHAAEOARIB7AJ5 + EvsBWAJ5DAcB6wETAW0EAAEfAW0BAAERAQcCeQz7ATACKQE3ATABNwFYAnkB7AEPAe0BEAIAAfcKBwHr + AW0BDwYHAXkQXgF5AZkTBwHrAewHBwF5EPsBWAGZDwcBEwHrBwABEQMHAXkQ+wFYAZkOBwETAesBFwEf + AQABAQEAAR4BRAEfAewDBwF5C/sBAwIAAiIBUQGZAwcBEQHtARACAAH3CwcB7wHsBwcCmQF5Cl4BeQOZ + DwcCFAETDAcCeQFYCvsBWAJ5AZkPBwEUAewBBwHsAesEAAEPAewEBwJ5AVgK+wFYAnkBmQ8HAQABFAIe + AekBbwEAAQ4B7AGTBQcCeQFYB/sBMAEiAgABEwIRAZIDBwHsAe8BEAFtAewB7xYHDJkSBwIAAewBEw0H + AZkKeQGZEgcB7AEHARQBBwEVAgABDgLsBwcBmQp5AZkSBwLsAQAB7AFvARMB6wHpARcBbwcHAZkGeQFR + ASIDAAERAQ8BAAERAZIEBwHsAe82BwIAAQcBDiwHARUB7AEVAgABDgHsAxUB6iMHARUBRwHpAQcB7wHp + AQcCkwJvDQcB6gEUARUBEwFDAQABEgERAQAB7DwHAgABQwEAARQqBwEVAewBBwEOAewCAAFDAQABDwFt + AREjBwHsApMBFwEHAfkBRwEXAZMBFwGTDQcB9wHqAW0B6gEOAQABEAFtAewB7zwHA+wBDgHtKgcB7AEH + ARUB7AFDAgABDgHrARABkgERJgcBkwEHAvkBkwEHAZMPBwHqAQ8BbQHsAUMBAAHsMwcB8gbzBQcBQwER + AQ4rBwJDAewBQwHsAwABFAHsARQBkhgHAfIG8wUHAUcDBwH5AZMSBwHqAQACbQEOAQABEAHtAwcB8gbz + JgcB8gH0B/8C9AMHAgAB7SsHAQAB7QERAQABEQQAARQBkhcHAfIB9Af/AfQEBwGTAwcBkwHvARcRBwHv + Ae0B7wETAeoBQwFtAe8BBwHyAfQH/wL0IwcB8gv/AfQBBwERApIsBwGSAREGAAEPAZIXBwHyCv8DBwFH + BQcBRwH5ARcTBwLvAfcB7wEHAfIL/wH0IgcBvAH0Cv8BvAEHAZIXBwHxB/QB8A4HARACAAEOApIB7AEA + ARAYBwG8AfQJ/wMHAZMCBwJHAe8B+QKTEQcBbQHsBQcBvAH0Cv8BvAYHBPQB8xgHArwB9Ab/ArwYBwHx + AfQJ/wH0AbwMBwL3AZIBDgEHAvQB8AHxAfMYBwK8AfQG/wG8AvQEBwGTAfkB9AG9AvQB8xAHAu8BbQHs + BAcCvAH0Bv8CvAUHAvQF/wH0AfMZBwa8GQcB8Q3/AbwLBwIPARAB8QH0Bf8B9AHzGQcGvAEHArwDBwFH + AfQBvQX/AfQB8xAHAu8HBwa8BwcI/wH0IwcC9BQHAfIL/wHwDAcBAALvCP8B9CUHAZMI/wH0JQcK/wHz + IgcC/wH0FQcB8gf/AfEOBwHvAQcK/wHzJAcK/wHzJQcI/wH0DAcB8Q//AbwGBwP/AfQCBw3/AfIeBwj/ + AfQMBwHxD/8BvAkHCP8B9AwHAfEP/wG8CQcI/wH0CQcB8RX/BAcD/wIHD/8B8h0HCP8B9AkHAfEV/wcH + CP8B9AkHAfEV/wkHBP8B9AoHAfEX/wMHAv8CBxH/AfIeBwT/AfQKBwHxF/8IBwT/AfQKBwHxF/8bBwHy + D/8BvAsHAbwN/wHyMwcB8g//AbweBwHyD/8BvMIHAUIBTQE+BwABPgMAASgDAAG8AwABXgMAAQEBAAEB + BQAB0AEIFgAD//8A/wD/AP8A/wD/AP8A/wDZAAs= + + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlLibrary/CarControl.vb b/Code/Chapter 29/CarControlLibrary/CarControl.vb new file mode 100644 index 0000000..389da19 --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/CarControl.vb @@ -0,0 +1,141 @@ +Option Explicit On +Option Strict On + +Imports System.ComponentModel + +' Helper enum for images. +Public Enum AnimFrames + Lemon1 + Lemon2 + Lemon3 + AboutToBlow + EngineBlown +End Enum + + _ +Public Class CarControl + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + StretchBox() + End Sub + + ' State data. + Private currFrame As AnimFrames = AnimFrames.Lemon1 + Private currMaxFrame As AnimFrames = AnimFrames.Lemon3 + Private IsAnim As Boolean + Private currSp As Integer = 50 + Private maxSp As Integer = 100 + Private carPetName As String = "Lemon" + Private bottomRect As Rectangle = New Rectangle() + + ' Car events. + _ + Public Event AboutToBlow(ByVal msg As String) + + _ + Public Event BlewUp(ByVal msg As String) + + Private Sub StretchBox() + ' Configure picture box. + currentImage.Top = 0 + currentImage.Left = 0 + currentImage.Height = Me.Height - 50 + currentImage.Width = Me.Width + currentImage.Image = carImages.Images(CType(AnimFrames.Lemon1, Integer)) + ' Figure out size of bottom rect. + bottomRect.X = 0 + bottomRect.Y = Me.Height - 50 + bottomRect.Height = Me.Height - currentImage.Height + bottomRect.Width = Me.Width + End Sub + +#Region "Properties" + ' Used to configure the internal Timer type. + _ + Public Property Animate() As Boolean + Get + Return IsAnim + End Get + Set(ByVal value As Boolean) + IsAnim = value + imageTimer.Enabled = IsAnim + End Set + End Property + + ' Configure pet name. + _ + Public Property PetName() As String + Get + Return carPetName + End Get + Set(ByVal value As String) + carPetName = value + Invalidate() + End Set + End Property + + ' Adjust currSp and currMaxFrame, and fire our events. + _ + Public Property Speed() As Integer + Get + Return currSp + End Get + Set(ByVal value As Integer) + ' Within safe speed? + If currSp <= maxSp Then + currSp = value + currMaxFrame = AnimFrames.Lemon3 + End If + ' About to explode? + If (maxSp - currSp) <= 10 Then + + RaiseEvent AboutToBlow("Slow down dude!") + currMaxFrame = AnimFrames.AboutToBlow + End If + ' Maxed out? + If currSp >= maxSp Then + currSp = maxSp + RaiseEvent BlewUp("Ug...you're toast...") + currMaxFrame = AnimFrames.EngineBlown + End If + End Set + End Property +#End Region + +#Region "Event handlers" + Private Sub imageTimer_Tick(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles imageTimer.Tick + If IsAnim Then + currentImage.Image = carImages.Images(CType(currFrame, Integer)) + End If + ' Bump frame. + Dim nextFrame As Integer = (CType(currFrame, Integer)) + 1 + currFrame = CType(nextFrame, AnimFrames) + If currFrame > currMaxFrame Then + currFrame = AnimFrames.Lemon1 + End If + End Sub + + Private Sub CarControl_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) _ + Handles MyBase.Paint + ' Render the pet name on the bottom of the control. + Dim g As Graphics = e.Graphics + g.FillRectangle(Brushes.GreenYellow, bottomRect) + g.DrawString(PetName, New Font("Times New Roman", 15), Brushes.Black, bottomRect) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 29/CarControlLibrary/CarControlLibrary.sln b/Code/Chapter 29/CarControlLibrary/CarControlLibrary.sln new file mode 100644 index 0000000..c8de34d --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/CarControlLibrary.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarControlLibrary", "CarControlLibrary.vbproj", "{F743E575-44C3-47F2-9F52-F0671227CD81}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F743E575-44C3-47F2-9F52-F0671227CD81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F743E575-44C3-47F2-9F52-F0671227CD81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F743E575-44C3-47F2-9F52-F0671227CD81}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F743E575-44C3-47F2-9F52-F0671227CD81}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/CarControlLibrary/CarControlLibrary.suo b/Code/Chapter 29/CarControlLibrary/CarControlLibrary.suo new file mode 100644 index 0000000000000000000000000000000000000000..dac00f828c09d5f8e766fa5a63f9868858d3fab5 GIT binary patch literal 20992 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F743E575-44C3-47F2-9F52-F0671227CD81} + Library + CarControlLibrary + CarControlLibrary + Windows + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CarControlLibrary.xml + _MYFORMS=True + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarControlLibrary.xml + _MYFORMS=True + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + UserControl + + + CarControl.vb + + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + CarControl.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlLibrary/CarControlLibrary.vbproj.user b/Code/Chapter 29/CarControlLibrary/CarControlLibrary.vbproj.user new file mode 100644 index 0000000..1659b79 --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/CarControlLibrary.vbproj.user @@ -0,0 +1,17 @@ + + + ShowAllFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlLibrary/EngineBlown.bmp b/Code/Chapter 29/CarControlLibrary/EngineBlown.bmp new file mode 100644 index 0000000000000000000000000000000000000000..950b48fc1fddcfa30e625a10077b1526a9067b19 GIT binary patch literal 3382 zcmeH{ze`*}5XVOlo&i(XSlPrXc7X-K)?To&w%dQfCdF0Ofq<}`MG{Dn#=qdI6me^9 zVr3ynAli9cG5O5w`+2?uB`LFa`)l?)GoLs6?soUKUy8TwWs%pc-qd|bR?5MPGWoc~ zXx-aHgs)5{WnyG0)9F;E-=}i-?UO7oFU!ixima}#%G%nRtgo-j#>R$hZf?rf)|MO` z9LV0@p6u@K%FfP?Ox~*O@2k9*3(+50zFz#4i<=vH_xTHn0zJ|bJ(q337O(|u!E9P2 z5qrcQu}AC?ySXLo343CbuqW(HlCfv(8GFW%u`7FJuh}yP#z6i+pny{l6;IC)UvFgPX*0fqoWfFZ!(=r9Br0t^9$07Fo0a0EDlaj1F)urS*v(K8*p zJu)nj@Jr-t0yGCk|$(LcvaAflN)fxvi$Z%xi;KBU5amuh{STYcqg#HS^l5xz4 zGKLHbUpjHPlMG9?dN_-{4R#CIU{Dwo28BUkP#FAmf+548FenTe2Ex$M!=NxI3DXaV7!(EtK*^s8rZ_61NQ}rn!l549G*Mp3M>#w^l%t~~IX*s?lamuUKR=hVvopE8 zyp*e}E4jYDmfPD~xxc@chldBbo2z^{J>_>ip}O`Pu!(rSv$(cZ)BbP&umY7gtFG6( zYC6YBrPEsBmDc@n@#TqcoilTS;wajl7ywt%EMg=kun@O>wB2 zg|FxpLCZ}^Hf8Qg(vR=!?s!B$P;&u& zk6PYOV8=z{D=$&UWGwdST3_w1NSIrJ;kSC3o7~<43vRdNH|D$I;Y77FZ$c$K7re}eJK%M&CljpdQv=DUlZA@LW9kQvKiF3 zeF87jX#A41sfb^))yT^F6n$|h_x2>cOP%ZY@x6ZSU^sX=&&cz(x@O_^FAv;4R<~$W Vz1e7b|B0QpS@pEOZ0ygRe*urNLE)@Wo>Ou*4Ni%V`D=$H#cQ# zYfJX__GB`d$ap-Kot+(-zERoTRe2|8qTjQ8Ir|}JS6A}((`O0=Mr0&Lu9g8UparyG znpT#G9?>IuM33keme3P=Vv*1jIv2_489k$Cgp97Nm9=KC95@H+2NDH>f~a_TP637h zLx3T`;7Bk87y=9dh5&2Wrh%iJLtaTBN2t$M+Q%gB} z3#n86SbKY|J5W(O;qq2fJHeDFnkbN9O4LqlCXys-Cu;lS@Y?9qPt;G;w?~wypXg13 zA;FO7gFQC7;&+e2m9srYdXTA?Vasr2>iMHJ4tkK`$i~5q`Qs)i!;)diKx7K~D*#I- zFk{LH85aH+|0+BaYq^7+d0+EUH?|M-g?82Vw| z^?p~&;@rDaxjmw=+O&7)LF5^>0{V9ZJd)90nLt2<^k1$m#L*%*u##^ z{>bky>tcsIzwNXu*Rr{Lj|F?t<+8qRA604FD(p03PTF>}YIce?d+Y43 zI&Kqeqm{gh?DfvYh2%q-Z!Eo*5mf`0TC0sBKx8O#|9FkUj@gdK@^{=rN-Pg3?L)Kv zqCnSgA;V<_+ICiE_M<1FV|JnTcT4o!OSPy`%Ky^bKY_lFptlLNyZ^K4Milm^l_&!0 zY_4=OH%c8*x=m{KAD`6GPxUwU-wtSD6lr|=u-WYNNX?#2ntfNBmHm6{KMG4{x){+h HJWcosh}3(4 literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/CarControlLibrary/Lemon2.bmp b/Code/Chapter 29/CarControlLibrary/Lemon2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c37ecfa767479ed01926d4ddb2f75d6f576fc1c7 GIT binary patch literal 3382 zcmeH`u}&L75QYcIk{yW@G*mR93SFd?kZ9doqM@eSSD;DZiaJsxr0pn@NGa0r1g=tq zt)U4O1rmys&>>MwzM1vecjvPKkuqoR-R(dB%zQUz4@bMN#gE;d$Xo8-P1l+XO5jzw z_<4=9EkDL0d}TZ?7tY+uWHOP-&x!o`@kM&Qo(u*9Szlk5jg1Z2+}xC{tu5K!-jt+G;uYjIQjJy=LzmI0yO%3I&pasCau$0fqoW zfFZ!(NH7E#0t^9$0E1(~5MT%}1Q-Ggjt)bBA;1t|2rvXigCoEZj6>BYfWp;2iIrLC z_Q;G8~zH{%Vbb8Du!JaqwXNx=G5gWLPo~nTGxofF+Zd zF=d1d3ttv>cqbW_Z1Zpy`!(2GK!ZVHP#6>jg+XEPpA!rj28BUk$S_cbg&zimL19oB zD9u8LL19oB6ab}vrkIkbm?AYI`v`}6ZSzEVBcJ8)@KBD9j^z0GSWZq($UAH#bVrIhJ$LvE)2!0eSdrEeW)Z)s63T`jQ$w}1dBpBs zpa7s^Wo8yS%OHvq%5s%ftkISEn|g$?(X-e<)y#eU$>Ls zNB^mQt8d@s3C;5C+-+(H(t^1mEF?6dY+!FmwUk!Gw#MEeFO{C}UnE*uyab-b)A7Ko z%P-955&P=!)1&@3?EEKo)u`Nd?TWXwy1kju+|APJ2{X}dmiDVM8gBOkSOv?qWoc}^ Ye$&1Lv7}kBZC{z-Y0ZoVzza8j0k+rnVSlPrXc7XxG*8af8+HU>@n-o`B2Li%$7D*sQ8vlZ;QpBmX ziIs&QfoLbBc=^0HyL&sjcU(xytT#I|-}mdYZ+6`u@4ghjc2`ASvwG8v6K%JlnG?!SGK)zwv5TU(R$^>x|U*pSW5P1)MolI`tn+1c5V z!^1-vkH@mVzb|`xdop>ea&VyXUM@v{WchmeQ!a0B<=y8m6bg*UNQ_*z0WF{fv|ySR zmxvzGBYH%S=oXgH6MABk&=We7Wb}-l(KA9uSN6(YvsVt>1N8%m0zpAkygau6Lx3T` z5MXd57y=9dh5$o=!7*V7Fa#I^3;_m5hatcaUM9r5e92rgd@TbVaU`{?%qP` zlt1>~Uh582)J}MLtErt}N)$~LNH8U8Cya?CiQ0+UejHvKo%)ITiTZX#iTa7&Bp4D5 zi9Xn|(G`Ds6lU&rjPxK=FT=e*oP#6>jg+XCZ82ojDA;X|BC=3|}(lGFcL19oB6b4c= z&|y#*6b1!Ash>%v1S(FE9Fcv5Lp`_oM0q72<>=^0j*pM!ux_?(Xj7;o(6ZA0OrZm&%8;Grr>q-L-GPCi3~t^4eC-_y6?|J23Lgy6gQe z+unW9QoKE)=W5GA%S_}9tAJrkQJedKe_`q}HI6N5FQBvdq75h;UZzU5u$jeHf93Bl z>(dT-ezVk-8`-=EuP5%kCJ(wdVvFBCm&^LAzDj8`_1tMhOImxg>ny!Cd+Y3}o_U*K zhAMf99Q19)C&@>n)-ZRjBj&oz40V9a48yC+U1YR4pz`@)E)?i>dZ!yu+s{(i0= zF)yHUCvkHj4@A_?qmhx6%Ph|Vp1Y&Ce{1Q5v{E&f0+qCA)3{rSMQ*JPr{)Qmm%7>l z%lX?$`SUJv_fMdF1P#n0`o_EYYP^@rx!YG}?mo?b);hoS$Cdd3#ST9|(s%I-B03W= wf8^hDANsG+z>% literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Application.Designer.vb b/Code/Chapter 29/CarControlLibrary/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Application.myapp b/Code/Chapter 29/CarControlLibrary/My Project/Application.myapp new file mode 100644 index 0000000..758895d --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 1 + true + diff --git a/Code/Chapter 29/CarControlLibrary/My Project/AssemblyInfo.vb b/Code/Chapter 29/CarControlLibrary/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..ab1a21d --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/AssemblyInfo.vb @@ -0,0 +1,34 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: + + + diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Resources.Designer.vb b/Code/Chapter 29/CarControlLibrary/My Project/Resources.Designer.vb new file mode 100644 index 0000000..296aaa4 --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarControlLibrary.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Resources.resx b/Code/Chapter 29/CarControlLibrary/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Settings.Designer.vb b/Code/Chapter 29/CarControlLibrary/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b48486f --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarControlLibrary.My.MySettings + Get + Return Global.CarControlLibrary.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarControlLibrary/My Project/Settings.settings b/Code/Chapter 29/CarControlLibrary/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/CarControlLibrary/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/CarControlTestForm/CarControlTestForm.sln b/Code/Chapter 29/CarControlTestForm/CarControlTestForm.sln new file mode 100644 index 0000000..83fe86a --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/CarControlTestForm.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CarControlTestForm", "CarControlTestForm.vbproj", "{2EB0CD99-5EFC-439B-B928-5A645159E26F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2EB0CD99-5EFC-439B-B928-5A645159E26F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2EB0CD99-5EFC-439B-B928-5A645159E26F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2EB0CD99-5EFC-439B-B928-5A645159E26F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2EB0CD99-5EFC-439B-B928-5A645159E26F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/CarControlTestForm/CarControlTestForm.suo b/Code/Chapter 29/CarControlTestForm/CarControlTestForm.suo new file mode 100644 index 0000000000000000000000000000000000000000..76f079b4c9002b83b40f2ba48d78b1005206f1e3 GIT binary patch literal 22016 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 XE!S4@ + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2EB0CD99-5EFC-439B-B928-5A645159E26F} + WinExe + CarControlTestForm.My.MyApplication + CarControlTestForm + CarControlTestForm + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CarControlTestForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CarControlTestForm.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + False + ..\CarControlLibrary\bin\Debug\CarControlLibrary.dll + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlTestForm/CarControlTestForm.vbproj.user b/Code/Chapter 29/CarControlTestForm/CarControlTestForm.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/CarControlTestForm.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlTestForm/MainForm.Designer.vb b/Code/Chapter 29/CarControlTestForm/MainForm.Designer.vb new file mode 100644 index 0000000..030d321 --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/MainForm.Designer.vb @@ -0,0 +1,100 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.label1 = New System.Windows.Forms.Label + Me.numericUpDownCarSpeed = New System.Windows.Forms.NumericUpDown + Me.lblEventData = New System.Windows.Forms.Label + Me.lblCurrentSpeed = New System.Windows.Forms.Label + Me.myCarControl = New CarControlLibrary.CarControl + CType(Me.numericUpDownCarSpeed, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(179, 90) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(73, 13) + Me.label1.TabIndex = 9 + Me.label1.Text = "Speed +/- 10 " + ' + 'numericUpDownCarSpeed + ' + Me.numericUpDownCarSpeed.Increment = New Decimal(New Integer() {10, 0, 0, 0}) + Me.numericUpDownCarSpeed.Location = New System.Drawing.Point(180, 116) + Me.numericUpDownCarSpeed.Maximum = New Decimal(New Integer() {300, 0, 0, 0}) + Me.numericUpDownCarSpeed.Name = "numericUpDownCarSpeed" + Me.numericUpDownCarSpeed.Size = New System.Drawing.Size(120, 20) + Me.numericUpDownCarSpeed.TabIndex = 8 + ' + 'lblEventData + ' + Me.lblEventData.AutoSize = True + Me.lblEventData.Location = New System.Drawing.Point(179, 53) + Me.lblEventData.Name = "lblEventData" + Me.lblEventData.Size = New System.Drawing.Size(64, 13) + Me.lblEventData.TabIndex = 7 + Me.lblEventData.Text = "Event Data:" + ' + 'lblCurrentSpeed + ' + Me.lblCurrentSpeed.AutoSize = True + Me.lblCurrentSpeed.Location = New System.Drawing.Point(179, 25) + Me.lblCurrentSpeed.Name = "lblCurrentSpeed" + Me.lblCurrentSpeed.Size = New System.Drawing.Size(78, 13) + Me.lblCurrentSpeed.TabIndex = 6 + Me.lblCurrentSpeed.Text = "Current Speed:" + ' + 'myCarControl + ' + Me.myCarControl.Animate = False + Me.myCarControl.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.myCarControl.Location = New System.Drawing.Point(12, 12) + Me.myCarControl.Name = "myCarControl" + Me.myCarControl.PetName = "Lemon" + Me.myCarControl.Size = New System.Drawing.Size(150, 150) + Me.myCarControl.Speed = 50 + Me.myCarControl.TabIndex = 5 + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(337, 182) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.numericUpDownCarSpeed) + Me.Controls.Add(Me.lblEventData) + Me.Controls.Add(Me.lblCurrentSpeed) + Me.Controls.Add(Me.myCarControl) + Me.Name = "MainForm" + Me.Text = "CarControl Tester" + CType(Me.numericUpDownCarSpeed, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents numericUpDownCarSpeed As System.Windows.Forms.NumericUpDown + Private WithEvents lblEventData As System.Windows.Forms.Label + Private WithEvents lblCurrentSpeed As System.Windows.Forms.Label + Private WithEvents myCarControl As CarControlLibrary.CarControl + +End Class diff --git a/Code/Chapter 29/CarControlTestForm/MainForm.resx b/Code/Chapter 29/CarControlTestForm/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlTestForm/MainForm.vb b/Code/Chapter 29/CarControlTestForm/MainForm.vb new file mode 100644 index 0000000..aa63cf0 --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/MainForm.vb @@ -0,0 +1,31 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + CenterToScreen() + + lblCurrentSpeed.Text = String.Format("Current Speed: {0} ", Me.myCarControl.Speed.ToString()) + numericUpDownCarSpeed.Value = myCarControl.Speed + + ' Configure the car control. + myCarControl.Animate = True + myCarControl.PetName = "Zippy" + End Sub + Private Sub myCarControl_AboutToBlow(ByVal msg As System.String) Handles myCarControl.AboutToBlow + lblEventData.Text = String.Format("Event Data: {0} ", msg) + End Sub + + Private Sub myCarControl_BlewUp(ByVal msg As System.String) Handles myCarControl.BlewUp + lblEventData.Text = String.Format("Event Data: {0} ", msg) + End Sub + + Private Sub numericUpDownCarSpeed_ValueChanged(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles numericUpDownCarSpeed.ValueChanged + ' Assume the min of this NumericUpDown is 0 and max is 300. + Me.myCarControl.Speed = CType(numericUpDownCarSpeed.Value, Integer) + lblCurrentSpeed.Text = String.Format("Current Speed: {0} ", Me.myCarControl.Speed.ToString()) + End Sub +End Class diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Application.Designer.vb b/Code/Chapter 29/CarControlTestForm/My Project/Application.Designer.vb new file mode 100644 index 0000000..f312584 --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.CarControlTestForm.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Application.myapp b/Code/Chapter 29/CarControlTestForm/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlTestForm/My Project/AssemblyInfo.vb b/Code/Chapter 29/CarControlTestForm/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..816af5a --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Resources.Designer.vb b/Code/Chapter 29/CarControlTestForm/My Project/Resources.Designer.vb new file mode 100644 index 0000000..1c9e825 --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CarControlTestForm.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Resources.resx b/Code/Chapter 29/CarControlTestForm/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Settings.Designer.vb b/Code/Chapter 29/CarControlTestForm/My Project/Settings.Designer.vb new file mode 100644 index 0000000..257600e --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CarControlTestForm.My.MySettings + Get + Return Global.CarControlTestForm.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/CarControlTestForm/My Project/Settings.settings b/Code/Chapter 29/CarControlTestForm/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/CarControlTestForm/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/ControlsByHand/ControlsByHand.vb b/Code/Chapter 29/ControlsByHand/ControlsByHand.vb new file mode 100644 index 0000000..fac3ee7 --- /dev/null +++ b/Code/Chapter 29/ControlsByHand/ControlsByHand.vb @@ -0,0 +1,62 @@ +Option Explicit On +Option Strict On + +Imports System.Windows.Forms +Imports System.Drawing + + Class MainWindow + Inherits Form + ' Form widget member variables. + Private firstNameBox As New TextBox() + Private WithEvents btnShowControls As New Button() + + Public Sub New() + ' Configure Form. + Me.Text = "Simple Controls" + Me.Width = 300 + Me.Height = 200 + CenterToScreen() + + ' Add a new textbox to the Form. + firstNameBox.Text = "Hello" + firstNameBox.Size = New Size(150, 50) + firstNameBox.Location = New Point(10, 10) + Me.Controls.Add(firstNameBox) + + ' Add a new button to the Form. + btnShowControls.Text = "Click Me" + btnShowControls.Size = New Size(90, 30) + btnShowControls.Location = New Point(10, 70) + btnShowControls.BackColor = Color.DodgerBlue + Me.Controls.Add(btnShowControls) + End Sub + + ' Handle Button's Click event. + Private Sub btnShowControls_Clicked(ByVal sender As Object, ByVal e As EventArgs) Handles btnShowControls.Click + ' Call ToString() on each control in the + ' Form's Controls collection + Dim ctrlInfo As String = "" + For Each c As Control In Me.Controls + ctrlInfo += String.Format("Control: {0}" & Chr(10), c.ToString()) + Next + MessageBox.Show(ctrlInfo, "Controls on Form") + + ' Uncomment to test. + ' DisableAllButtons() + End Sub + + ' This method disables all buttons on the Form. + Private Sub DisableAllButtons() + For Each c As Control In Me.Controls + If TypeOf c Is Button Then + CType(c, Button).Enabled = False + End If + Next + End Sub + End Class + + Class Program + Public Shared Sub Main(ByVal args As String()) + Application.Run(New MainWindow()) + End Sub + End Class \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/CarNode.bmp b/Code/Chapter 29/ExoticControls/CarNode.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c25da69cb95c06d2812da0747ae7a52aaf5894b5 GIT binary patch literal 1334 zcmb7@v1%JZ5QfK~fG{qi#+93>it7P`TJ-`qZtZSfK}`x(CS|~2*v>@~NRh@*pejW? zwbewG3WEs5>I5k!-^|GlA*9GjyR-Y>?)=})-i;?GFQl%Mp2%xPFL!NE`rVDaE>xf6 z=lM*8zszP`pl2xa`CR7T=JNRUqx5<`>G%6`aBv`l!9WfV59R3SNQT3q93LOc+1Z&) zCKDNt$1)m?WcDWH^fcs3?j^pve7XN2_YV*9?$c+ClxDO>^KPnWil%6qT69Yc-Ovr) z&<#DeHS~twm^Ac;P7p_TbVqjtM-S$~JiMHhUh!8FDVtP6%AQVPP#6>jg`tpOP#6>j zg+XB`Oc)dfg+XCZ7z!N*g+XCZ7!(E#G&mFvO^%4F017dGjpj7;d}LS*bHm6;YOqup zxM>Uw7K5eA0*Aq2a2Om0N0kZ=gTY`h7_xK*hrwVlI9@?tCB&!uF|YDwb)dq#v8qaq zcY~>6+AwG^HM|=)8%Y}84evUR@UDy_VF(xk28V$(G}glqFa!(%1F31~Fa!(%LjVx?JIR8L!6GAv zF*i7(a_1V8SMotFE-qv`oyz6qrCeWM%iZ0b+}_^GVzH3raw)6TO4jSOY&IL&ZnyII zGvxiv4d3yM>gG3)fqXT~yg3ay=ZeVwImZ5e3A;!r;a~AQ*Kt*>ED>+HN+W5GpDq?X c4ZGMa{jL2q|8qlfW!~Jd%b(z-)!@IoUpLDHHvj+t literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/ExoticControls/ExoticControls.sln b/Code/Chapter 29/ExoticControls/ExoticControls.sln new file mode 100644 index 0000000..d5f20e2 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/ExoticControls.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExoticControls", "ExoticControls.vbproj", "{9CE71325-3D2D-485E-86A2-74F7FC4257D4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9CE71325-3D2D-485E-86A2-74F7FC4257D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CE71325-3D2D-485E-86A2-74F7FC4257D4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CE71325-3D2D-485E-86A2-74F7FC4257D4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CE71325-3D2D-485E-86A2-74F7FC4257D4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/ExoticControls/ExoticControls.suo b/Code/Chapter 29/ExoticControls/ExoticControls.suo new file mode 100644 index 0000000000000000000000000000000000000000..7d3de76fd9373674889a95a4bc6a8f02e69de4b8 GIT binary patch literal 21504 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 Uze4_1;Q8QpnC8xv&)gaKKU3E4^#A|> literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/ExoticControls/ExoticControls.vbproj b/Code/Chapter 29/ExoticControls/ExoticControls.vbproj new file mode 100644 index 0000000..9a0b072 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/ExoticControls.vbproj @@ -0,0 +1,158 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {9CE71325-3D2D-485E-86A2-74F7FC4257D4} + WinExe + ExoticControls.My.MyApplication + ExoticControls + ExoticControls + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ExoticControls.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ExoticControls.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + Always + + + + Always + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/ExoticControls.vbproj.user b/Code/Chapter 29/ExoticControls/ExoticControls.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/ExoticControls.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/MainForm.Designer.vb b/Code/Chapter 29/ExoticControls/MainForm.Designer.vb new file mode 100644 index 0000000..8af285c --- /dev/null +++ b/Code/Chapter 29/ExoticControls/MainForm.Designer.vb @@ -0,0 +1,515 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(MainForm)) + Me.txtInput = New System.Windows.Forms.TextBox + Me.lblErrorInstructions = New System.Windows.Forms.Label + Me.pageErrorProvider = New System.Windows.Forms.TabPage + Me.btnValidate = New System.Windows.Forms.Button + Me.btnGetSelections = New System.Windows.Forms.Button + Me.lblNumericUpDown = New System.Windows.Forms.Label + Me.lblDomainUpDown = New System.Windows.Forms.Label + Me.numericUpDown = New System.Windows.Forms.NumericUpDown + Me.domainUpDown = New System.Windows.Forms.DomainUpDown + Me.pageTreeView = New System.Windows.Forms.TabPage + Me.lblNodeInfo = New System.Windows.Forms.Label + Me.treeViewCars = New System.Windows.Forms.TreeView + Me.myWebBrowser = New System.Windows.Forms.WebBrowser + Me.txtUrl = New System.Windows.Forms.TextBox + Me.lblURL = New System.Windows.Forms.Label + Me.btnGO = New System.Windows.Forms.Button + Me.pageWebBrowser = New System.Windows.Forms.TabPage + Me.tabControlExoticControls = New System.Windows.Forms.TabControl + Me.pageTrackBars = New System.Windows.Forms.TabPage + Me.pagePanels = New System.Windows.Forms.TabPage + Me.panelTextBoxes = New System.Windows.Forms.Panel + Me.lblInstructions = New System.Windows.Forms.Label + Me.txtUpperText = New System.Windows.Forms.TextBox + Me.txtNormalText = New System.Windows.Forms.TextBox + Me.btnHidePanel = New System.Windows.Forms.Button + Me.btnShowPanel = New System.Windows.Forms.Button + Me.pageUpDown = New System.Windows.Forms.TabPage + Me.lblCurrSel = New System.Windows.Forms.Label + Me.lblCurrColor = New System.Windows.Forms.Label + Me.blueTrackBar = New System.Windows.Forms.TrackBar + Me.lblBlue = New System.Windows.Forms.Label + Me.lblGreen = New System.Windows.Forms.Label + Me.greenTrackBar = New System.Windows.Forms.TrackBar + Me.redTrackBar = New System.Windows.Forms.TrackBar + Me.lblRed = New System.Windows.Forms.Label + Me.colorBox = New System.Windows.Forms.PictureBox + Me.imageListTreeView = New System.Windows.Forms.ImageList(Me.components) + Me.tooManyCharactersErrorProvider = New System.Windows.Forms.ErrorProvider(Me.components) + Me.pageErrorProvider.SuspendLayout() + CType(Me.numericUpDown, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pageTreeView.SuspendLayout() + Me.pageWebBrowser.SuspendLayout() + Me.tabControlExoticControls.SuspendLayout() + Me.pageTrackBars.SuspendLayout() + Me.pagePanels.SuspendLayout() + Me.panelTextBoxes.SuspendLayout() + Me.pageUpDown.SuspendLayout() + CType(Me.blueTrackBar, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.greenTrackBar, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.redTrackBar, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.colorBox, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.tooManyCharactersErrorProvider, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'txtInput + ' + Me.txtInput.Location = New System.Drawing.Point(196, 72) + Me.txtInput.Name = "txtInput" + Me.txtInput.Size = New System.Drawing.Size(181, 20) + Me.txtInput.TabIndex = 3 + ' + 'lblErrorInstructions + ' + Me.lblErrorInstructions.Font = New System.Drawing.Font("Arial Black", 12.0!) + Me.lblErrorInstructions.Location = New System.Drawing.Point(45, 8) + Me.lblErrorInstructions.Name = "lblErrorInstructions" + Me.lblErrorInstructions.Size = New System.Drawing.Size(376, 56) + Me.lblErrorInstructions.TabIndex = 2 + Me.lblErrorInstructions.Text = "The following text box only allows 5 characters. Try to enter more..." + ' + 'pageErrorProvider + ' + Me.pageErrorProvider.Controls.Add(Me.txtInput) + Me.pageErrorProvider.Controls.Add(Me.lblErrorInstructions) + Me.pageErrorProvider.Controls.Add(Me.btnValidate) + Me.pageErrorProvider.Location = New System.Drawing.Point(4, 22) + Me.pageErrorProvider.Name = "pageErrorProvider" + Me.pageErrorProvider.Padding = New System.Windows.Forms.Padding(3) + Me.pageErrorProvider.Size = New System.Drawing.Size(636, 341) + Me.pageErrorProvider.TabIndex = 3 + Me.pageErrorProvider.Text = "Error Provider" + ' + 'btnValidate + ' + Me.btnValidate.Location = New System.Drawing.Point(53, 72) + Me.btnValidate.Name = "btnValidate" + Me.btnValidate.Size = New System.Drawing.Size(112, 32) + Me.btnValidate.TabIndex = 1 + Me.btnValidate.Text = "OK" + ' + 'btnGetSelections + ' + Me.btnGetSelections.Location = New System.Drawing.Point(53, 136) + Me.btnGetSelections.Name = "btnGetSelections" + Me.btnGetSelections.Size = New System.Drawing.Size(136, 24) + Me.btnGetSelections.TabIndex = 4 + Me.btnGetSelections.Text = "Get Current Selections" + ' + 'lblNumericUpDown + ' + Me.lblNumericUpDown.Font = New System.Drawing.Font("Verdana", 12.0!) + Me.lblNumericUpDown.Location = New System.Drawing.Point(45, 80) + Me.lblNumericUpDown.Name = "lblNumericUpDown" + Me.lblNumericUpDown.Size = New System.Drawing.Size(221, 32) + Me.lblNumericUpDown.TabIndex = 3 + Me.lblNumericUpDown.Text = "Numeric UpDown Control" + ' + 'lblDomainUpDown + ' + Me.lblDomainUpDown.Font = New System.Drawing.Font("Verdana", 12.0!) + Me.lblDomainUpDown.Location = New System.Drawing.Point(45, 24) + Me.lblDomainUpDown.Name = "lblDomainUpDown" + Me.lblDomainUpDown.Size = New System.Drawing.Size(221, 32) + Me.lblDomainUpDown.TabIndex = 2 + Me.lblDomainUpDown.Text = "Domain UpDown Control" + ' + 'numericUpDown + ' + Me.numericUpDown.Location = New System.Drawing.Point(272, 80) + Me.numericUpDown.Maximum = New Decimal(New Integer() {5000, 0, 0, 0}) + Me.numericUpDown.Name = "numericUpDown" + Me.numericUpDown.Size = New System.Drawing.Size(168, 20) + Me.numericUpDown.TabIndex = 1 + Me.numericUpDown.ThousandsSeparator = True + Me.numericUpDown.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left + ' + 'domainUpDown + ' + Me.domainUpDown.Items.Add("Another Selection") + Me.domainUpDown.Items.Add("Final Selection") + Me.domainUpDown.Items.Add("Selection One") + Me.domainUpDown.Items.Add("Third Selection") + Me.domainUpDown.Location = New System.Drawing.Point(272, 24) + Me.domainUpDown.Name = "domainUpDown" + Me.domainUpDown.Size = New System.Drawing.Size(168, 20) + Me.domainUpDown.Sorted = True + Me.domainUpDown.TabIndex = 0 + Me.domainUpDown.Text = "Some Item" + Me.domainUpDown.Wrap = True + ' + 'pageTreeView + ' + Me.pageTreeView.Controls.Add(Me.lblNodeInfo) + Me.pageTreeView.Controls.Add(Me.treeViewCars) + Me.pageTreeView.Location = New System.Drawing.Point(4, 22) + Me.pageTreeView.Name = "pageTreeView" + Me.pageTreeView.Padding = New System.Windows.Forms.Padding(3) + Me.pageTreeView.Size = New System.Drawing.Size(636, 341) + Me.pageTreeView.TabIndex = 4 + Me.pageTreeView.Text = "Tree View" + ' + 'lblNodeInfo + ' + Me.lblNodeInfo.AutoSize = True + Me.lblNodeInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblNodeInfo.Location = New System.Drawing.Point(267, 6) + Me.lblNodeInfo.Name = "lblNodeInfo" + Me.lblNodeInfo.Size = New System.Drawing.Size(78, 15) + Me.lblNodeInfo.TabIndex = 1 + Me.lblNodeInfo.Text = "Tree View Info" + ' + 'treeViewCars + ' + Me.treeViewCars.ImageIndex = 0 + Me.treeViewCars.ImageList = Me.imageListTreeView + Me.treeViewCars.Location = New System.Drawing.Point(43, 6) + Me.treeViewCars.Name = "treeViewCars" + Me.treeViewCars.SelectedImageIndex = 0 + Me.treeViewCars.Size = New System.Drawing.Size(206, 251) + Me.treeViewCars.TabIndex = 0 + ' + 'myWebBrowser + ' + Me.myWebBrowser.Location = New System.Drawing.Point(45, 37) + Me.myWebBrowser.Name = "myWebBrowser" + Me.myWebBrowser.Size = New System.Drawing.Size(585, 298) + Me.myWebBrowser.TabIndex = 4 + ' + 'txtUrl + ' + Me.txtUrl.Location = New System.Drawing.Point(148, 7) + Me.txtUrl.Name = "txtUrl" + Me.txtUrl.Size = New System.Drawing.Size(248, 20) + Me.txtUrl.TabIndex = 1 + Me.txtUrl.Text = "http://www.intertechtraining.com" + ' + 'lblURL + ' + Me.lblURL.AutoSize = True + Me.lblURL.Location = New System.Drawing.Point(44, 7) + Me.lblURL.Name = "lblURL" + Me.lblURL.Size = New System.Drawing.Size(101, 13) + Me.lblURL.TabIndex = 0 + Me.lblURL.Text = "Please Enter a URL" + ' + 'btnGO + ' + Me.btnGO.Location = New System.Drawing.Point(403, 7) + Me.btnGO.Name = "btnGO" + Me.btnGO.Size = New System.Drawing.Size(46, 23) + Me.btnGO.TabIndex = 3 + Me.btnGO.Text = "Go!" + ' + 'pageWebBrowser + ' + Me.pageWebBrowser.Controls.Add(Me.btnGO) + Me.pageWebBrowser.Controls.Add(Me.myWebBrowser) + Me.pageWebBrowser.Controls.Add(Me.txtUrl) + Me.pageWebBrowser.Controls.Add(Me.lblURL) + Me.pageWebBrowser.Location = New System.Drawing.Point(4, 22) + Me.pageWebBrowser.Name = "pageWebBrowser" + Me.pageWebBrowser.Padding = New System.Windows.Forms.Padding(3) + Me.pageWebBrowser.Size = New System.Drawing.Size(636, 341) + Me.pageWebBrowser.TabIndex = 5 + Me.pageWebBrowser.Text = "Web Browser" + ' + 'tabControlExoticControls + ' + Me.tabControlExoticControls.Controls.Add(Me.pageTrackBars) + Me.tabControlExoticControls.Controls.Add(Me.pagePanels) + Me.tabControlExoticControls.Controls.Add(Me.pageUpDown) + Me.tabControlExoticControls.Controls.Add(Me.pageErrorProvider) + Me.tabControlExoticControls.Controls.Add(Me.pageTreeView) + Me.tabControlExoticControls.Controls.Add(Me.pageWebBrowser) + Me.tabControlExoticControls.Location = New System.Drawing.Point(11, 16) + Me.tabControlExoticControls.Name = "tabControlExoticControls" + Me.tabControlExoticControls.SelectedIndex = 0 + Me.tabControlExoticControls.Size = New System.Drawing.Size(644, 367) + Me.tabControlExoticControls.TabIndex = 1 + ' + 'pageTrackBars + ' + Me.pageTrackBars.Controls.Add(Me.lblGreen) + Me.pageTrackBars.Controls.Add(Me.lblRed) + Me.pageTrackBars.Controls.Add(Me.blueTrackBar) + Me.pageTrackBars.Controls.Add(Me.lblBlue) + Me.pageTrackBars.Controls.Add(Me.greenTrackBar) + Me.pageTrackBars.Controls.Add(Me.redTrackBar) + Me.pageTrackBars.Controls.Add(Me.lblCurrColor) + Me.pageTrackBars.Controls.Add(Me.colorBox) + Me.pageTrackBars.Location = New System.Drawing.Point(4, 22) + Me.pageTrackBars.Name = "pageTrackBars" + Me.pageTrackBars.Padding = New System.Windows.Forms.Padding(3) + Me.pageTrackBars.Size = New System.Drawing.Size(636, 341) + Me.pageTrackBars.TabIndex = 0 + Me.pageTrackBars.Text = "Track Bars" + ' + 'pagePanels + ' + Me.pagePanels.Controls.Add(Me.panelTextBoxes) + Me.pagePanels.Controls.Add(Me.btnHidePanel) + Me.pagePanels.Controls.Add(Me.btnShowPanel) + Me.pagePanels.Location = New System.Drawing.Point(4, 22) + Me.pagePanels.Name = "pagePanels" + Me.pagePanels.Padding = New System.Windows.Forms.Padding(3) + Me.pagePanels.Size = New System.Drawing.Size(636, 341) + Me.pagePanels.TabIndex = 1 + Me.pagePanels.Text = "Panels" + ' + 'panelTextBoxes + ' + Me.panelTextBoxes.Controls.Add(Me.lblInstructions) + Me.panelTextBoxes.Controls.Add(Me.txtUpperText) + Me.panelTextBoxes.Controls.Add(Me.txtNormalText) + Me.panelTextBoxes.Location = New System.Drawing.Point(148, 7) + Me.panelTextBoxes.Name = "panelTextBoxes" + Me.panelTextBoxes.Size = New System.Drawing.Size(294, 187) + Me.panelTextBoxes.TabIndex = 2 + ' + 'lblInstructions + ' + Me.lblInstructions.AutoSize = True + Me.lblInstructions.Location = New System.Drawing.Point(41, 9) + Me.lblInstructions.Name = "lblInstructions" + Me.lblInstructions.Size = New System.Drawing.Size(126, 13) + Me.lblInstructions.TabIndex = 2 + Me.lblInstructions.Text = "Enter Some Text below..." + ' + 'txtUpperText + ' + Me.txtUpperText.Location = New System.Drawing.Point(41, 59) + Me.txtUpperText.Name = "txtUpperText" + Me.txtUpperText.Size = New System.Drawing.Size(100, 20) + Me.txtUpperText.TabIndex = 1 + ' + 'txtNormalText + ' + Me.txtNormalText.Location = New System.Drawing.Point(40, 33) + Me.txtNormalText.Name = "txtNormalText" + Me.txtNormalText.Size = New System.Drawing.Size(101, 20) + Me.txtNormalText.TabIndex = 0 + ' + 'btnHidePanel + ' + Me.btnHidePanel.Location = New System.Drawing.Point(44, 37) + Me.btnHidePanel.Name = "btnHidePanel" + Me.btnHidePanel.Size = New System.Drawing.Size(75, 23) + Me.btnHidePanel.TabIndex = 1 + Me.btnHidePanel.Text = "Hide Panel" + ' + 'btnShowPanel + ' + Me.btnShowPanel.Location = New System.Drawing.Point(44, 7) + Me.btnShowPanel.Name = "btnShowPanel" + Me.btnShowPanel.Size = New System.Drawing.Size(75, 23) + Me.btnShowPanel.TabIndex = 0 + Me.btnShowPanel.Text = "Show Panel" + ' + 'pageUpDown + ' + Me.pageUpDown.Controls.Add(Me.lblCurrSel) + Me.pageUpDown.Controls.Add(Me.btnGetSelections) + Me.pageUpDown.Controls.Add(Me.lblNumericUpDown) + Me.pageUpDown.Controls.Add(Me.lblDomainUpDown) + Me.pageUpDown.Controls.Add(Me.numericUpDown) + Me.pageUpDown.Controls.Add(Me.domainUpDown) + Me.pageUpDown.Location = New System.Drawing.Point(4, 22) + Me.pageUpDown.Name = "pageUpDown" + Me.pageUpDown.Padding = New System.Windows.Forms.Padding(3) + Me.pageUpDown.Size = New System.Drawing.Size(636, 341) + Me.pageUpDown.TabIndex = 2 + Me.pageUpDown.Text = "Up Down Controls" + ' + 'lblCurrSel + ' + Me.lblCurrSel.BackColor = System.Drawing.Color.Linen + Me.lblCurrSel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblCurrSel.Location = New System.Drawing.Point(53, 180) + Me.lblCurrSel.Name = "lblCurrSel" + Me.lblCurrSel.Size = New System.Drawing.Size(256, 48) + Me.lblCurrSel.TabIndex = 5 + ' + 'lblCurrColor + ' + Me.lblCurrColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.lblCurrColor.Font = New System.Drawing.Font("Microsoft Sans Serif", 14.0!) + Me.lblCurrColor.Location = New System.Drawing.Point(26, 220) + Me.lblCurrColor.Name = "lblCurrColor" + Me.lblCurrColor.Size = New System.Drawing.Size(392, 40) + Me.lblCurrColor.TabIndex = 17 + ' + 'blueTrackBar + ' + Me.blueTrackBar.Location = New System.Drawing.Point(100, 162) + Me.blueTrackBar.Maximum = 255 + Me.blueTrackBar.Name = "blueTrackBar" + Me.blueTrackBar.Size = New System.Drawing.Size(310, 45) + Me.blueTrackBar.TabIndex = 18 + Me.blueTrackBar.TickFrequency = 5 + Me.blueTrackBar.TickStyle = System.Windows.Forms.TickStyle.TopLeft + ' + 'lblBlue + ' + Me.lblBlue.Font = New System.Drawing.Font("Arial", 15.0!) + Me.lblBlue.Location = New System.Drawing.Point(22, 162) + Me.lblBlue.Name = "lblBlue" + Me.lblBlue.Size = New System.Drawing.Size(72, 32) + Me.lblBlue.TabIndex = 23 + Me.lblBlue.Text = "Blue:" + ' + 'lblGreen + ' + Me.lblGreen.Font = New System.Drawing.Font("Arial", 15.0!) + Me.lblGreen.Location = New System.Drawing.Point(22, 122) + Me.lblGreen.Name = "lblGreen" + Me.lblGreen.Size = New System.Drawing.Size(72, 32) + Me.lblGreen.TabIndex = 25 + Me.lblGreen.Text = "Green:" + ' + 'greenTrackBar + ' + Me.greenTrackBar.Location = New System.Drawing.Point(100, 122) + Me.greenTrackBar.Maximum = 255 + Me.greenTrackBar.Name = "greenTrackBar" + Me.greenTrackBar.Size = New System.Drawing.Size(310, 45) + Me.greenTrackBar.TabIndex = 20 + Me.greenTrackBar.TickFrequency = 5 + Me.greenTrackBar.TickStyle = System.Windows.Forms.TickStyle.TopLeft + ' + 'redTrackBar + ' + Me.redTrackBar.Location = New System.Drawing.Point(100, 82) + Me.redTrackBar.Maximum = 255 + Me.redTrackBar.Name = "redTrackBar" + Me.redTrackBar.Size = New System.Drawing.Size(310, 45) + Me.redTrackBar.TabIndex = 19 + Me.redTrackBar.TickFrequency = 5 + Me.redTrackBar.TickStyle = System.Windows.Forms.TickStyle.TopLeft + ' + 'lblRed + ' + Me.lblRed.Font = New System.Drawing.Font("Arial", 15.0!) + Me.lblRed.Location = New System.Drawing.Point(22, 77) + Me.lblRed.Name = "lblRed" + Me.lblRed.Size = New System.Drawing.Size(72, 32) + Me.lblRed.TabIndex = 24 + Me.lblRed.Text = "Red:" + ' + 'colorBox + ' + Me.colorBox.BackColor = System.Drawing.Color.Blue + Me.colorBox.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.colorBox.Location = New System.Drawing.Point(26, 18) + Me.colorBox.Name = "colorBox" + Me.colorBox.Size = New System.Drawing.Size(384, 56) + Me.colorBox.TabIndex = 16 + Me.colorBox.TabStop = False + ' + 'imageListTreeView + ' + Me.imageListTreeView.ImageStream = CType(resources.GetObject("imageListTreeView.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.imageListTreeView.TransparentColor = System.Drawing.Color.Transparent + Me.imageListTreeView.Images.SetKeyName(0, "CarNode.bmp") + Me.imageListTreeView.Images.SetKeyName(1, "SpeedNode.bmp") + Me.imageListTreeView.Images.SetKeyName(2, "RadioNode.bmp") + ' + 'tooManyCharactersErrorProvider + ' + Me.tooManyCharactersErrorProvider.BlinkRate = 500 + Me.tooManyCharactersErrorProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.AlwaysBlink + Me.tooManyCharactersErrorProvider.ContainerControl = Me + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(678, 407) + Me.Controls.Add(Me.tabControlExoticControls) + Me.Name = "MainForm" + Me.Text = "Fun with Exotic Controls" + Me.pageErrorProvider.ResumeLayout(False) + Me.pageErrorProvider.PerformLayout() + CType(Me.numericUpDown, System.ComponentModel.ISupportInitialize).EndInit() + Me.pageTreeView.ResumeLayout(False) + Me.pageTreeView.PerformLayout() + Me.pageWebBrowser.ResumeLayout(False) + Me.pageWebBrowser.PerformLayout() + Me.tabControlExoticControls.ResumeLayout(False) + Me.pageTrackBars.ResumeLayout(False) + Me.pageTrackBars.PerformLayout() + Me.pagePanels.ResumeLayout(False) + Me.panelTextBoxes.ResumeLayout(False) + Me.panelTextBoxes.PerformLayout() + Me.pageUpDown.ResumeLayout(False) + CType(Me.blueTrackBar, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.greenTrackBar, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.redTrackBar, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.colorBox, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.tooManyCharactersErrorProvider, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + Private WithEvents txtInput As System.Windows.Forms.TextBox + Private WithEvents lblErrorInstructions As System.Windows.Forms.Label + Private WithEvents pageErrorProvider As System.Windows.Forms.TabPage + Private WithEvents btnValidate As System.Windows.Forms.Button + Private WithEvents btnGetSelections As System.Windows.Forms.Button + Private WithEvents lblNumericUpDown As System.Windows.Forms.Label + Private WithEvents lblDomainUpDown As System.Windows.Forms.Label + Private WithEvents numericUpDown As System.Windows.Forms.NumericUpDown + Private WithEvents domainUpDown As System.Windows.Forms.DomainUpDown + Private WithEvents pageTreeView As System.Windows.Forms.TabPage + Private WithEvents lblNodeInfo As System.Windows.Forms.Label + Private WithEvents treeViewCars As System.Windows.Forms.TreeView + Private WithEvents myWebBrowser As System.Windows.Forms.WebBrowser + Private WithEvents txtUrl As System.Windows.Forms.TextBox + Private WithEvents tabControlExoticControls As System.Windows.Forms.TabControl + Private WithEvents pageTrackBars As System.Windows.Forms.TabPage + Private WithEvents pagePanels As System.Windows.Forms.TabPage + Private WithEvents panelTextBoxes As System.Windows.Forms.Panel + Private WithEvents lblInstructions As System.Windows.Forms.Label + Private WithEvents txtUpperText As System.Windows.Forms.TextBox + Private WithEvents txtNormalText As System.Windows.Forms.TextBox + Private WithEvents btnHidePanel As System.Windows.Forms.Button + Private WithEvents btnShowPanel As System.Windows.Forms.Button + Private WithEvents pageUpDown As System.Windows.Forms.TabPage + Private WithEvents lblCurrSel As System.Windows.Forms.Label + Private WithEvents pageWebBrowser As System.Windows.Forms.TabPage + Private WithEvents btnGO As System.Windows.Forms.Button + Private WithEvents lblURL As System.Windows.Forms.Label + Private WithEvents lblGreen As System.Windows.Forms.Label + Private WithEvents lblRed As System.Windows.Forms.Label + Private WithEvents colorBox As System.Windows.Forms.PictureBox + Private WithEvents blueTrackBar As System.Windows.Forms.TrackBar + Private WithEvents lblCurrColor As System.Windows.Forms.Label + Private WithEvents lblBlue As System.Windows.Forms.Label + Private WithEvents redTrackBar As System.Windows.Forms.TrackBar + Private WithEvents greenTrackBar As System.Windows.Forms.TrackBar + Private WithEvents imageListTreeView As System.Windows.Forms.ImageList + Private WithEvents tooManyCharactersErrorProvider As System.Windows.Forms.ErrorProvider + +End Class diff --git a/Code/Chapter 29/ExoticControls/MainForm.resx b/Code/Chapter 29/ExoticControls/MainForm.resx new file mode 100644 index 0000000..41dc37f --- /dev/null +++ b/Code/Chapter 29/ExoticControls/MainForm.resx @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 16, 11 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACy + CAAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEABF4C/wZeAv8CXhD/ + EA4QAANeAf8CAAH/BF4B/wIAAf8BXgX/BtUF/xAOEAACXgH/BAAB/wJeAf8EAAX/CNUE/xAOEAACXgH/ + BAAB/wJeAf8EAAP/BEAE1QRAAv8BDg76AQ4QAANeAf8CAAT/AV4B/wIAAf8BXgH/AkAC1QJAAtUCQALV + AkAB/wEODvoBDhAAAl4E/wSIBP8CXgH/BNUCQAbVAkAB/wEOAvsBDgL7AQ4C+wEOAvsBDgL7AQ4QAAFe + Af8MiAH/AV4B/wTVAkAG1QJAAf8BDgL7AQ4C+wEOAvsBDgL7AQ4C+wEOEAAB/w6IAv8CQALVAkAC1QJA + AtUCQAH/AQ4C+wEOAvsBDgL7AQ4C+wEOAvsBDhAAAf8OiAL/BUAD1QVAAdUB/wQOAvsBDgL7AQ4C+wQO + EAAB/w6IAv8CQAbVAkAE1QH/BA4C+wEOAvsBDgL7BA4QAAFeAf8MiAH/AV4B/wJABtUCQATVAf8EDgL7 + AQ4C+wcOEAACXgT/BIgE/wJeAf8CQAbVAkAD1QL/Bw4C+wcOEAAGXgT/Bl4B/wZAAtUGQAH/EA4QABBe + BP8I1QT/EA4QABBeBf8G1QX/EA4QABBeEP8QDhAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEB + BQABgBcAA/+BAAs= + + + + 146, 15 + + \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/MainForm.vb b/Code/Chapter 29/ExoticControls/MainForm.vb new file mode 100644 index 0000000..8bf1715 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/MainForm.vb @@ -0,0 +1,143 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + + ' Create a new generic List to hold the Car objects. + Private listCars As List(Of Car) = New List(Of Car)() + + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + CenterToScreen() + ' Set initial position of each slider. + redTrackBar.Value = 100 + greenTrackBar.Value = 255 + blueTrackBar.Value = 0 + UpdateColor() + + ' Fill List(Of T) and build TreeView. + Dim offset As Double = 0.5 + For x As Integer = 0 To 99 + listCars.Add(New Car(String.Format("Car {0} ", x), 10 + x)) + offset += 0.5 + listCars(x).r = New Radio(89 + offset) + Next + BuildCarTreeView() + End Sub + +#Region "Track Bar stuff" + Private Sub redTrackBar_Scroll(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles redTrackBar.Scroll + UpdateColor() + End Sub + + Private Sub greenTrackBar_Scroll(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles greenTrackBar.Scroll + UpdateColor() + End Sub + + Private Sub blueTrackBar_Scroll(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles blueTrackBar.Scroll + UpdateColor() + End Sub + + Private Sub UpdateColor() + ' Get the new color based on track bars. + Dim c As Color = Color.FromArgb(redTrackBar.Value, greenTrackBar.Value, blueTrackBar.Value) + ' Change the color in the PictureBox. + colorBox.BackColor = c + ' Set color label. + lblCurrColor.Text = String.Format("Current color is: (R:{0}, G:{1}, B:{2})", _ + redTrackBar.Value, greenTrackBar.Value, blueTrackBar.Value) + End Sub +#End Region + +#Region "Panel Stuff" + Private Sub btnShowPanel_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnShowPanel.Click + panelTextBoxes.Visible = True + End Sub + + Private Sub btnHidePanel_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnHidePanel.Click + panelTextBoxes.Visible = False + End Sub + + Private Sub txtNormalText_TextChanged(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles txtNormalText.TextChanged + txtUpperText.Text = txtNormalText.Text.ToUpper() + End Sub +#End Region + +#Region "Up / Down Stuff" + Private Sub btnGetSelections_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnGetSelections.Click + ' Get info from updowns... + lblCurrSel.Text = _ + String.Format("String: {0}" & Chr(13) & "Number: {1}", _ + domainUpDown.Text, numericUpDown.Value) + End Sub +#End Region + +#Region "Error Provider Stuff" + Private Sub txtInput_Validating(ByVal sender As System.Object, _ + ByVal e As System.ComponentModel.CancelEventArgs) Handles txtInput.Validating + ' Check if the text length is greater than 5. + If txtInput.Text.Length > 5 Then + tooManyCharactersErrorProvider.SetError(txtInput, "Can't be greater than 5!") + Else + tooManyCharactersErrorProvider.SetError(txtInput, "") + ' Things are OK, don't show anything. + End If + End Sub +#End Region + +#Region "Build the treeview!" + Sub BuildCarTreeView() + ' Don’t repaint the TreeView until all the nodes have been created. + treeViewCars.BeginUpdate() + ' Clear the TreeView each time the method is called. + treeViewCars.Nodes.Clear() + ' Add a root TreeNode for each Car object in the List(Of T). + For Each c As Car In listCars + ' Add the current Car as a top-most node. + treeViewCars.Nodes.Add(New TreeNode(c.petName, 0, 0)) + ' Now, get the Car you just added to build + ' two sub-nodes based on the speed and + ' internal Radio object. + treeViewCars.Nodes(listCars.IndexOf(c)).Nodes.Add(New _ + TreeNode(String.Format("Speed: {0}", c.currSp.ToString()), 1, 1)) + treeViewCars.Nodes(listCars.IndexOf(c)).Nodes.Add(New _ + TreeNode(String.Format("Favorite Station: {0} FM", c.r.favoriteStation), 2, 2)) + Next + ' Now paint the TreeView. + treeViewCars.EndUpdate() + End Sub + + Private Sub treeViewCars_AfterSelect(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles treeViewCars.AfterSelect + Dim nodeInfo As String = "" + ' Build info about selected node. + nodeInfo = String.Format("You selected: {0}" & Chr(10) & "", e.Node.Text) + If e.Node.Parent IsNot Nothing Then + nodeInfo += String.Format("Parent Node: {0}" & Chr(10) & "", e.Node.Parent.Text) + End If + If e.Node.NextNode IsNot Nothing Then + nodeInfo += String.Format("Next Node: {0}", e.Node.NextNode.Text) + End If + ' Show info and highlight node. + lblNodeInfo.Text = nodeInfo + e.Node.BackColor = Color.AliceBlue + End Sub +#End Region + +#Region "Web stuff" + Private Sub btnGO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGO.Click + ' Set URL based on value within page's TextBox control. + myWebBrowser.Url = New System.Uri(txtUrl.Text) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 29/ExoticControls/My Project/Application.Designer.vb b/Code/Chapter 29/ExoticControls/My Project/Application.Designer.vb new file mode 100644 index 0000000..c7d1e90 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.ExoticControls.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/ExoticControls/My Project/Application.myapp b/Code/Chapter 29/ExoticControls/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/My Project/AssemblyInfo.vb b/Code/Chapter 29/ExoticControls/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2d397d8 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/ExoticControls/My Project/Resources.Designer.vb b/Code/Chapter 29/ExoticControls/My Project/Resources.Designer.vb new file mode 100644 index 0000000..36f8cfa --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ExoticControls.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/ExoticControls/My Project/Resources.resx b/Code/Chapter 29/ExoticControls/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/My Project/Settings.Designer.vb b/Code/Chapter 29/ExoticControls/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c8c75ae --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ExoticControls.My.MySettings + Get + Return Global.ExoticControls.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/ExoticControls/My Project/Settings.settings b/Code/Chapter 29/ExoticControls/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/ExoticControls/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/ExoticControls/RadioNode.bmp b/Code/Chapter 29/ExoticControls/RadioNode.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5fedf65eaf8fe0f5f38103c0a497409f1052f088 GIT binary patch literal 1334 zcmb7^p-)^v5XL`}YjWapDF%fps_02bu;(wqpmFmrU@A_bn=~O=hiIEr)bJOaswktu z6onumO$v^HnErMiCB0TOefM_v&G&Za`@PxsZZ_X}p*nU((rd0>KD9NChZ}3dP<_9C zju#TA7K>q^=Tgh%Qp;~k-G2S3(P*Ucc&y1}qV@H4ZES34b8}N$TU*-R-q!y9zUK3} zX0w@gcXzdTliJ%$z0+Pq{7#YoJjTS>_XohBJ*0mg_IJ%=dx}!UK zU)InYdLwA)4V^)O9_WD{2!Wo&Nt{v6MsN5ViHt?2RN2!R3>rpKIZRopz z21CM-FeD5KL&8w66AS@E!jLco45XnkABKb>VMrKAO+$wvVMrJffW$vYmMlyrIXRrz z;mFF}=eS`bSpr@FYf(BSIH_AoX5-{WEBm`+#1hw0?;aphbIxc65){cQ<m|KTrM%@s88$ literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/ExoticControls/SimpleCar.vb b/Code/Chapter 29/ExoticControls/SimpleCar.vb new file mode 100644 index 0000000..aa79f59 --- /dev/null +++ b/Code/Chapter 29/ExoticControls/SimpleCar.vb @@ -0,0 +1,19 @@ +Option Explicit On +Option Strict On + +Class Car + Public Sub New(ByVal pn As String, ByVal cs As Integer) + petName = pn + currSp = cs + End Sub + Public petName As String + Public currSp As Integer + Public r As Radio +End Class + +Class Radio + Public favoriteStation As Double + Public Sub New(ByVal station As Double) + favoriteStation = station + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 29/ExoticControls/SpeedNode.bmp b/Code/Chapter 29/ExoticControls/SpeedNode.bmp new file mode 100644 index 0000000000000000000000000000000000000000..12b0416fdb04b3f76e96c7445202f99317e85c4a GIT binary patch literal 1334 zcmaizA!}Sg5XUEQg%c4y6BW~_o*oFC3+E4FPRGqxI8$*dx=;wLi)afKHTeXmDw?r( zF^!4{9EBz>P%-_@Y?{zg=)2q9H~-z8|L@JdH=P~6kh%^BBCol7`Pg=3*e7=SP<`G% z#Y++XvRw9oo?BV1R+? z=((+-H}po(&>K2~IJ%=dx+6Gx5C?I1IV-*5uOw17sf3h0ox-3nC=3ciA;F+9C=3dN z!cdqnC=3dN!k{n|It&Vf!k{oH3>s)~C>)v`5mf;c#{4y!)6nygVKK}NBO|H7Qe|M$ zxG`7^mMRMz28Y36a2Om_DmV-VgTY|P(it2EgTdf<1$~tepZ+7R@@93Q!n?7mN{x4e zsbShMXfQRr8BD&d%iW@=`7?F68R!O0KW3<>ux_w%e`T-`~r_!-L%Y z40(Tk&Ud_|y7>*{K)#AHZ-zPk<677CG||KLx(i2KspN=~!E=k~Q+-P=_&a`HoBMJ< h*JHXPEGnotcm5|X|DK@oBv7~Pn=AY+JO+ObzW~^9J|X}B literal 0 HcmV?d00001 diff --git a/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.sln b/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.sln new file mode 100644 index 0000000..c50b271 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "LabelsAndTextBoxes", "LabelsAndTextBoxes.vbproj", "{B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.suo b/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.suo new file mode 100644 index 0000000000000000000000000000000000000000..6bf25388a9e673e784f4c8ba3d4b1206cf1bdbb5 GIT binary patch literal 17920 zcmeHOTWlOx86LZBNSi`h8Uln6CQces8ZY+Rj-8~pz1V3|J8|ue6JVsU-W^}pyJlyd z*h-K5Lq%Q~w32}KqeWH0nyfo(f&SiIIc6N4R zyS_v@tAEa1&Yu52=lr*G&VSy&{p3I1xVh(_hA+KfJY?Kme$?3Jdf$S3f=EvoMk{Xk ze0OUZouaNp9Op#um|u3z+S)?0S^QA0Zah-<`I=|p)R|xNF6as_*F0-{YDXa*;vAe zL{GboN2)TCYa6M+U;~K|(2ktuYOXKchmC6jLT`(Nf)&Qsnc(%{wFOOD4WLseAe=>zcrG7>JG|3%TfNBkEon_AV>#L z{;4-i0L!JPSQzftQkalZAH7Bd-`!kbM&pa0Z;3!QC*v74V+Avuw=aO&4;O?Z?$Z zy(Q$fxSK-Rd7(YZ_#TI>TgF-FvkGdM1_r{UQPVM$sbleV4N zN@?CYy-=LBGPYA0bK)HxJ?E#3iTQbJ0CLh9E8ET@Y2Nl+aiLJ4l0{O2*YN+c6vX!m z7`@x*!!M0r9BkYU=Iw)0AHZEV*trwW?O@sj?)z|e6lHqnAPbj_aa2PKXn=cdBL|+B z@)9Hi7e(c!k_==i)YpM)FDN*QkKZ<~Le*zcsSUw!fRB}B@U#d~p>QtZ-cg9>l>>7X zXeq*TLWIXrN{cYb3liZXYN6vb-%x~YA;N5q6yY4izg~n3E?T9cpo2hKNrj}9bY+Er zYegZu?P@YLI(*=7uf6Nm-#6eJoJ@|UrqQ1prI(@%fVF~QYTNbw)*IuuT8j5!+hW2u zwZV}8N~GgIM=LS9DSD=9FvK{%PJ*?`&a^Tq*p72zo))FAV}hk@FzaULi4s~m13|2{ zIVztlLP!b*U7*d)^+7G%np9I~bJZaV2Xb~0rCdySQSzDqzs?KqCI|IbfdZsupg*62 z=W_<8m_QBmJE!rqfN}-l5iY<4vG*(( z;26v$ON>_M#k9E4%#@0Hk03^3&EDo zY}uANXpxQ48^?$)Rac>EEhFDK$e5wcW*CMiQ(%IQSo5z24D5ejZix_|H#H3rwvq+ChPom6_)ga)35EV4&vsi<$M zYiP;XPbRF4TV|*6jwOR^Shy}9g}hT!Q~G0|h1%Z6T^`sA!cx)tl2)!6u9YQ;149R( z2iIQMjb701rQ`zWDFo7yUROFee)OG6=%+c{b9W%9ch=I*Ht!wn#RO5pwd?g8r+Pl& zn(_MK_j)xkm%ka*H;HwnEiI&3dPkFWT%&csPSE7#eeeG$d)#yMm!XfF6_Uxhga7L^ zzR^RWH%t4ML(ZDG;Zd(8VjfR7iT~2W$%%h(Pt#j_<310jbx_#fZ#AHmI)}PO`dxBv zB5CDLniq3$*%)RhluT+!O*MCJ-2c_Rz1cNx{YYz_tY<;&?osidL0RrwGmW9W8R%hZ zV!2$-nNt~ae(F1dm1%^E?SB8nXj5RD;S8g=WuWp{u{{k;@Gd2H*+^=P<0Fxho5;WML zVHSN*LLboU45Q;P+Rwg}*rVYmzuq8nBtL$}pK#oxj=-T6w4XcXn*aUyIr}MM4l;_? z>$#yIw7~`VTOPwVTBfM|&+^;U_(xkOlE~e=%#@NGXw-aMzt`;DXX6fZ5H4A>l!w}$ zOxT>T-iI?iKAefZtDx`XdZmf2LatS&aOD~&*ESvGIphX*L$r1Icra3y3Ya}j2z(l^ ze%>hjlB)G@KRG*x{@~b;vjl1VMhU z_4QVW*YdL2T3zh!8@fn|6UiLpJ&UM>{~I6P{ZAylssH27X~%}pqg;=k7M!0IT)qGe zrfn;uo&qhY>42lW3Qw1eXt6+eB#zbmKp9zrdkL+e8&=p$eD@tyQv+*~I; zXwKTHf!(|*dzWRm8;3xbmp3DafdtZa0&9h9TVqVDNOH!`bppF?H$4VT&ou<;K_$UY zc~DT3z8BY=o|^plclMjnLLHOzZR*gQ+P{|&1V)d7xnivx- z=RXpAH2gf9a7j50XJO-JU_t45_;vgke8*;q^FNLub!yc1??>4&RdEWfr!H}X56fL= zKNYHAgG|r=IG>7&-)(=Ihq-ZYC203e`s{5jl6U=lGZ%k2VB>zGZGKnDczye7)YtbDBSiAx zO!9>ZpT!^9K^^U2u3SOS%)_HT4Vfv5n1zh^QUO;v*kz)&?os}fj0Rz(1HCNm<w?5qRu-N9PIw~!QJxs*AC>9v-;8D`7h3{h?_}N+T?N+-}Sm31Kc^M)mFCNKIt!-Q);JDXnzY1 zjtXS##Y(cYXgk(WcDl&Z0Kta=ei(8{$A99$cT^|JNu7A(V>%7Vl&5I4r?NTyhdY1% zqeUN6jxfi#<`o2;xtPLHDEHwe9)_x&Yswbnxu&kN`%qJMzG9cn_%Vxzn*6=BWDb{0 zGj^_Gjo40Up`5cFJ;0ok>Ej7O>$}mtB + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B488DD23-C8AF-4E1C-9AE8-637CCE0C7B62} + WinExe + LabelsAndTextBoxes.My.MyApplication + LabelsAndTextBoxes + LabelsAndTextBoxes + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + LabelsAndTextBoxes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + LabelsAndTextBoxes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.vbproj.user b/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/LabelsAndTextBoxes.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 29/LabelsAndTextBoxes/MainForm.Designer.vb b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.Designer.vb new file mode 100644 index 0000000..087783d --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.Designer.vb @@ -0,0 +1,142 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtMaskedTextBox = New System.Windows.Forms.MaskedTextBox + Me.lblMaskedTextBox = New System.Windows.Forms.Label + Me.btnDisplayData = New System.Windows.Forms.Button + Me.txtUpperCase = New System.Windows.Forms.TextBox + Me.lblUpperCaseOnly = New System.Windows.Forms.Label + Me.txtMultiline = New System.Windows.Forms.TextBox + Me.lblMultiline = New System.Windows.Forms.Label + Me.txtPassword = New System.Windows.Forms.TextBox + Me.lblPassword = New System.Windows.Forms.Label + Me.SuspendLayout() + ' + 'txtMaskedTextBox + ' + Me.txtMaskedTextBox.BeepOnError = True + Me.txtMaskedTextBox.CausesValidation = False + Me.txtMaskedTextBox.Location = New System.Drawing.Point(132, 223) + Me.txtMaskedTextBox.Mask = "(999) 000-0000" + Me.txtMaskedTextBox.Name = "txtMaskedTextBox" + Me.txtMaskedTextBox.Size = New System.Drawing.Size(220, 20) + Me.txtMaskedTextBox.TabIndex = 17 + ' + 'lblMaskedTextBox + ' + Me.lblMaskedTextBox.AutoSize = True + Me.lblMaskedTextBox.Location = New System.Drawing.Point(22, 223) + Me.lblMaskedTextBox.Name = "lblMaskedTextBox" + Me.lblMaskedTextBox.Size = New System.Drawing.Size(87, 13) + Me.lblMaskedTextBox.TabIndex = 16 + Me.lblMaskedTextBox.Text = "Mas&ked TextBox" + ' + 'btnDisplayData + ' + Me.btnDisplayData.Location = New System.Drawing.Point(264, 260) + Me.btnDisplayData.Name = "btnDisplayData" + Me.btnDisplayData.Size = New System.Drawing.Size(88, 23) + Me.btnDisplayData.TabIndex = 15 + Me.btnDisplayData.Text = "Display Data" + ' + 'txtUpperCase + ' + Me.txtUpperCase.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper + Me.txtUpperCase.Location = New System.Drawing.Point(132, 181) + Me.txtUpperCase.Name = "txtUpperCase" + Me.txtUpperCase.Size = New System.Drawing.Size(220, 20) + Me.txtUpperCase.TabIndex = 14 + ' + 'lblUpperCaseOnly + ' + Me.lblUpperCaseOnly.AutoSize = True + Me.lblUpperCaseOnly.Location = New System.Drawing.Point(22, 181) + Me.lblUpperCaseOnly.Name = "lblUpperCaseOnly" + Me.lblUpperCaseOnly.Size = New System.Drawing.Size(86, 13) + Me.lblUpperCaseOnly.TabIndex = 13 + Me.lblUpperCaseOnly.Text = "&Uppercase Only:" + ' + 'txtMultiline + ' + Me.txtMultiline.Location = New System.Drawing.Point(132, 104) + Me.txtMultiline.Multiline = True + Me.txtMultiline.Name = "txtMultiline" + Me.txtMultiline.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.txtMultiline.Size = New System.Drawing.Size(220, 52) + Me.txtMultiline.TabIndex = 12 + ' + 'lblMultiline + ' + Me.lblMultiline.AutoSize = True + Me.lblMultiline.Location = New System.Drawing.Point(21, 104) + Me.lblMultiline.Name = "lblMultiline" + Me.lblMultiline.Size = New System.Drawing.Size(90, 13) + Me.lblMultiline.TabIndex = 11 + Me.lblMultiline.Text = "&Multiline TextBox:" + ' + 'txtPassword + ' + Me.txtPassword.Location = New System.Drawing.Point(132, 67) + Me.txtPassword.Name = "txtPassword" + Me.txtPassword.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42) + Me.txtPassword.Size = New System.Drawing.Size(220, 20) + Me.txtPassword.TabIndex = 10 + ' + 'lblPassword + ' + Me.lblPassword.AutoSize = True + Me.lblPassword.Location = New System.Drawing.Point(20, 67) + Me.lblPassword.Name = "lblPassword" + Me.lblPassword.Size = New System.Drawing.Size(98, 13) + Me.lblPassword.TabIndex = 9 + Me.lblPassword.Text = "&Password TextBox:" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(364, 295) + Me.Controls.Add(Me.txtMaskedTextBox) + Me.Controls.Add(Me.lblMaskedTextBox) + Me.Controls.Add(Me.btnDisplayData) + Me.Controls.Add(Me.txtUpperCase) + Me.Controls.Add(Me.lblUpperCaseOnly) + Me.Controls.Add(Me.txtMultiline) + Me.Controls.Add(Me.lblMultiline) + Me.Controls.Add(Me.txtPassword) + Me.Controls.Add(Me.lblPassword) + Me.Name = "MainForm" + Me.Text = "Fun with Labels and TextBoxes" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents txtMaskedTextBox As System.Windows.Forms.MaskedTextBox + Private WithEvents lblMaskedTextBox As System.Windows.Forms.Label + Private WithEvents btnDisplayData As System.Windows.Forms.Button + Private WithEvents txtUpperCase As System.Windows.Forms.TextBox + Private WithEvents lblUpperCaseOnly As System.Windows.Forms.Label + Private WithEvents txtMultiline As System.Windows.Forms.TextBox + Private WithEvents lblMultiline As System.Windows.Forms.Label + Private WithEvents txtPassword As System.Windows.Forms.TextBox + Private WithEvents lblPassword As System.Windows.Forms.Label + +End Class diff --git a/Code/Chapter 29/LabelsAndTextBoxes/MainForm.resx b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/LabelsAndTextBoxes/MainForm.vb b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.vb new file mode 100644 index 0000000..e45a3c6 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/MainForm.vb @@ -0,0 +1,43 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Sub New() + ' This call is required by the Windows Form Designer. + InitializeComponent() + + ' Add any initialization after the InitializeComponent() call. + CreateLabelControl() + CenterToScreen() + End Sub + + Private Sub CreateLabelControl() + ' Create and configure a Label. + Dim lblInstructions As New Label() + lblInstructions.Name = "lblInstructions" + lblInstructions.Text = "Please enter values in all the text boxes" + lblInstructions.Font = New Font("Times New Roman", 10, FontStyle.Bold) + lblInstructions.AutoSize = True + lblInstructions.Location = New System.Drawing.Point(16, 13) + lblInstructions.Size = New System.Drawing.Size(240, 16) + ' Add to Form's controls collection. + Me.Controls.Add(lblInstructions) + End Sub + + Private Sub btnDisplayData_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles btnDisplayData.Click + ' Get data from all the text boxes. + Dim textBoxData As String = "" + textBoxData &= String.Format("MultiLine: {0}" & Chr(10), txtMultiline.Text) + textBoxData &= String.Format("Password: {0}" & Chr(10), txtPassword.Text) + textBoxData &= String.Format("Uppercase: {0}" & Chr(10), txtUpperCase.Text) + textBoxData &= String.Format("Masked: {0}" & Chr(10), txtMaskedTextBox.Text) + ' Display all the data. + MessageBox.Show(textBoxData, "Here is the data in your TextBoxes") + End Sub + + Private Sub txtMaskedTextBox_MaskInputRejected(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.MaskInputRejectedEventArgs) Handles txtMaskedTextBox.MaskInputRejected + Me.Text = String.Format("Error: {0}", e.RejectionHint) + End Sub +End Class diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.Designer.vb b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.Designer.vb new file mode 100644 index 0000000..61a8ebf --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.LabelsAndTextBoxes.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.myapp b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/AssemblyInfo.vb b/Code/Chapter 29/LabelsAndTextBoxes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..35a3b3e --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.Designer.vb b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c832fd3 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("LabelsAndTextBoxes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.resx b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.Designer.vb b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a9d2ce4 --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.LabelsAndTextBoxes.My.MySettings + Get + Return Global.LabelsAndTextBoxes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.settings b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/LabelsAndTextBoxes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.Designer.vb b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.Designer.vb new file mode 100644 index 0000000..48cce52 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.Designer.vb @@ -0,0 +1,49 @@ + _ +Partial Class ItalicUserMessageDialog + Inherits SimpleModalDialog.UserMessageDialog + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.checkBoxItalic = New System.Windows.Forms.CheckBox + Me.SuspendLayout() + ' + 'checkBoxItalic + ' + Me.checkBoxItalic.AutoSize = True + Me.checkBoxItalic.Location = New System.Drawing.Point(14, 84) + Me.checkBoxItalic.Name = "checkBoxItalic" + Me.checkBoxItalic.Size = New System.Drawing.Size(54, 17) + Me.checkBoxItalic.TabIndex = 8 + Me.checkBoxItalic.Text = "Italic?" + Me.checkBoxItalic.UseVisualStyleBackColor = True + ' + 'ItalicUserMessageDialog + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.ClientSize = New System.Drawing.Size(364, 137) + Me.Controls.Add(Me.checkBoxItalic) + Me.Name = "ItalicUserMessageDialog" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Controls.SetChildIndex(Me.checkBoxItalic, 0) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents checkBoxItalic As System.Windows.Forms.CheckBox + +End Class diff --git a/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.resx b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.vb b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.vb new file mode 100644 index 0000000..5ddce3c --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/ItalicUserMessageDialog.vb @@ -0,0 +1,13 @@ +Option Explicit On +Option Strict On + +Public Class ItalicUserMessageDialog + Public Property Italic() As Boolean + Get + Return checkBoxItalic.Checked + End Get + Set(ByVal value As Boolean) + checkBoxItalic.Checked = value + End Set + End Property +End Class diff --git a/Code/Chapter 29/SimpleModalDialog/MainForm.Designer.vb b/Code/Chapter 29/SimpleModalDialog/MainForm.Designer.vb new file mode 100644 index 0000000..7f6086e --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/MainForm.Designer.vb @@ -0,0 +1,85 @@ + _ +Partial Class MainForm + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.toolsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.configureToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.exitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.menuStrip1 = New System.Windows.Forms.MenuStrip + Me.fileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.menuStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'toolsToolStripMenuItem + ' + Me.toolsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.configureToolStripMenuItem}) + Me.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem" + Me.toolsToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.toolsToolStripMenuItem.Text = "&Tools" + ' + 'configureToolStripMenuItem + ' + Me.configureToolStripMenuItem.Name = "configureToolStripMenuItem" + Me.configureToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.configureToolStripMenuItem.Text = "&Configure" + ' + 'exitToolStripMenuItem + ' + Me.exitToolStripMenuItem.Name = "exitToolStripMenuItem" + Me.exitToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.exitToolStripMenuItem.Text = "E&xit" + ' + 'menuStrip1 + ' + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.fileToolStripMenuItem, Me.toolsToolStripMenuItem}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 0) + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(368, 24) + Me.menuStrip1.TabIndex = 1 + Me.menuStrip1.Text = "menuStrip1" + ' + 'fileToolStripMenuItem + ' + Me.fileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.exitToolStripMenuItem}) + Me.fileToolStripMenuItem.Name = "fileToolStripMenuItem" + Me.fileToolStripMenuItem.Size = New System.Drawing.Size(35, 20) + Me.fileToolStripMenuItem.Text = "&File" + ' + 'MainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(368, 169) + Me.Controls.Add(Me.menuStrip1) + Me.Name = "MainForm" + Me.Text = "Enter your Message and I will paint it..." + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents toolsToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents configureToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents exitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents menuStrip1 As System.Windows.Forms.MenuStrip + Private WithEvents fileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + +End Class diff --git a/Code/Chapter 29/SimpleModalDialog/MainForm.resx b/Code/Chapter 29/SimpleModalDialog/MainForm.resx new file mode 100644 index 0000000..541af56 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/MainForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/MainForm.vb b/Code/Chapter 29/SimpleModalDialog/MainForm.vb new file mode 100644 index 0000000..cc861d8 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/MainForm.vb @@ -0,0 +1,50 @@ +Option Explicit On +Option Strict On + +Public Class MainForm + Private userMessage As String = "Default Message" + Private textIsItalic As Boolean = False + + Sub New() + + ' This call is required by the Windows Form Designer. + InitializeComponent() + CenterToScreen() + ' Add any initialization after the InitializeComponent() call. + + End Sub + Private Sub configureToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles configureToolStripMenuItem.Click + Dim dlg As ItalicUserMessageDialog = New ItalicUserMessageDialog() + dlg.Message = userMessage + dlg.Italic = textIsItalic + + ' If user clicked OK button, render his message. + If Windows.Forms.DialogResult.OK = dlg.ShowDialog() Then + userMessage = dlg.Message + textIsItalic = dlg.Italic + Invalidate() + End If + + ' Have dialog clean up internal widgets now, rather + ' than when the GC destroys the object. + dlg.Dispose() + End Sub + + Private Sub exitToolStripMenuItem_Click(ByVal sender As System.Object, _ + ByVal e As System.EventArgs) Handles exitToolStripMenuItem.Click + Application.Exit() + End Sub + + Private Sub MainForm_Paint(ByVal sender As System.Object, _ + ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint + Dim g As Graphics = e.Graphics + Dim f As Font = Nothing + If textIsItalic Then + f = New Font("Times New Roman", 24, FontStyle.Italic) + Else + f = New Font("Times New Roman", 24) + End If + g.DrawString(userMessage, f, Brushes.DarkBlue, 50, 50) + End Sub +End Class diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Application.Designer.vb b/Code/Chapter 29/SimpleModalDialog/My Project/Application.Designer.vb new file mode 100644 index 0000000..e6a2676 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Application.Designer.vb @@ -0,0 +1,38 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + 'NOTE: This file is auto-generated; do not modify it directly. To make changes, + ' or if you encounter build errors in this file, go to the Project Designer + ' (go to Project Properties or double-click the My Project node in + ' Solution Explorer), and make changes on the Application tab. + ' + Partial Friend Class MyApplication + + _ + Public Sub New() + MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) + Me.IsSingleInstance = false + Me.EnableVisualStyles = true + Me.SaveMySettingsOnExit = true + Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses + End Sub + + _ + Protected Overrides Sub OnCreateMainForm() + Me.MainForm = Global.SimpleModalDialog.MainForm + End Sub + End Class +End Namespace diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Application.myapp b/Code/Chapter 29/SimpleModalDialog/My Project/Application.myapp new file mode 100644 index 0000000..27659f2 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + true + MainForm + false + 0 + true + 0 + true + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/AssemblyInfo.vb b/Code/Chapter 29/SimpleModalDialog/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7749604 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Resources.Designer.vb b/Code/Chapter 29/SimpleModalDialog/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7fbe27d --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleModalDialog.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Resources.resx b/Code/Chapter 29/SimpleModalDialog/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Settings.Designer.vb b/Code/Chapter 29/SimpleModalDialog/My Project/Settings.Designer.vb new file mode 100644 index 0000000..41f5bba --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleModalDialog.My.MySettings + Get + Return Global.SimpleModalDialog.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 29/SimpleModalDialog/My Project/Settings.settings b/Code/Chapter 29/SimpleModalDialog/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.sln b/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.sln new file mode 100644 index 0000000..437eb42 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleModalDialog", "SimpleModalDialog.vbproj", "{6B06FBA1-B420-4555-B095-DA954B7DA670}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6B06FBA1-B420-4555-B095-DA954B7DA670}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B06FBA1-B420-4555-B095-DA954B7DA670}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B06FBA1-B420-4555-B095-DA954B7DA670}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B06FBA1-B420-4555-B095-DA954B7DA670}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.suo b/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.suo new file mode 100644 index 0000000000000000000000000000000000000000..8f3d58472d9c2b6a429a82e10289da4d9234ac40 GIT binary patch literal 24576 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 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {6B06FBA1-B420-4555-B095-DA954B7DA670} + WinExe + SimpleModalDialog.My.MyApplication + SimpleModalDialog + SimpleModalDialog + WindowsForms + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleModalDialog.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleModalDialog.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + ItalicUserMessageDialog.vb + + + Form + + + Form + + + MainForm.vb + Form + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + UserMessageDialog.vb + + + Form + + + + + Designer + ItalicUserMessageDialog.vb + + + Designer + MainForm.vb + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + Designer + UserMessageDialog.vb + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.vbproj.user b/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/SimpleModalDialog.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.Designer.vb b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.Designer.vb new file mode 100644 index 0000000..2bf1852 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.Designer.vb @@ -0,0 +1,85 @@ + _ +Partial Class UserMessageDialog + Inherits System.Windows.Forms.Form + + 'Form overrides dispose to clean up the component list. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + 'Required by the Windows Form Designer + Private components As System.ComponentModel.IContainer + + 'NOTE: The following procedure is required by the Windows Form Designer + 'It can be modified using the Windows Form Designer. + 'Do not modify it using the code editor. + _ + Private Sub InitializeComponent() + Me.txtUserInput = New System.Windows.Forms.TextBox + Me.label1 = New System.Windows.Forms.Label + Me.btnOK = New System.Windows.Forms.Button + Me.btnCancel = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'txtUserInput + ' + Me.txtUserInput.Location = New System.Drawing.Point(12, 41) + Me.txtUserInput.Name = "txtUserInput" + Me.txtUserInput.Size = New System.Drawing.Size(325, 20) + Me.txtUserInput.TabIndex = 7 + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(11, 15) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(136, 13) + Me.label1.TabIndex = 6 + Me.label1.Text = "Please Enter your Message" + ' + 'btnOK + ' + Me.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK + Me.btnOK.Location = New System.Drawing.Point(181, 79) + Me.btnOK.Name = "btnOK" + Me.btnOK.Size = New System.Drawing.Size(75, 23) + Me.btnOK.TabIndex = 5 + Me.btnOK.Text = "OK" + ' + 'btnCancel + ' + Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.btnCancel.Location = New System.Drawing.Point(262, 79) + Me.btnCancel.Name = "btnCancel" + Me.btnCancel.Size = New System.Drawing.Size(75, 23) + Me.btnCancel.TabIndex = 4 + Me.btnCancel.Text = "Cancel" + ' + 'UserMessageDialog + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(364, 137) + Me.Controls.Add(Me.txtUserInput) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.btnOK) + Me.Controls.Add(Me.btnCancel) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "UserMessageDialog" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "UserMessageDialog" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Private WithEvents txtUserInput As System.Windows.Forms.TextBox + Private WithEvents label1 As System.Windows.Forms.Label + Private WithEvents btnOK As System.Windows.Forms.Button + Private WithEvents btnCancel As System.Windows.Forms.Button +End Class diff --git a/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.resx b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.resx new file mode 100644 index 0000000..19dc0dd --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.vb b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.vb new file mode 100644 index 0000000..2f38931 --- /dev/null +++ b/Code/Chapter 29/SimpleModalDialog/UserMessageDialog.vb @@ -0,0 +1,13 @@ +Option Explicit On +Option Strict On + +Public Class UserMessageDialog + Public Property Message() As String + Get + Return txtUserInput.Text + End Get + Set(ByVal value As String) + txtUserInput.Text = value + End Set + End Property +End Class \ No newline at end of file diff --git a/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.sln b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.sln new file mode 100644 index 0000000..54ac495 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BasicConsoleIO", "BasicConsoleIO.vbproj", "{756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.suo b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.suo new file mode 100644 index 0000000000000000000000000000000000000000..46c2a52e6290cbd8af2ae1ff64c7bdd665a1bf0c GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj new file mode 100644 index 0000000..c02dbee --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {756FA64A-E8FF-44ED-B3C4-DCA0B28D8EF0} + Exe + BasicConsoleIO.Program + BasicConsoleIO + BasicConsoleIO + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BasicConsoleIO.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BasicConsoleIO.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj.user b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/BasicConsoleIO.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Application.Designer.vb b/Code/Chapter 3/BasicConsoleIO/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Application.myapp b/Code/Chapter 3/BasicConsoleIO/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/AssemblyInfo.vb b/Code/Chapter 3/BasicConsoleIO/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..cbc3150 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Resources.Designer.vb b/Code/Chapter 3/BasicConsoleIO/My Project/Resources.Designer.vb new file mode 100644 index 0000000..aa7d99d --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BasicConsoleIO.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Resources.resx b/Code/Chapter 3/BasicConsoleIO/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Settings.Designer.vb b/Code/Chapter 3/BasicConsoleIO/My Project/Settings.Designer.vb new file mode 100644 index 0000000..10a92d0 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BasicConsoleIO.My.MySettings + Get + Return Global.BasicConsoleIO.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/BasicConsoleIO/My Project/Settings.settings b/Code/Chapter 3/BasicConsoleIO/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/BasicConsoleIO/Program.vb b/Code/Chapter 3/BasicConsoleIO/Program.vb new file mode 100644 index 0000000..3979721 --- /dev/null +++ b/Code/Chapter 3/BasicConsoleIO/Program.vb @@ -0,0 +1,44 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Console IO *****") + ' Echo some information to the console. + Console.Write("Enter your name: ") + Dim s As String = Console.ReadLine() + Console.WriteLine("Hello, {0}", s) + Console.Write("Enter your age: ") + s = Console.ReadLine() + Console.WriteLine("You are {0} years old", s) + + ' Specify string placeholders and values to use at + ' runtime. + Dim theInt As Integer = 90 + Dim theDouble As Double = 9.99 + Dim theBool As Boolean = True + Console.WriteLine("Value of theInt: {0}", theInt) + Console.WriteLine("theDouble is {0} and theBool is {1}.", _ + theDouble, theBool) + + ' John says... + Console.WriteLine("{0}, Number {0}, Number {0}", 9) + + ' Prints: 20, 10, 30 + Console.WriteLine("{1}, {0}, {2}", 10, 20, 30) + + ' Various formatting options. + Console.WriteLine("C format: {0:C}", 99989.987) + Console.WriteLine("D9 format: {0:D9}", 99999) + Console.WriteLine("E format: {0:E}", 99999.76543) + Console.WriteLine("F3 format: {0:F3}", 99999.9999) + Console.WriteLine("N format: {0:N}", 99999) + Console.WriteLine("X format: {0:X}", 99999) + Console.WriteLine("x format: {0:x}", 99999) + + ' Use the shared String.Format() method to build a new string. + Dim formatStr As String + formatStr = _ + String.Format("Don't you wish you had {0:C} in your account?", 99989.987) + Console.WriteLine(formatStr) + End Sub + +End Module diff --git a/Code/Chapter 3/BasicDataTypes/BasicDataTypes.sln b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.sln new file mode 100644 index 0000000..ac7f57b --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BasicDataTypes", "BasicDataTypes.vbproj", "{4A5BA9A5-CBB8-467B-96D7-6AC2337B5109}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4A5BA9A5-CBB8-467B-96D7-6AC2337B5109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A5BA9A5-CBB8-467B-96D7-6AC2337B5109}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A5BA9A5-CBB8-467B-96D7-6AC2337B5109}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A5BA9A5-CBB8-467B-96D7-6AC2337B5109}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/BasicDataTypes/BasicDataTypes.suo b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..fd82e0f3126028775ff15e4e96c3fac2c3726849 GIT binary patch literal 20992 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 F{eL5-w15Br literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj new file mode 100644 index 0000000..7711865 --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4A5BA9A5-CBB8-467B-96D7-6AC2337B5109} + Exe + BasicDataTypes.Program + BasicDataTypes + BasicDataTypes + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BasicDataTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BasicDataTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj.user b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/BasicDataTypes.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Application.Designer.vb b/Code/Chapter 3/BasicDataTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Application.myapp b/Code/Chapter 3/BasicDataTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/BasicDataTypes/My Project/AssemblyInfo.vb b/Code/Chapter 3/BasicDataTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..7971ff6 --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Resources.Designer.vb b/Code/Chapter 3/BasicDataTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f4a6bbf --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BasicDataTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Resources.resx b/Code/Chapter 3/BasicDataTypes/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Settings.Designer.vb b/Code/Chapter 3/BasicDataTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..d71911f --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BasicDataTypes.My.MySettings + Get + Return Global.BasicDataTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/BasicDataTypes/My Project/Settings.settings b/Code/Chapter 3/BasicDataTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/BasicDataTypes/Program.vb b/Code/Chapter 3/BasicDataTypes/Program.vb new file mode 100644 index 0000000..c0d2726 --- /dev/null +++ b/Code/Chapter 3/BasicDataTypes/Program.vb @@ -0,0 +1,41 @@ +Module Program + Sub Main() + Console.WriteLine("***** Fun with Data Types *****") + ' Fun with basic data types. + Console.WriteLine("Max of Integer: {0}", Integer.MaxValue) + Console.WriteLine("Min of Integer: {0}", Integer.MinValue) + Console.WriteLine("Max of Double: {0}", Double.MaxValue) + Console.WriteLine("Min of Double: {0}", Double.MinValue) + Console.WriteLine("Double.Epsilon: {0}", Double.Epsilon) + Console.WriteLine("Double.PositiveInfinity: {0}", _ + Double.PositiveInfinity) + Console.WriteLine("Double.NegativeInfinity: {0}", _ + Double.NegativeInfinity) + Console.WriteLine("Boolean.FalseString: {0}", Boolean.FalseString) + Console.WriteLine("Boolean.TrueString: {0}", Boolean.TrueString) + Console.WriteLine() + + ' Fun with System.Char. + Dim myChar As Char = "a"c + Console.WriteLine("Char.IsDigit('a'): {0}", Char.IsDigit(myChar)) + Console.WriteLine("Char.IsLetter('a'): {0}", Char.IsLetter(myChar)) + Console.WriteLine("Char.IsWhiteSpace('Hello There', 5): {0}", _ + Char.IsWhiteSpace("Hello There", 5)) + Console.WriteLine("Char.IsWhiteSpace('Hello There', 6): {0}", _ + Char.IsWhiteSpace("Hello There", 6)) + Console.WriteLine("Char.IsPunctuation('?'): {0}", _ + Char.IsPunctuation("?"c)) + Console.WriteLine() + + ' Fun with parsing + Dim b As Boolean = Boolean.Parse("True") + Console.WriteLine("Value of myBool: {0}", b) + Dim d As Double = Double.Parse("99.884") + Console.WriteLine("Value of myDbl: {0}", d) + Dim i As Integer = Integer.Parse("8") + Console.WriteLine("Value of myInt: {0}", i) + Dim c As Char = Char.Parse("w") + Console.WriteLine("Value of myChar: {0}", c) + + End Sub +End Module diff --git a/Code/Chapter 3/FunWithMain/FunWithMain.sln b/Code/Chapter 3/FunWithMain/FunWithMain.sln new file mode 100644 index 0000000..d44724a --- /dev/null +++ b/Code/Chapter 3/FunWithMain/FunWithMain.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithMain", "FunWithMain.vbproj", "{A453D688-6088-4E4E-8893-F18246512BC4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A453D688-6088-4E4E-8893-F18246512BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A453D688-6088-4E4E-8893-F18246512BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A453D688-6088-4E4E-8893-F18246512BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A453D688-6088-4E4E-8893-F18246512BC4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/FunWithMain/FunWithMain.suo b/Code/Chapter 3/FunWithMain/FunWithMain.suo new file mode 100644 index 0000000000000000000000000000000000000000..3d015513c52f00c546788e5ea2123b8f4368fc3b GIT binary patch literal 14848 zcmeHOPi!1l8GoCQ(9n{!Ng5!OFmaqTCGlcAPGZMN=z4dZxbfPq*RgvT)Y!XYd+qg( z**bY|6?IbxG(RibXazn6t)FxDkbAug@C4xVfIWaO0GQ#k@^7eoQ;q{{`dL(YeC5fr~$U)F~|3C!aFOQRRW&!yCBu-Z|j5l0_oo`tk% zxP)uUKlK3RzZ<|ltpoHp&Xw}dHKbhc2OI#9j%NWJ_a&$9b!zg)bAYb_jsU(6FaSpZ zO@L#7e!y`6pMM_pNvHh{)TaQa0WE+q;G2L}KpUVPa0bu;I14xjxD3$r_MrVOz(vM&gzGRP(laA zJme%NM({g_whh@G2V_JRI&Ki!W)dy>FVsg?^n!W4VC4&DB$v)xw~UdzZDk8q&P*&C zJ+?htFh_fgGx@X;PiKl5J7-4iv}H!8$LEVy-Z*3SF672C#p%R&Mm{o>w`Z(W(Hyo4 z_Ch{o6~cL|AXVG$i@Aktmi&ow18Cg{#&c<-IBgl>f%u3qG@dO^+W9#LZDTM_mrry= zuGTD8EhAU$I({vzlD=P1bo%}_L;p~wx#g4t-+`_Ut~q@S7Ohz=k;0zEfV%)nrm%0M zqINNWpSw=R4T_&~tlvBed?Vlu8@w=q-`7M^V!jC~QfSpGO|U=If5gpFYdrhO<68f| z0^ZDG6~=*W7Qa)#NzN?-zl~K0vi`(NA1x?;;-2Lupm4<}VAG}~=DZjK4Mos0jr+B5 z^LecQ>fD3k=ibv+uz2zJVAn0sFe@cCgB2)NrQ;;<(^krDWQ7eDu)^=EAiwu=ho@)3|5jsuRzQ;=QJPs))LPr&FkfxbuiH zQWs<~gGq@`?H{{4hl}bL(M())^m%sj5#J+doqe^%_> zb#W)m$;!&<9nv-Cpw4gqm=;DB!(@BM>NWhXka~k2f%^Bq?AZTs`JXEUCzNJDt%7P# zi~E+q{AmL+QuEPAr~aE?^$mr%1RtFe(Jf=V+aiMcEG$3_v0f+sT2Qw-tqxcgLW{ia z!l)M5i8frd=WVy#x|0+ zZp^c>Zw!lJ@EI);V#4wt9he{<3`J+F@d_Yk7`wGTB=e&%54mGOg zaV2My;DssNrTx@B&I6tb@?W?7F>g5`8J=>OW>by9L*>f)n(g(1>i(V?6fj$-EFXCmsB`AKk{)s@J(PxW7+O9(yCLtMIb4CC? zpe>E}Qu?6_0Ym>&uvGoXr;oeoo-ie=}}41{N$&RQ$PIe)%XAW z?t=qAAKTY2@*lkvdEt$jYrpu@+ut2t{@`6XdFY7F$%FTo?;q)3dMo|jPmet8@*62C zj@|pw;q3qR92ud!9qT_MSs(%Az)Y#@$Qco~`8lmwVq~ISZB9{FOtg z)@=00$#rQ+KV{E=UqH{CI+FU45rkh%#xq(9u?)< zj?oXA2Oadh7+)!CM}Mb!q5e65A&h^5>L1$4pE<9+jx{FMajXM*R@0;ML4IDJ^Drvr zUx-(iQjdSjt^clq=hG5*4s*_enqE*ty~kB}^!Nv*?aNBZqx4O=Rz8NiwQ^us|GMY@ z0+!|nj{R#C=T??E`fTrQIhoUXE`goa(pQo;F3i@Y*}Klou+qw2P=DuT)`j^5+BeRL zzbwo{Xno?|l~*1pUw#(-)t>j$gd1I{joOa&C+h9=Le?rU`yMb?-wWrW3*kdl1{Y@$ zMBtAyYr%_A9x}Bc3$w9t^rYoE19hp&YR<`C_xXd;@anneC+6tXz$>Wife7r8EUo}& zqnR@=_XO4ZiV*toJ7fUKd?t0UzF)0AkIs|M0DaD&&mWTTQ)q+efifznrGeL@|LE20 z{Og#+HVeO(R_K=WN9#F(p#Q%M@1slwoxj`uRMY>G8Ju)l>_1V2qPoDX9!j? zf@gbyZ5ZP@O63bw=AsFdxV}zw+MK6f8AFGPTiwwh?YK7rjDW6r%tYCE6Zjdg%t@bp zN=As@6CIw|lumSLQ}ua{3F)U-#t}(Rw4?Aa7D!24>I66}uWeBK;%Z7(nj74qUNDyM zgR;-5k2-aeQy+8cR;TW8>Sm`t?$jroTD?tuL8I2kos+J7f~C*%D8uT^i_tXg_$+36 z6Phv%eP_z3Y7%o(`QEV1J><~aj@6_F%0RC%5-y4>J^g(%AZ2T17L@iZk5QRHAb+gg zH)>_KFQNQz&TL}a%#4{yp2$pKev7ML>6KuGUs+{d_q zoJ22RJIDyXswv`60euYm^2*H_>Sydi<>-8URSwT{XH6S z^K0I6IxCM2!|x+!P(n2o{94QXtX`R|F7azuPwNEjWpZUUm)qCUsJY8c)2q9FhE zE87GirbCT9R=)!$snUm$iX4?^n?YtRB`)y$3+)qApQWLzS*!mAqW-U5^!Eq+rbBT? z_3`ZG`WKyHNf428xQ^dk6Mr5NwgsDa4Zn-dIKN8c=l3K*@dwSn@_$KcmGyl8d;u^0 Rpw^4)=;yq3spBy@^#8wt*rEUc literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/FunWithMain/FunWithMain.vbproj b/Code/Chapter 3/FunWithMain/FunWithMain.vbproj new file mode 100644 index 0000000..2a35b71 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/FunWithMain.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A453D688-6088-4E4E-8893-F18246512BC4} + Exe + FunWithMain.Program + FunWithMain + FunWithMain + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithMain.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithMain.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithMain/FunWithMain.vbproj.user b/Code/Chapter 3/FunWithMain/FunWithMain.vbproj.user new file mode 100644 index 0000000..2cf9117 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/FunWithMain.vbproj.user @@ -0,0 +1,23 @@ + + + /arg1 -godmode -anotherArg + + + -test + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithMain/My Project/Application.Designer.vb b/Code/Chapter 3/FunWithMain/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/FunWithMain/My Project/Application.myapp b/Code/Chapter 3/FunWithMain/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/FunWithMain/My Project/AssemblyInfo.vb b/Code/Chapter 3/FunWithMain/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2e3c388 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/FunWithMain/My Project/Resources.Designer.vb b/Code/Chapter 3/FunWithMain/My Project/Resources.Designer.vb new file mode 100644 index 0000000..71f93ac --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithMain.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithMain/My Project/Resources.resx b/Code/Chapter 3/FunWithMain/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithMain/My Project/Settings.Designer.vb b/Code/Chapter 3/FunWithMain/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f676585 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithMain.My.MySettings + Get + Return Global.FunWithMain.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithMain/My Project/Settings.settings b/Code/Chapter 3/FunWithMain/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/FunWithMain/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/FunWithMain/Program.vb b/Code/Chapter 3/FunWithMain/Program.vb new file mode 100644 index 0000000..a74f9c1 --- /dev/null +++ b/Code/Chapter 3/FunWithMain/Program.vb @@ -0,0 +1,27 @@ +' Note: I have specified start up arguments using the +' My Project editor (see Ch.3 for details). + +Class Program + Shared Function Main(ByVal args As String()) As Integer + Console.WriteLine("***** Fun with Main() *****") + Dim s As String + For Each s In args + Console.WriteLine("Arg: {0}", s) + Next + + ' OS running this app? + Console.WriteLine("Current OS: {0}", Environment.OSVersion) + + ' List the drives on this machine. + Dim drives As String() = Environment.GetLogicalDrives() + Dim d As String + For Each d In drives + Console.WriteLine("You have a drive named {0}.", d) + Next + + ' Which version of the .NET platform is running this app? + Console.WriteLine("Executing version of .NET: {0}", _ + Environment.Version) + Return 0 + End Function +End Class diff --git a/Code/Chapter 3/FunWithModules/FunWithModules.sln b/Code/Chapter 3/FunWithModules/FunWithModules.sln new file mode 100644 index 0000000..84e43dd --- /dev/null +++ b/Code/Chapter 3/FunWithModules/FunWithModules.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithModules", "FunWithModules.vbproj", "{DE804A9E-A08E-4E7F-8812-BE344D437326}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DE804A9E-A08E-4E7F-8812-BE344D437326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE804A9E-A08E-4E7F-8812-BE344D437326}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE804A9E-A08E-4E7F-8812-BE344D437326}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE804A9E-A08E-4E7F-8812-BE344D437326}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/FunWithModules/FunWithModules.suo b/Code/Chapter 3/FunWithModules/FunWithModules.suo new file mode 100644 index 0000000000000000000000000000000000000000..261d620d7e385e85ddf80d58ebcef31284a3cec1 GIT binary patch literal 15872 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 UA6HfllCcD0;Sb_JJ1hS4U#ArSSpWb4 literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/FunWithModules/FunWithModules.vbproj b/Code/Chapter 3/FunWithModules/FunWithModules.vbproj new file mode 100644 index 0000000..23162e8 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/FunWithModules.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DE804A9E-A08E-4E7F-8812-BE344D437326} + Exe + FunWithModules.Program + FunWithModules + FunWithModules + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithModules.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithModules.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithModules/FunWithModules.vbproj.user b/Code/Chapter 3/FunWithModules/FunWithModules.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 3/FunWithModules/FunWithModules.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithModules/My Project/Application.Designer.vb b/Code/Chapter 3/FunWithModules/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/FunWithModules/My Project/Application.myapp b/Code/Chapter 3/FunWithModules/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/FunWithModules/My Project/AssemblyInfo.vb b/Code/Chapter 3/FunWithModules/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..971dc82 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/FunWithModules/My Project/Resources.Designer.vb b/Code/Chapter 3/FunWithModules/My Project/Resources.Designer.vb new file mode 100644 index 0000000..994c6c2 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithModules.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithModules/My Project/Resources.resx b/Code/Chapter 3/FunWithModules/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithModules/My Project/Settings.Designer.vb b/Code/Chapter 3/FunWithModules/My Project/Settings.Designer.vb new file mode 100644 index 0000000..39c8c31 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithModules.My.MySettings + Get + Return Global.FunWithModules.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithModules/My Project/Settings.settings b/Code/Chapter 3/FunWithModules/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/FunWithModules/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/FunWithModules/Program.vb b/Code/Chapter 3/FunWithModules/Program.vb new file mode 100644 index 0000000..548b855 --- /dev/null +++ b/Code/Chapter 3/FunWithModules/Program.vb @@ -0,0 +1,69 @@ +Module Program + Sub Main() + ' Show banner. + DisplayBanner() + + ' Get user name and say howdy. + GreetUser() + + ' Add some numbers. + Console.WriteLine("10 + 10 is {0}.", Add(10, 10)) + + ' Subtract some numbers + ' (module prefix optional) + Console.WriteLine("10 - 10 is {0}.", MyMathModule.Subtract(10, 10)) + + ' Nope! Error, can't allocated modules! + ' Dim m As New Module1() + + ' Set userName and call second form of GreetUser(). + UserName = "Fred" + MyModule.GreetUser() + Console.ReadLine() + + End Sub + +#Region "Helper methods" + Sub DisplayBanner() + ' Get the current color of the console text. + Dim currColor As ConsoleColor = Console.ForegroundColor + + ' Set text color to yellow. + Console.ForegroundColor = ConsoleColor.Yellow + Console.WriteLine("******* Welcome to FunWithModules *******") + Console.WriteLine("This simple program illustrates the role") + Console.WriteLine("of the Module type.") + Console.WriteLine("*****************************************") + + ' Reset to previous color of your console text. + Console.ForegroundColor = currColor + Console.WriteLine() + End Sub + + Sub GreetUser() + Dim userName As String + Console.Write("Please enter your name: ") + userName = Console.ReadLine() + Console.WriteLine("Hello there {0}. Nice to meet ya.", userName) + End Sub +#End Region + +End Module + +#Region "Extra Modules" +Module MyModule + Public UserName As String + Public Sub GreetUser() + Console.WriteLine("Hello, {0}.", UserName) + End Sub +End Module + +Module MyMathModule + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Function Subtract(ByVal x As Integer, ByVal y As Integer) As Integer + Return x - y + End Function +End Module +#End Region \ No newline at end of file diff --git a/Code/Chapter 3/FunWithStrings/FunWithStrings.sln b/Code/Chapter 3/FunWithStrings/FunWithStrings.sln new file mode 100644 index 0000000..015cec2 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/FunWithStrings.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithStrings", "FunWithStrings.vbproj", "{2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/FunWithStrings/FunWithStrings.suo b/Code/Chapter 3/FunWithStrings/FunWithStrings.suo new file mode 100644 index 0000000000000000000000000000000000000000..de16dc52dafb1acbee02b2dfe628feaf74046e27 GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj b/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj new file mode 100644 index 0000000..3be4689 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2DDEB4C5-6F8A-4837-BA94-DA1B472FCE65} + Exe + FunWithStrings.Program + FunWithStrings + FunWithStrings + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithStrings.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithStrings.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj.user b/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/FunWithStrings.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithStrings/My Project/Application.Designer.vb b/Code/Chapter 3/FunWithStrings/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/FunWithStrings/My Project/Application.myapp b/Code/Chapter 3/FunWithStrings/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/FunWithStrings/My Project/AssemblyInfo.vb b/Code/Chapter 3/FunWithStrings/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b9b212a --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/FunWithStrings/My Project/Resources.Designer.vb b/Code/Chapter 3/FunWithStrings/My Project/Resources.Designer.vb new file mode 100644 index 0000000..c7c4fd5 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithStrings.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithStrings/My Project/Resources.resx b/Code/Chapter 3/FunWithStrings/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/FunWithStrings/My Project/Settings.Designer.vb b/Code/Chapter 3/FunWithStrings/My Project/Settings.Designer.vb new file mode 100644 index 0000000..94360d4 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithStrings.My.MySettings + Get + Return Global.FunWithStrings.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/FunWithStrings/My Project/Settings.settings b/Code/Chapter 3/FunWithStrings/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/FunWithStrings/Program.vb b/Code/Chapter 3/FunWithStrings/Program.vb new file mode 100644 index 0000000..387c625 --- /dev/null +++ b/Code/Chapter 3/FunWithStrings/Program.vb @@ -0,0 +1,72 @@ +Imports System.Text ' StringBuilder lives here! + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Strings *****") + Console.WriteLine() + + Dim firstName As String = "June" + Console.WriteLine("Value of firstName: {0}", firstName) + Console.WriteLine("firstName has {0} characters.", firstName.Length) + Console.WriteLine("firstName in uppercase: {0}", firstName.ToUpper()) + Console.WriteLine("firstName in lowercase: {0}", firstName.ToLower()) + + Console.WriteLine() + + Dim myValue As Integer = 3456787 + + Console.WriteLine("Hex vaule of myValue is: {0:X}", myValue) + Console.WriteLine("Currency value of myValue is: {0:C}", myValue) + + Console.WriteLine() + + Dim s1 As String = "Programming the " + Dim s2 As String = "PsychoDrill (PTP)" + Dim s3 As String = String.Concat(s1, s2) + s3 &= vbLf & "was a great industral project." + Console.WriteLine(s3) + + Console.WriteLine() + + Dim strA As String = "Hello!" + Dim strB As String = "Yo!" + ' False! + Console.WriteLine("strA = strB?: {0}", strA = strB) + strB = "HELLO!" + ' False! + Console.WriteLine("strA = strB?: {0}", strA = strB) + strB = "Hello!" + ' True! + Console.WriteLine("strA = strB?: {0}", strA = strB) + + Console.WriteLine() + + ' Set initial string value + Dim initialString As String = "This is my string." + Console.WriteLine("Initial value: {0}", initialString) + + ' Uppercase the initialString? + Dim upperString As String = initialString.ToUpper() + Console.WriteLine("Upper case copy: {0}", upperString) + + ' Nope! initialString is in the same format! + Console.WriteLine("Initial value: {0}", initialString) + + Console.WriteLine() + + 'Dim strObjA As String = "String A reporting." + 'strObjA = "This is a new string" + + ' Use the StringBuilder. + Dim sb As New StringBuilder("**** Fantastic Games ****") + sb.Append(vbLf) + sb.AppendLine("Half Life 2") + sb.AppendLine("Beyond Good and Evil") + sb.AppendLine("Deus Ex 1 and 2") + sb.Append("System Shock") + sb.Replace("2", "Deus Ex: Invisible War") + Console.WriteLine(sb) + Console.WriteLine("sb has {0} chars.", sb.Length) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 3/TypeConversions/My Project/Application.Designer.vb b/Code/Chapter 3/TypeConversions/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 3/TypeConversions/My Project/Application.myapp b/Code/Chapter 3/TypeConversions/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 3/TypeConversions/My Project/AssemblyInfo.vb b/Code/Chapter 3/TypeConversions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..59eb1af --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 3/TypeConversions/My Project/Resources.Designer.vb b/Code/Chapter 3/TypeConversions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2c8a4ce --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("TypeConversions.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/TypeConversions/My Project/Resources.resx b/Code/Chapter 3/TypeConversions/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 3/TypeConversions/My Project/Settings.Designer.vb b/Code/Chapter 3/TypeConversions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9539dcf --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.TypeConversions.My.MySettings + Get + Return Global.TypeConversions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 3/TypeConversions/My Project/Settings.settings b/Code/Chapter 3/TypeConversions/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 3/TypeConversions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 3/TypeConversions/Program.vb b/Code/Chapter 3/TypeConversions/Program.vb new file mode 100644 index 0000000..cd2e4de --- /dev/null +++ b/Code/Chapter 3/TypeConversions/Program.vb @@ -0,0 +1,25 @@ +' Option directives must be the very first code statements in a *.vb file! +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** The Amazing Addition Program *****") + Dim a As Short = 9 + Dim b As Short = 10 + ' Nope...Dim answer As Short = Add(a, b) + Dim answer As Integer = Add(a, b) + Console.WriteLine("a + b = {0}", answer) + + Dim myByte As Byte + Dim myInt As Integer = 200 + myByte = CByte(myInt) + myByte = CType(myInt, Byte) + myByte = Convert.ToByte(myInt) + Console.WriteLine("Value of myByte: {0}", myByte) + + End Sub + + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function +End Module diff --git a/Code/Chapter 3/TypeConversions/TypeConversions.sln b/Code/Chapter 3/TypeConversions/TypeConversions.sln new file mode 100644 index 0000000..b6f5b41 --- /dev/null +++ b/Code/Chapter 3/TypeConversions/TypeConversions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TypeConversions", "TypeConversions.vbproj", "{A0DF5133-8279-4092-B998-95F05C019D75}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A0DF5133-8279-4092-B998-95F05C019D75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A0DF5133-8279-4092-B998-95F05C019D75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A0DF5133-8279-4092-B998-95F05C019D75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A0DF5133-8279-4092-B998-95F05C019D75}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 3/TypeConversions/TypeConversions.suo b/Code/Chapter 3/TypeConversions/TypeConversions.suo new file mode 100644 index 0000000000000000000000000000000000000000..d86df7a7fed2814392f12950e22899c8cba207da GIT binary patch literal 22016 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 3/TypeConversions/TypeConversions.vbproj b/Code/Chapter 3/TypeConversions/TypeConversions.vbproj new file mode 100644 index 0000000..49fa677 --- /dev/null +++ b/Code/Chapter 3/TypeConversions/TypeConversions.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A0DF5133-8279-4092-B998-95F05C019D75} + Exe + TypeConversions.Program + TypeConversions + TypeConversions + Console + On + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + TypeConversions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + pdbonly + false + true + true + bin\Release\ + TypeConversions.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 3/TypeConversions/TypeConversions.vbproj.user b/Code/Chapter 3/TypeConversions/TypeConversions.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 3/TypeConversions/TypeConversions.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml b/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml new file mode 100644 index 0000000..aeb24a3 --- /dev/null +++ b/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml @@ -0,0 +1,12 @@ + + + + + + diff --git a/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml.vb b/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml.vb new file mode 100644 index 0000000..72829e3 --- /dev/null +++ b/Code/Chapter 30/CodeBehindXamlApp/MainWindow.xaml.vb @@ -0,0 +1,21 @@ +' MainWindow.xaml.vb +Imports System +Imports System.Windows +Imports System.Windows.Controls + +Namespace SimpleXamlApp + Public Partial Class MainWindow + Inherits Window + Public Sub New() + ' Remember! This method is defined + ' within the generated MainWindow.g.vb file. + InitializeComponent() + End Sub + + Private Sub btnExitApp_Clicked(ByVal sender As Object, _ + ByVal e As RoutedEventArgs) + ' Get a handle to the current application and shut it down. + Application.Current.Shutdown() + End Sub + End Class +End Namespace diff --git a/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml b/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml new file mode 100644 index 0000000..0859eea --- /dev/null +++ b/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml @@ -0,0 +1,8 @@ + + + diff --git a/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml.vb b/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml.vb new file mode 100644 index 0000000..b313d9f --- /dev/null +++ b/Code/Chapter 30/CodeBehindXamlApp/MyApp.xaml.vb @@ -0,0 +1,13 @@ +' MyApp.xaml.vb +Imports System +Imports System.Windows +Imports System.Windows.Controls + +Namespace SimpleXamlApp + Public Partial Class MyApp + Inherits Application + Private Sub AppExit(ByVal sender As Object, ByVal e As ExitEventArgs) + MessageBox.Show("App has exited") + End Sub + End Class +End Namespace diff --git a/Code/Chapter 30/CodeBehindXamlApp/SimpleXamlApp.vbproj b/Code/Chapter 30/CodeBehindXamlApp/SimpleXamlApp.vbproj new file mode 100644 index 0000000..3630518 --- /dev/null +++ b/Code/Chapter 30/CodeBehindXamlApp/SimpleXamlApp.vbproj @@ -0,0 +1,22 @@ + + + SimpleXamlApp + SimpleXamlApp + winexe + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 30/SimpleWPFApp/SimpleWPFApp.vb b/Code/Chapter 30/SimpleWPFApp/SimpleWPFApp.vb new file mode 100644 index 0000000..f6b980c --- /dev/null +++ b/Code/Chapter 30/SimpleWPFApp/SimpleWPFApp.vb @@ -0,0 +1,62 @@ +' A simple WPF application, written without XAML or Visual Studio. +Imports System +Imports System.Windows +Imports System.Windows.Controls + +' In this first example, we are defining a single class type to +' represent the application itself and the main window. +Class MyWPFApp + Inherits Application + + _ + Shared Sub Main() + ' Handle the Startup and Exit events, and then run the application. + Dim app As New MyWPFApp() + AddHandler app.Startup, AddressOf AppStartUp + AddHandler app.Exit, AddressOf AppExit + + ' Fires the Startup event. + app.Run() + End Sub + + Shared Sub AppExit(ByVal sender As Object, ByVal e As ExitEventArgs) + MessageBox.Show("App has exited") + End Sub + + Shared Sub AppStartUp(ByVal sender As Object, ByVal e As StartupEventArgs) + ' Create a MainWindow object. + Dim wnd As new MainWindow("My better WPF App!", 200, 300) + End Sub + +End Class + +Class MainWindow + Inherits Window + ' Our UI element. + Private btnExitApp As New Button() + + Public Sub New(ByVal windowTitle As String, ByVal height As Integer, _ + ByVal width As Integer) + ' Configure button and set the child control. + AddHandler btnExitApp.Click, AddressOf btnExitApp_Clicked + btnExitApp.Content = "Exit Application" + btnExitApp.Height = 25 + btnExitApp.Width = 100 + + ' Set the content of this window to a single button. + Me.AddChild(btnExitApp) + + ' Configure the window. + Me.Title = windowTitle + Me.WindowStartupLocation = WindowStartupLocation.CenterScreen + Me.Height = height + Me.Width = width + Me.Show() + End Sub + + Sub btnExitApp_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Get a handle to the current application and shut it down. + Application.Current.Shutdown() + End Sub +End Class + diff --git a/Code/Chapter 30/SimpleWPFApp/build.rsp b/Code/Chapter 30/SimpleWPFApp/build.rsp new file mode 100644 index 0000000..4961de7 --- /dev/null +++ b/Code/Chapter 30/SimpleWPFApp/build.rsp @@ -0,0 +1,8 @@ +# build.rsp +# +/target:winexe +/out:SimpleWPFApp.exe +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" +*.vb diff --git a/Code/Chapter 30/SimpleWPFAppRevisited/SimpleWPFApp.vb b/Code/Chapter 30/SimpleWPFAppRevisited/SimpleWPFApp.vb new file mode 100644 index 0000000..ecc1304 --- /dev/null +++ b/Code/Chapter 30/SimpleWPFAppRevisited/SimpleWPFApp.vb @@ -0,0 +1,126 @@ +' A simple WPF application, written without XAML. +Imports System +Imports System.Windows +Imports System.Windows.Controls + +' In this first example, we are defining a single class type to +' represent the application itself and the main window. +Public Class MyWPFApp + Inherits Application + _ + Public Shared Sub Main() + ' Handle the Startup and Exit events, and then run the application. + Dim app As New MyWPFApp() + AddHandler app.Startup, AddressOf AppStartUp + AddHandler app.Exit, AddressOf AppExit + ' Fires the Startup event. + app.Run() + End Sub + + Shared Sub AppExit(ByVal sender As Object, ByVal e As ExitEventArgs) + MessageBox.Show("App has exited") + End Sub + + Shared Sub AppStartUp(ByVal sender As Object, ByVal e As StartupEventArgs) + ' Check the incoming command-line arguments and see if they + ' specified a flag for /GODMODE. + Application.Current.Properties("GodMode") = False + For Each arg As String In e.Args + If arg.ToLower() = "/godmode" Then + Application.Current.Properties("GodMode") = True + Exit For + End If + Next + + ' Create a MainWindow object. + Dim wnd As New MainWindow("My better WPF App!", 200, 300) + End Sub + +End Class + +Class MainWindow + Inherits Window + Private btnExitApp As New Button() + + ' This string will document which events fire, and when. + Private lifeTimeData As String = String.Empty + + Protected Sub MainWindow_Activated(ByVal sender As Object, ByVal e As EventArgs) + lifeTimeData &= "Activate Event Fired!" & vbLf + End Sub + Protected Sub MainWindow_Deactivated(ByVal sender As Object, ByVal e As EventArgs) + lifeTimeData &= "Deactivated Event Fired!" & vbLf + End Sub + Protected Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As EventArgs) + lifeTimeData &= "Loaded Event Fired!" & vbLf + End Sub + + Protected Sub MainWindow_Closing(ByVal sender As Object, _ + ByVal e As System.ComponentModel.CancelEventArgs) + lifeTimeData &= "Closing Event Fired!" & vbLf + + ' See if the user really wants to shut down this window. + Dim msg As String = "Do you want to close without saving?" + Dim result As MessageBoxResult = MessageBox.Show(msg, _ + "My App", MessageBoxButton.YesNo, MessageBoxImage.Warning) + If result = MessageBoxResult.No Then + ' If user doesn't want to close, cancel closure. + e.Cancel = True + End If + End Sub + + Protected Sub MainWindow_MouseMove(ByVal sender As Object, _ + ByVal e As System.Windows.Input.MouseEventArgs) + ' Set the title of the window to the current X,Y of the mouse. + Me.Title = e.GetPosition(Me).ToString() + End Sub + + Protected Sub MainWindow_Closed(ByVal sender As Object, ByVal e As EventArgs) + lifeTimeData &= "Closed Event Fired!" & vbLf + MessageBox.Show(lifeTimeData) + End Sub + + Protected Sub MainWindow_KeyUp(ByVal sender As Object, _ + ByVal e As System.Windows.Input. KeyEventArgs) + ' Display keypress. + Me.Title = e.Key.ToString() + End Sub + + Public Sub New(ByVal windowTitle As String, ByVal height As Integer, _ + ByVal width As Integer) + ' Rig up events. + AddHandler Me.Activated, AddressOf MainWindow_Activated + AddHandler Me.Deactivated, AddressOf MainWindow_Deactivated + AddHandler btnExitApp.Click, AddressOf btnExitApp_Clicked + AddHandler Me.Closing, AddressOf MainWindow_Closing + AddHandler Me.Closed, AddressOf MainWindow_Closed + AddHandler Me.MouseMove, AddressOf MainWindow_MouseMove + AddHandler Me.KeyUp, AddressOf MainWindow_KeyUp + + ' Configure button and set the child control. + btnExitApp.Content = "Exit Application" + btnExitApp.Height = 25 + btnExitApp.Width = 100 + + ' Set the content of this window to a single button. + Me.AddChild(btnExitApp) + + ' Configure the window. + Me.Title = windowTitle + Me.WindowStartupLocation = WindowStartupLocation.CenterScreen + Me.Height = height + Me.Width = width + Me.Show() + End Sub + + Sub btnExitApp_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Did user enable /godmode? + If CBool(Application.Current.Properties("GodMode")) Then + MessageBox.Show("Cheater!") + End If + + ' Get a handle to the current application and shut it down. + ' Application.Current.Shutdown() + Me.Close() + End Sub +End Class diff --git a/Code/Chapter 30/SimpleWPFAppRevisited/build.rsp b/Code/Chapter 30/SimpleWPFAppRevisited/build.rsp new file mode 100644 index 0000000..4961de7 --- /dev/null +++ b/Code/Chapter 30/SimpleWPFAppRevisited/build.rsp @@ -0,0 +1,8 @@ +# build.rsp +# +/target:winexe +/out:SimpleWPFApp.exe +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" +/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" +*.vb diff --git a/Code/Chapter 30/SimpleXamlApp/MainWindow.xaml b/Code/Chapter 30/SimpleXamlApp/MainWindow.xaml new file mode 100644 index 0000000..40dd2fd --- /dev/null +++ b/Code/Chapter 30/SimpleXamlApp/MainWindow.xaml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/Code/Chapter 30/SimpleXamlApp/MyApp.xaml b/Code/Chapter 30/SimpleXamlApp/MyApp.xaml new file mode 100644 index 0000000..4f2d7b5 --- /dev/null +++ b/Code/Chapter 30/SimpleXamlApp/MyApp.xaml @@ -0,0 +1,12 @@ + + + + + diff --git a/Code/Chapter 30/SimpleXamlApp/SimpleXamlApp.vbproj b/Code/Chapter 30/SimpleXamlApp/SimpleXamlApp.vbproj new file mode 100644 index 0000000..86f5ed0 --- /dev/null +++ b/Code/Chapter 30/SimpleXamlApp/SimpleXamlApp.vbproj @@ -0,0 +1,31 @@ + + + SimpleXamlApp + SimpleXamlApp + winexe + v3.0 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + 2.0 + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + \ No newline at end of file diff --git a/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.sln b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.sln new file mode 100644 index 0000000..8c6a9d6 --- /dev/null +++ b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleXamlPad", "SimpleXamlPad\SimpleXamlPad.vbproj", "{6A2390B6-3664-4F7D-844C-18598589A1E3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6A2390B6-3664-4F7D-844C-18598589A1E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A2390B6-3664-4F7D-844C-18598589A1E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A2390B6-3664-4F7D-844C-18598589A1E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A2390B6-3664-4F7D-844C-18598589A1E3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.suo b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad.suo new file mode 100644 index 0000000000000000000000000000000000000000..158e37a8be21a11c4ddddcf7d8892dc2be275569 GIT binary patch literal 24064 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 B1+V}B literal 0 HcmV?d00001 diff --git a/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml.vb b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/MainWindow.xaml b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/MainWindow.xaml new file mode 100644 index 0000000..7dfe622 --- /dev/null +++ b/Code/Chapter 30/SimpleXamlPad/SimpleXamlPad/MainWindow.xaml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/Code/Chapter 31/ControlReview/MainWindow.xaml.vb b/Code/Chapter 31/ControlReview/MainWindow.xaml.vb new file mode 100644 index 0000000..f1aeadf --- /dev/null +++ b/Code/Chapter 31/ControlReview/MainWindow.xaml.vb @@ -0,0 +1,15 @@ +Class MainWindow + Sub New() + InitializeComponent() + ' Change FontSize of Label. + lblInstructions.FontSize = 14 + End Sub + + Private Sub btnPurchaseOptions_Click(ByVal sender As System.Object, _ + ByVal e As System.Windows.RoutedEventArgs) Handles btnPurchaseOptions.Click + MessageBox.Show("Button has been clicked") + End Sub + +End Class + + diff --git a/Code/Chapter 31/ControlReview/My Project/AssemblyInfo.vb b/Code/Chapter 31/ControlReview/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1224aa6 --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 31/ControlReview/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 31/ControlReview/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 31/ControlReview/My Project/Resources.Designer.vb b/Code/Chapter 31/ControlReview/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/ControlReview/My Project/Resources.resx b/Code/Chapter 31/ControlReview/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 31/ControlReview/My Project/Settings.Designer.vb b/Code/Chapter 31/ControlReview/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8fcd7d7 --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ControlReview.My.MySettings + Get + Return Global.ControlReview.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/ControlReview/My Project/Settings.settings b/Code/Chapter 31/ControlReview/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 31/ControlReview/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/CustomSpinButtonApp/Application.xaml b/Code/Chapter 31/CustomSpinButtonApp/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 31/CustomSpinButtonApp/Application.xaml.vb b/Code/Chapter 31/CustomSpinButtonApp/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.sln b/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.sln new file mode 100644 index 0000000..18bff55 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomSpinButtonApp", "CustomSpinButtonApp.vbproj", "{0A433A1D-0A60-45ED-B590-0FA448FBB6BD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0A433A1D-0A60-45ED-B590-0FA448FBB6BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0A433A1D-0A60-45ED-B590-0FA448FBB6BD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0A433A1D-0A60-45ED-B590-0FA448FBB6BD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0A433A1D-0A60-45ED-B590-0FA448FBB6BD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.suo b/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..7ef6248e7e965ee7b61f54f26d58a309a765a3be GIT binary patch literal 38400 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.vbproj b/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.vbproj new file mode 100644 index 0000000..ff3a320 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/CustomSpinButtonApp.vbproj @@ -0,0 +1,127 @@ + + + Debug + AnyCPU + {0A433A1D-0A60-45ED-B590-0FA448FBB6BD} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + CustomSpinButtonApp + CustomSpinButtonApp + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + CustomSpinButtonApp.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + CustomSpinButtonApp.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml b/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml new file mode 100644 index 0000000..722d948 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml.vb b/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml.vb new file mode 100644 index 0000000..0ff71c4 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/MainWindow.xaml.vb @@ -0,0 +1,19 @@ +Class MainWindow + Private currValue As Integer = 0 + + Public Sub New() + InitializeComponent() + lblCurrentValue.Content = currValue + End Sub + Protected Sub repeatAddValueButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Add 1 to the current value and show in label. + currValue += 1 + lblCurrentValue.Content = currValue + End Sub + + Protected Sub repeatRemoveValueButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Subtract 1 from the current value and show in label. + currValue -= 1 + lblCurrentValue.Content = currValue + End Sub +End Class diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/AssemblyInfo.vb b/Code/Chapter 31/CustomSpinButtonApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1dbccbc --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 31/CustomSpinButtonApp/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.Designer.vb b/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.resx b/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.Designer.vb b/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5e16fb1 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomSpinButtonApp.My.MySettings + Get + Return Global.CustomSpinButtonApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.settings b/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 31/CustomSpinButtonApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/GridWithSplitter.xaml b/Code/Chapter 31/GridWithSplitter.xaml new file mode 100644 index 0000000..ce36114 --- /dev/null +++ b/Code/Chapter 31/GridWithSplitter.xaml @@ -0,0 +1,22 @@ + + + + + + + + + + + diff --git a/Code/Chapter 31/ListControls/Application.xaml b/Code/Chapter 31/ListControls/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 31/ListControls/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 31/ListControls/Application.xaml.vb b/Code/Chapter 31/ListControls/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 31/ListControls/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 31/ListControls/ListControls.sln b/Code/Chapter 31/ListControls/ListControls.sln new file mode 100644 index 0000000..94a8561 --- /dev/null +++ b/Code/Chapter 31/ListControls/ListControls.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ListControls", "ListControls.vbproj", "{ECB266C7-A870-4FAC-B675-55B6ED740DB7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ECB266C7-A870-4FAC-B675-55B6ED740DB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ECB266C7-A870-4FAC-B675-55B6ED740DB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ECB266C7-A870-4FAC-B675-55B6ED740DB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ECB266C7-A870-4FAC-B675-55B6ED740DB7}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 31/ListControls/ListControls.suo b/Code/Chapter 31/ListControls/ListControls.suo new file mode 100644 index 0000000000000000000000000000000000000000..669c0896795e24e4d06b342fe06cd2ed0a9488d9 GIT binary patch literal 37376 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 31/ListControls/ListControls.vbproj b/Code/Chapter 31/ListControls/ListControls.vbproj new file mode 100644 index 0000000..6214cf2 --- /dev/null +++ b/Code/Chapter 31/ListControls/ListControls.vbproj @@ -0,0 +1,127 @@ + + + Debug + AnyCPU + {ECB266C7-A870-4FAC-B675-55B6ED740DB7} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + ListControls + ListControls + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + ListControls.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + ListControls.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/ListControls/MainWindow.xaml b/Code/Chapter 31/ListControls/MainWindow.xaml new file mode 100644 index 0000000..c50a097 --- /dev/null +++ b/Code/Chapter 31/ListControls/MainWindow.xaml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 31/ListControls/MainWindow.xaml.vb b/Code/Chapter 31/ListControls/MainWindow.xaml.vb new file mode 100644 index 0000000..3f9f7cf --- /dev/null +++ b/Code/Chapter 31/ListControls/MainWindow.xaml.vb @@ -0,0 +1,38 @@ +Class MainWindow + + Public Sub New() + InitializeComponent() + + FillListBox() + End Sub + + Private Sub FillListBox() + ' Add items to the list box. + lstVideoGameConsoles.Items.Add("Microsoft XBox 360") + lstVideoGameConsoles.Items.Add("Sony Playstation 3") + lstVideoGameConsoles.Items.Add("Nintendo Wii") + lstVideoGameConsoles.Items.Add("Sony PSP") + lstVideoGameConsoles.Items.Add("Nintendo DS") + End Sub + + Private Sub btnGetGameSystem_Click(ByVal sender As System.Object, _ + ByVal e As System.Windows.RoutedEventArgs) + Dim data As String = String.Empty + data &= String.Format("SelectedIndex = {0}" & vbLf, _ + lstVideoGameConsoles.SelectedIndex) + data &= String.Format("SelectedItem = {0}" & vbLf, _ + lstVideoGameConsoles.SelectedItem) + data &= String.Format("SelectedValue = {0}" & vbLf, _ + lstVideoGameConsoles.SelectedValue) + MessageBox.Show(data, "Your Game Info") + End Sub + + Protected Sub btnGetColor_Click(ByVal sender As Object, ByVal args As RoutedEventArgs) + Dim data As String = String.Empty + data &= String.Format("SelectedIndex = {0}" & vbLf, lstColors.SelectedIndex) + data &= String.Format("SelectedItem = {0}" & vbLf, lstColors.SelectedItem) + data &= String.Format("SelectedValue = {0}", _ + TryCast(lstColors.Items(lstColors.SelectedIndex), StackPanel).Tag) + MessageBox.Show(data, "Your Color Info") + End Sub +End Class diff --git a/Code/Chapter 31/ListControls/My Project/AssemblyInfo.vb b/Code/Chapter 31/ListControls/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b10af42 --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 31/ListControls/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 31/ListControls/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 31/ListControls/My Project/Resources.Designer.vb b/Code/Chapter 31/ListControls/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/ListControls/My Project/Resources.resx b/Code/Chapter 31/ListControls/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 31/ListControls/My Project/Settings.Designer.vb b/Code/Chapter 31/ListControls/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4f400fc --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ListControls.My.MySettings + Get + Return Global.ListControls.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/ListControls/My Project/Settings.settings b/Code/Chapter 31/ListControls/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 31/ListControls/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/MySpellChecker/Application.xaml b/Code/Chapter 31/MySpellChecker/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 31/MySpellChecker/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 31/MySpellChecker/Application.xaml.vb b/Code/Chapter 31/MySpellChecker/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 31/MySpellChecker/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 31/MySpellChecker/MainWindow.xaml b/Code/Chapter 31/MySpellChecker/MainWindow.xaml new file mode 100644 index 0000000..f8d47f1 --- /dev/null +++ b/Code/Chapter 31/MySpellChecker/MainWindow.xaml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/SimpleDataBinding/Application.xaml b/Code/Chapter 31/SimpleDataBinding/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 31/SimpleDataBinding/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 31/SimpleDataBinding/Application.xaml.vb b/Code/Chapter 31/SimpleDataBinding/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 31/SimpleDataBinding/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 31/SimpleDataBinding/MainWindow.xaml b/Code/Chapter 31/SimpleDataBinding/MainWindow.xaml new file mode 100644 index 0000000..488915d --- /dev/null +++ b/Code/Chapter 31/SimpleDataBinding/MainWindow.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 31/SimpleGrid.xaml b/Code/Chapter 31/SimpleGrid.xaml new file mode 100644 index 0000000..35b076b --- /dev/null +++ b/Code/Chapter 31/SimpleGrid.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 31/SimpleStackPanel.xaml b/Code/Chapter 31/SimpleStackPanel.xaml new file mode 100644 index 0000000..d1e1184 --- /dev/null +++ b/Code/Chapter 31/SimpleStackPanel.xaml @@ -0,0 +1,16 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 31/SimpleWrapPanel.xaml b/Code/Chapter 31/SimpleWrapPanel.xaml new file mode 100644 index 0000000..991e1a9 --- /dev/null +++ b/Code/Chapter 31/SimpleWrapPanel.xaml @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 31/TextControls/Application.xaml b/Code/Chapter 31/TextControls/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 31/TextControls/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 31/TextControls/Application.xaml.vb b/Code/Chapter 31/TextControls/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 31/TextControls/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 31/TextControls/MainWindow.xaml b/Code/Chapter 31/TextControls/MainWindow.xaml new file mode 100644 index 0000000..f75f3eb --- /dev/null +++ b/Code/Chapter 31/TextControls/MainWindow.xaml @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/Code/Chapter 31/WPFControlEvents/MainWindow.xaml.vb b/Code/Chapter 31/WPFControlEvents/MainWindow.xaml.vb new file mode 100644 index 0000000..a170d90 --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/MainWindow.xaml.vb @@ -0,0 +1,28 @@ +Class MainWindow + ' This is used to hold data on the mouse-related + ' activity. + Private mouseActivityOuterEllipse As String = String.Empty + + Public Sub New() + InitializeComponent() + End Sub + + Public Sub btnClickMe_Clicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Show the final string. + mouseActivityOuterEllipse &= "Button Click event fired!" & vbLf + MessageBox.Show(mouseActivityOuterEllipse) + + ' Clear string for next test. + mouseActivityOuterEllipse = String.Empty + End Sub + + Public Sub outerEllipse_MouseDown(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Add data to string. + mouseActivityOuterEllipse &= "MouseDown event fired!" & vbLf + End Sub + + Public Sub outerEllipse_PreviewMouseDown(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Add data to string. + mouseActivityOuterEllipse = "PreviewMouseDown event fired!" & vbLf + End Sub +End Class diff --git a/Code/Chapter 31/WPFControlEvents/My Project/AssemblyInfo.vb b/Code/Chapter 31/WPFControlEvents/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..897849f --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 31/WPFControlEvents/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 31/WPFControlEvents/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 31/WPFControlEvents/My Project/Resources.Designer.vb b/Code/Chapter 31/WPFControlEvents/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/WPFControlEvents/My Project/Resources.resx b/Code/Chapter 31/WPFControlEvents/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 31/WPFControlEvents/My Project/Settings.Designer.vb b/Code/Chapter 31/WPFControlEvents/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3fed39c --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WPFControlEvents.My.MySettings + Get + Return Global.WPFControlEvents.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 31/WPFControlEvents/My Project/Settings.settings b/Code/Chapter 31/WPFControlEvents/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/WPFControlEvents/WPFControlEvents.sln b/Code/Chapter 31/WPFControlEvents/WPFControlEvents.sln new file mode 100644 index 0000000..572191e --- /dev/null +++ b/Code/Chapter 31/WPFControlEvents/WPFControlEvents.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WPFControlEvents", "WPFControlEvents.vbproj", "{3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 31/WPFControlEvents/WPFControlEvents.suo b/Code/Chapter 31/WPFControlEvents/WPFControlEvents.suo new file mode 100644 index 0000000000000000000000000000000000000000..53b6bc42b0e2fab85cd176b8a9b11d1e4e9c7ac8 GIT binary patch literal 32256 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 + + Debug + AnyCPU + {3EADE6A1-9E5B-4DAA-AC8B-271D59AF3E83} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + WPFControlEvents + WPFControlEvents + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + WPFControlEvents.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + WPFControlEvents.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 31/WindowFrame.xaml b/Code/Chapter 31/WindowFrame.xaml new file mode 100644 index 0000000..348ae4e --- /dev/null +++ b/Code/Chapter 31/WindowFrame.xaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + Ready + + + + + + + + + + + + + + + + + + Desktop markup? I like it! + + + diff --git a/Code/Chapter 32/AnimatedButtonWithDiscreteKeyFrames.xaml b/Code/Chapter 32/AnimatedButtonWithDiscreteKeyFrames.xaml new file mode 100644 index 0000000..f856208 --- /dev/null +++ b/Code/Chapter 32/AnimatedButtonWithDiscreteKeyFrames.xaml @@ -0,0 +1,24 @@ + + + + + diff --git a/Code/Chapter 32/AnimatedLabel/AnimatedLabel.sln b/Code/Chapter 32/AnimatedLabel/AnimatedLabel.sln new file mode 100644 index 0000000..0c6473b --- /dev/null +++ b/Code/Chapter 32/AnimatedLabel/AnimatedLabel.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AnimatedLabel", "AnimatedLabel.vbproj", "{797FCF17-2C8A-4710-896F-8E04F354F5D8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {797FCF17-2C8A-4710-896F-8E04F354F5D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {797FCF17-2C8A-4710-896F-8E04F354F5D8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {797FCF17-2C8A-4710-896F-8E04F354F5D8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {797FCF17-2C8A-4710-896F-8E04F354F5D8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 32/AnimatedLabel/AnimatedLabel.suo b/Code/Chapter 32/AnimatedLabel/AnimatedLabel.suo new file mode 100644 index 0000000000000000000000000000000000000000..f147378b069674bdabe0be7f72bc04a91588e09b GIT binary patch literal 26624 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 KkGub*@BabZ2wIf@ literal 0 HcmV?d00001 diff --git a/Code/Chapter 32/AnimatedLabel/AnimatedLabel.vbproj b/Code/Chapter 32/AnimatedLabel/AnimatedLabel.vbproj new file mode 100644 index 0000000..3466a47 --- /dev/null +++ b/Code/Chapter 32/AnimatedLabel/AnimatedLabel.vbproj @@ -0,0 +1,127 @@ + + + Debug + AnyCPU + {797FCF17-2C8A-4710-896F-8E04F354F5D8} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + AnimatedLabel + AnimatedLabel + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + AnimatedLabel.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + AnimatedLabel.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/AnimatedLabel/Application.xaml b/Code/Chapter 32/AnimatedLabel/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 32/AnimatedLabel/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 32/AnimatedLabel/Application.xaml.vb b/Code/Chapter 32/AnimatedLabel/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 32/AnimatedLabel/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 32/AnimatedLabel/MainWindow.xaml b/Code/Chapter 32/AnimatedLabel/MainWindow.xaml new file mode 100644 index 0000000..4e92492 --- /dev/null +++ b/Code/Chapter 32/AnimatedLabel/MainWindow.xaml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/Code/Chapter 32/ControlTemplates/MainWindow.xaml.vb b/Code/Chapter 32/ControlTemplates/MainWindow.xaml.vb new file mode 100644 index 0000000..62292b8 --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/MainWindow.xaml.vb @@ -0,0 +1,5 @@ +Class MainWindow + Private Sub myButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) + MessageBox.Show("Clicked!") + End Sub +End Class diff --git a/Code/Chapter 32/ControlTemplates/My Project/AssemblyInfo.vb b/Code/Chapter 32/ControlTemplates/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1924e1f --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 32/ControlTemplates/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 32/ControlTemplates/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 32/ControlTemplates/My Project/Resources.Designer.vb b/Code/Chapter 32/ControlTemplates/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/ControlTemplates/My Project/Resources.resx b/Code/Chapter 32/ControlTemplates/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 32/ControlTemplates/My Project/Settings.Designer.vb b/Code/Chapter 32/ControlTemplates/My Project/Settings.Designer.vb new file mode 100644 index 0000000..99e5c67 --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ControlTemplates.My.MySettings + Get + Return Global.ControlTemplates.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/ControlTemplates/My Project/Settings.settings b/Code/Chapter 32/ControlTemplates/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 32/ControlTemplates/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/FunWithBrushes.xaml b/Code/Chapter 32/FunWithBrushes.xaml new file mode 100644 index 0000000..e7959ad --- /dev/null +++ b/Code/Chapter 32/FunWithBrushes.xaml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/FunWithDrawingGeometries.xaml b/Code/Chapter 32/FunWithDrawingGeometries.xaml new file mode 100644 index 0000000..1301345 --- /dev/null +++ b/Code/Chapter 32/FunWithDrawingGeometries.xaml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 32/FunWithResources/Application.xaml b/Code/Chapter 32/FunWithResources/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 32/FunWithResources/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 32/FunWithResources/Application.xaml.vb b/Code/Chapter 32/FunWithResources/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 32/FunWithResources/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 32/FunWithResources/FunWithResources.sln b/Code/Chapter 32/FunWithResources/FunWithResources.sln new file mode 100644 index 0000000..6db0504 --- /dev/null +++ b/Code/Chapter 32/FunWithResources/FunWithResources.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithResources", "FunWithResources.vbproj", "{7175A265-C078-44EB-A977-3302E45579A6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7175A265-C078-44EB-A977-3302E45579A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7175A265-C078-44EB-A977-3302E45579A6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7175A265-C078-44EB-A977-3302E45579A6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7175A265-C078-44EB-A977-3302E45579A6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 32/FunWithResources/FunWithResources.suo b/Code/Chapter 32/FunWithResources/FunWithResources.suo new file mode 100644 index 0000000000000000000000000000000000000000..fbcef4c58ad0aa1b83a9e9ceb1430bc44feb2608 GIT binary patch literal 27648 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 WLHaX0sEr;^0rm + + Debug + AnyCPU + {7175A265-C078-44EB-A977-3302E45579A6} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + FunWithResources + FunWithResources + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + FunWithResources.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + FunWithResources.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/FunWithResources/IntertechBlue.gif b/Code/Chapter 32/FunWithResources/IntertechBlue.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dcd330ec2c4a4468608e49d178f3d51a92676f3 GIT binary patch literal 1145 zcmV-<1cv)ZNk%w1VUPfl0HXf@z`(%w_xCAEj8bc*7&(N5l)bIB)&KwiA^8LW00000 zEC2ui0FVHZ000C32)f+}*GG&mxM+sIaj$~<4hQO_BalUXYS3$wvoICG)9|jtn z(BLZ?jX@z!aBMnXHl>pItXd@osZ@9EdXw7Qz)QAf!@_ZSeT<^T?6~ipmfK}#I*WVn zliYe7RDOgZfPn-cg^LtmfohDA5Qln$l9vmVZ;+Usd4Yg*tQl_kz zKw$!~v6v}BwYR(g7#SW0p}oY##>dFX%FE2n&d<=%(#rwA1-8>=HLe5$!`WRmq)Gzc z;7!%zwC3kMHHZX!?K}qDZ}Rgo_3$g$`6T=Jtzh?0#4Ld;m=rYe4&k1KC2~1rK@cK@ zgA-S9vN%EiV#a^_-QD<3wp}!#3{vFgrql~mZ)aHT7hd_D>8Dq3uRQXSTGF0s__FVC2l3K zZDCODL;-ONrLsC9z*&*?d}b_5NJw4@LLXklAXw#w!*+ZU?hDF6wYe%c%K5~%LSniL zE<4tvbxq)(R{WGv1oI5fSUD1t`?u2#Mu93>&$S zUc{Y#yX~A`FG{u8HLreySM(14sB?eBE01x+<7x9!abAM>^mI@&swbZ+{HU>N)aIG{ zzTs8>;z(t|cK*56M**blM^k_P!Qsg`0(#b9e7HEGU}y|Z$N_JDG(?dh8lqv~8VKTW z;Q|?kcp@1_4HQCCAr8d|aG+U`qJ|@OQKA$%!Wd(XebA_wjX&1WA#C*>S0oD&+R>ts zL@vofl23Su29-V*Nu?7{D#0NHnBBJ`Is_7crIZ@oA!Jn|gqdDvY-Ab6nP_&CqY-Or zLDU3pa@S-TU0(TOoqv*1W4Ti`yvjhVByH&fuvz`ks&11RI$DnZ z#5&~b5vQtW!FT@6dPTJGFsq@i?l_9Zt;af+tf}6LIH-TmLR)SaV}?tTwb!m2Mvwjp z>jSp@eEER86TusAaCD9bSsC(%p|1n{3N&sR&AxJOb^hvz+`$bLY^l9Q@cL1}!9^TS z!n?JJ+`?;6I~&KWdHjWQmtKV|#!YCv@x!AHEQiUgwG3v;Fgszfpwo^fTrKI|9&s88DleU9FT?MYJ-8z`fdKFDILR=Sub1LXKdf-#Ke)`_3w<{)j7}!3 literal 0 HcmV?d00001 diff --git a/Code/Chapter 32/FunWithResources/MainWindow.xaml b/Code/Chapter 32/FunWithResources/MainWindow.xaml new file mode 100644 index 0000000..4b3a343 --- /dev/null +++ b/Code/Chapter 32/FunWithResources/MainWindow.xaml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 32/Gooseberry0007.JPG b/Code/Chapter 32/Gooseberry0007.JPG new file mode 100644 index 0000000000000000000000000000000000000000..43674743e55d2445ce378f74e9ebe66fe2f00305 GIT binary patch literal 490385 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 z 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 z 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

;Nx{myC?Y0-;SWo~7u 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%0AK^iKPk`S&3^k+56!Xs^-im&FH)`b!bFjYEY@kj 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

T3*Le*lr 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 F|Jegq*NFfC literal 0 HcmV?d00001 diff --git a/Code/Chapter 32/IntertechBlue.gif b/Code/Chapter 32/IntertechBlue.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dcd330ec2c4a4468608e49d178f3d51a92676f3 GIT binary patch literal 1145 zcmV-<1cv)ZNk%w1VUPfl0HXf@z`(%w_xCAEj8bc*7&(N5l)bIB)&KwiA^8LW00000 zEC2ui0FVHZ000C32)f+}*GG&mxM+sIaj$~<4hQO_BalUXYS3$wvoICG)9|jtn z(BLZ?jX@z!aBMnXHl>pItXd@osZ@9EdXw7Qz)QAf!@_ZSeT<^T?6~ipmfK}#I*WVn zliYe7RDOgZfPn-cg^LtmfohDA5Qln$l9vmVZ;+Usd4Yg*tQl_kz zKw$!~v6v}BwYR(g7#SW0p}oY##>dFX%FE2n&d<=%(#rwA1-8>=HLe5$!`WRmq)Gzc z;7!%zwC3kMHHZX!?K}qDZ}Rgo_3$g$`6T=Jtzh?0#4Ld;m=rYe4&k1KC2~1rK@cK@ zgA-S9vN%EiV#a^_-QD<3wp}!#3{vFgrql~mZ)aHT7hd_D>8Dq3uRQXSTGF0s__FVC2l3K zZDCODL;-ONrLsC9z*&*?d}b_5NJw4@LLXklAXw#w!*+ZU?hDF6wYe%c%K5~%LSniL zE<4tvbxq)(R{WGv1oI5fSUD1t`?u2#Mu93>&$S zUc{Y#yX~A`FG{u8HLreySM(14sB?eBE01x+<7x9!abAM>^mI@&swbZ+{HU>N)aIG{ zzTs8>;z(t|cK*56M**blM^k_P!Qsg`0(#b9e7HEGU}y|Z$N_JDG(?dh8lqv~8VKTW z;Q|?kcp@1_4HQCCAr8d|aG+U`qJ|@OQKA$%!Wd(XebA_wjX&1WA#C*>S0oD&+R>ts zL@vofl23Su29-V*Nu?7{D#0NHnBBJ`Is_7crIZ@oA!Jn|gqdDvY-Ab6nP_&CqY-Or zLDU3pa@S-TU0(TOoqv*1W4Ti`yvjhVByH&fuvz`ks&11RI$DnZ z#5&~b5vQtW!FT@6dPTJGFsq@i?l_9Zt;af+tf}6LIH-TmLR)SaV}?tTwb!m2Mvwjp z>jSp@eEER86TusAaCD9bSsC(%p|1n{3N&sR&AxJOb^hvz+`$bLY^l9Q@cL1}!9^TS z!n?JJ+`?;6I~&KWdHjWQmtKV|#!YCv@x!AHEQiUgwG3v;Fgszfpwo^fTrKI|9&s88DleU9FT?MYJ-8z`fdKFDILR=Sub1LXKdf-#Ke)`_3w<{)j7}!3 literal 0 HcmV?d00001 diff --git a/Code/Chapter 32/SpinButtonWithLinearKeyFrames.xaml b/Code/Chapter 32/SpinButtonWithLinearKeyFrames.xaml new file mode 100644 index 0000000..f56d0d9 --- /dev/null +++ b/Code/Chapter 32/SpinButtonWithLinearKeyFrames.xaml @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/StyleWithTriggers.xaml b/Code/Chapter 32/StyleWithTriggers.xaml new file mode 100644 index 0000000..fe917ba --- /dev/null +++ b/Code/Chapter 32/StyleWithTriggers.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + diff --git a/Code/Chapter 32/StylesAtRuntime/Application.xaml b/Code/Chapter 32/StylesAtRuntime/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 32/StylesAtRuntime/Application.xaml.vb b/Code/Chapter 32/StylesAtRuntime/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml b/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml new file mode 100644 index 0000000..4354076 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + Please select a style for the button on the right. + + + + + + + diff --git a/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml.vb b/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml.vb new file mode 100644 index 0000000..4830a69 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/MainWindow.xaml.vb @@ -0,0 +1,19 @@ +Class MainWindow + Public Sub New() + InitializeComponent() + + ' Add items to our list box. + lstStyles.Items.Add("TiltStyle") + lstStyles.Items.Add("GreenStyle") + lstStyles.Items.Add("MouseOverStyle") + End Sub + + Private Sub lstStyles_Changed(ByVal sender As System.Object, _ + ByVal e As System.Windows.Controls.SelectionChangedEventArgs) + ' Get the selected style name from the list box. + Dim currStyle As System.Windows.Style = DirectCast(FindResource(lstStyles.SelectedValue), System.Windows.Style) + + ' Set the style of the button type. + Me.btnMouseOverStyle.Style = currStyle + End Sub +End Class diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/AssemblyInfo.vb b/Code/Chapter 32/StylesAtRuntime/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..dc95fbe --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 32/StylesAtRuntime/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + '''

+ ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/Resources.Designer.vb b/Code/Chapter 32/StylesAtRuntime/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/Resources.resx b/Code/Chapter 32/StylesAtRuntime/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/Settings.Designer.vb b/Code/Chapter 32/StylesAtRuntime/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9ce5e33 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.StylesAtRuntime.My.MySettings + Get + Return Global.StylesAtRuntime.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/StylesAtRuntime/My Project/Settings.settings b/Code/Chapter 32/StylesAtRuntime/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.sln b/Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.sln new file mode 100644 index 0000000..ec7c3f3 --- /dev/null +++ b/Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StylesAtRuntime", "StylesAtRuntime.vbproj", "{FA491F65-91D9-4E15-AF25-5B7B7B669243}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FA491F65-91D9-4E15-AF25-5B7B7B669243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA491F65-91D9-4E15-AF25-5B7B7B669243}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA491F65-91D9-4E15-AF25-5B7B7B669243}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA491F65-91D9-4E15-AF25-5B7B7B669243}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.suo b/Code/Chapter 32/StylesAtRuntime/StylesAtRuntime.suo new file mode 100644 index 0000000000000000000000000000000000000000..f73694da973726cd96bf38b394d94841aa893160 GIT binary patch literal 27648 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 tp#b1h2N)m#e}+Z + + Debug + AnyCPU + {FA491F65-91D9-4E15-AF25-5B7B7B669243} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + StylesAtRuntime + StylesAtRuntime + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + StylesAtRuntime.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + StylesAtRuntime.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/WPFGraphicsOptions/Application.xaml b/Code/Chapter 32/WPFGraphicsOptions/Application.xaml new file mode 100644 index 0000000..ff7991a --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Code/Chapter 32/WPFGraphicsOptions/Application.xaml.vb b/Code/Chapter 32/WPFGraphicsOptions/Application.xaml.vb new file mode 100644 index 0000000..084cbe9 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml b/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml new file mode 100644 index 0000000..798f88b --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml.vb b/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml.vb new file mode 100644 index 0000000..36bd30d --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/MainWindow.xaml.vb @@ -0,0 +1,49 @@ +Class MainWindow +End Class + +#Region "Custom rendering on the Main Window" +'Class MainWindow +' Inherits System.Windows.Window +' ' Our single drawing visual. +' Private rectVisual As New DrawingVisual() +' Private Const NumberOfVisualItems As Integer = 1 + +' Public Sub New() +' InitializeComponent() + +' ' Helper function to create the rectangle. +' CreateRectVisual() +' End Sub + +' Private Sub CreateRectVisual() +' Using drawCtx As DrawingContext = rectVisual.RenderOpen() +' ' The top, left, bottom, and right position of the rectangle. +' Dim rect As New Rect(50, 50, 105, 55) +' drawCtx.DrawRectangle(Brushes.AliceBlue, New Pen(Brushes.Blue, 5), rect) +' End Using + +' ' Register our visual with the object tree, +' ' to ensure it supports routed events, hit testing, etc. +' AddVisualChild(rectVisual) +' AddLogicalChild(rectVisual) +' End Sub + +' ' Necessary overrides. The WPF graphics system +' ' will call these to figure out how many items to +' ' render and what to render. +' Protected Overrides ReadOnly Property VisualChildrenCount() As Integer +' Get +' Return NumberOfVisualItems +' End Get +' End Property + +' Protected Overrides Function GetVisualChild(ByVal index As Integer) As Visual +' ' Collection is zero based, so subtract 1. +' If index <> (NumberOfVisualItems - 1) Then +' Throw New ArgumentOutOfRangeException("index", "Don't have that visual!") +' End If +' Return rectVisual +' End Function +'End Class +#End Region + diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/AssemblyInfo.vb b/Code/Chapter 32/WPFGraphicsOptions/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..0d4dad8 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/AssemblyInfo.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Globalization +Imports System.Resources +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + +' + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/MyExtensions/MyWpfExtension.vb b/Code/Chapter 32/WPFGraphicsOptions/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000..739db0e --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return Global.System.Windows.Application.Current + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.Designer.vb b/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.Designer.vb new file mode 100644 index 0000000..e4a5560 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:$clrversion$ +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.resx b/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.Designer.vb b/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.Designer.vb new file mode 100644 index 0000000..42fbc41 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.WPFGraphicsOptions.My.MySettings + Get + Return Global.WPFGraphicsOptions.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.settings b/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.settings new file mode 100644 index 0000000..033d7a5 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/WPFGraphicsOptions/MyCustomRenderer.vb b/Code/Chapter 32/WPFGraphicsOptions/MyCustomRenderer.vb new file mode 100644 index 0000000..f7cc495 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/MyCustomRenderer.vb @@ -0,0 +1,34 @@ +Public Class MyCustomRenderer + Inherits FrameworkElement + ' Default size for our rectangle. + Private m_rectWidth As Double = 105, m_rectHeight As Double = 55 + + ' Allow user to override the defaults. + Public Property RectHeight() As Double + Get + Return m_rectHeight + End Get + Set(ByVal value As Double) + m_rectHeight = value + End Set + End Property + Public Property RectWidth() As Double + Get + Return m_rectWidth + End Get + Set(ByVal value As Double) + m_rectWidth = value + End Set + End Property + + Protected Overloads Overrides Sub OnRender(ByVal drawCtx As DrawingContext) + ' Do parent rendering first. + MyBase.OnRender(drawCtx) + + ' Add our custom rendering. + Dim rect As New Rect() + rect.Width = m_rectWidth + rect.Height = m_rectHeight + drawCtx.DrawRectangle(Brushes.LightBlue, New Pen(Brushes.Blue, 5), rect) + End Sub +End Class diff --git a/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.sln b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.sln new file mode 100644 index 0000000..e12d4ad --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WPFGraphicsOptions", "WPFGraphicsOptions.vbproj", "{7F114B61-F488-4F03-A459-3E91D68423D2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7F114B61-F488-4F03-A459-3E91D68423D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F114B61-F488-4F03-A459-3E91D68423D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F114B61-F488-4F03-A459-3E91D68423D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F114B61-F488-4F03-A459-3E91D68423D2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.suo b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.suo new file mode 100644 index 0000000000000000000000000000000000000000..07dff8826183687a5f659854d4d830c9064775ac GIT binary patch literal 21504 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 F;D2`3XlVcd literal 0 HcmV?d00001 diff --git a/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj new file mode 100644 index 0000000..e2ce1f7 --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj @@ -0,0 +1,128 @@ + + + Debug + AnyCPU + {7F114B61-F488-4F03-A459-3E91D68423D2} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + WPFGraphicsOptions + WPFGraphicsOptions + v3.5 + Custom + On + Binary + Off + On + + + true + full + true + true + true + bin\Debug\ + WPFGraphicsOptions.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + false + false + true + false + true + bin\Release\ + WPFGraphicsOptions.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + + + + 3.5 + + + 3.5 + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + MainWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj.user b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 32/WPFGraphicsOptions/WPFGraphicsOptions.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 33/CarsWebSite/ClassicAspPage.asp b/Code/Chapter 33/CarsWebSite/ClassicAspPage.asp new file mode 100644 index 0000000..3c95a85 --- /dev/null +++ b/Code/Chapter 33/CarsWebSite/ClassicAspPage.asp @@ -0,0 +1,19 @@ + + +<%@ language="VBScript" %> + + + The Cars Page + + +

Here is what you sent me:

+

+ User Name: + <%= Request.Form("txtUserName") %>
+ Password: + <%= Request.Form("txtPassword") %>
+

+ + + + diff --git a/Code/Chapter 33/CarsWebSite/default.htm b/Code/Chapter 33/CarsWebSite/default.htm new file mode 100644 index 0000000..5cc1bb3 --- /dev/null +++ b/Code/Chapter 33/CarsWebSite/default.htm @@ -0,0 +1,49 @@ + + + + This is the Cars Web Site + + + + + +

The Cars Login Page

+


+ Please enter your user name and password. +

+ +
 

+ User Name: +

+

+ Password: +

+

+ + + +

+
+ + + + + diff --git a/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll b/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll new file mode 100644 index 0000000000000000000000000000000000000000..2b301c5a2fa15102f04313b8cdc92214503e045c GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll.refresh b/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..95d7f109fcb00fb6feb9a9a920b866aa8f64caf8 GIT binary patch literal 106 zcmezWPme*5AqI#+q%%VXLn1=~LkUAFLlJ`lgAowMFgP-l0!8u}e1N!w!3D_o0g5Iu ZWHRIdX&0c{B%q3P94hq~QW$c85CC8h6XgH^ literal 0 HcmV?d00001 diff --git a/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.pdb b/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ae0af7f1f1c27151458d72beb8a2c2889f7cc294 GIT binary patch literal 42496 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.xml b/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.xml new file mode 100644 index 0000000..b8e562a --- /dev/null +++ b/Code/Chapter 33/CodeBehindPageModel/Bin/AutoLotDAL.xml @@ -0,0 +1,24 @@ + + + + +AutoLotDAL + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Code/Chapter 33/CodeBehindPageModel/Default.aspx b/Code/Chapter 33/CodeBehindPageModel/Default.aspx new file mode 100644 index 0000000..ecae655 --- /dev/null +++ b/Code/Chapter 33/CodeBehindPageModel/Default.aspx @@ -0,0 +1,26 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" trace ="true"%> + + + + + + Untitled Page + + +
+
+
+
+ + + + + + + +
+  
+
+ + diff --git a/Code/Chapter 33/CodeBehindPageModel/Default.aspx.vb b/Code/Chapter 33/CodeBehindPageModel/Default.aspx.vb new file mode 100644 index 0000000..567e2a7 --- /dev/null +++ b/Code/Chapter 33/CodeBehindPageModel/Default.aspx.vb @@ -0,0 +1,16 @@ +Imports AutoLotConnectedLayer + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnFillGrid_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnFillGrid.Click + Trace.Write("My Category", "Filling the grid!") + Dim dal As New InventoryDAL() + dal.OpenConnection("Data Source=(local)\SQLEXPRESS;" & _ + "Initial Catalog=AutoLot;Integrated Security=True") + carsGridView.DataSource = dal.GetAllInventory() + carsGridView.DataBind() + dal.CloseConnection() + End Sub +End Class diff --git a/Code/Chapter 33/CodeBehindPageModel/web.config b/Code/Chapter 33/CodeBehindPageModel/web.config new file mode 100644 index 0000000..2e184b3 --- /dev/null +++ b/Code/Chapter 33/CodeBehindPageModel/web.config @@ -0,0 +1,115 @@ + + + + + + +

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 !$M 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

+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 33/FunWithPageMembers/Default.aspx b/Code/Chapter 33/FunWithPageMembers/Default.aspx new file mode 100644 index 0000000..5c036ac --- /dev/null +++ b/Code/Chapter 33/FunWithPageMembers/Default.aspx @@ -0,0 +1,31 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+ + diff --git a/Code/Chapter 33/FunWithPageMembers/Default.aspx.vb b/Code/Chapter 33/FunWithPageMembers/Default.aspx.vb new file mode 100644 index 0000000..27da2df --- /dev/null +++ b/Code/Chapter 33/FunWithPageMembers/Default.aspx.vb @@ -0,0 +1,55 @@ + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnSomeTraining_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSomeTraining.Click + Response.Redirect("http://www.IntertechTraining.com") + End Sub + + Protected Sub btnHttpResponse_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnHttpResponse.Click + Response.Write("My name is:
") + Response.Write(Me.ToString()) + Response.Write("

Here was your last request:
") + ' This assumes that you have a file of this name + ' in your virtual directory! + ' Response.WriteFile("MyHTMLPage.htm") + End Sub + + Protected Sub btnGetFormData_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGetFormData.Click + ' Get value for a widget with ID txtFirstName. + Dim firstName As String = Request.Form("txtFirstName") + lblFormData.Text = firstName + End Sub + + Protected Sub btnGetBrowserStats_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnGetBrowserStats.Click + Dim theInfo As String = "" + theInfo &= String.Format("
  • Is the client AOL? {0}
  • ", _ + Request.Browser.AOL) + theInfo &= _ + String.Format("
  • Does the client support ActiveX? {0}
  • ", _ + Request.Browser.ActiveXControls) + theInfo &= String.Format("
  • Is the client a Beta? {0}
  • ", _ + Request.Browser.Beta) + theInfo &= _ + String.Format("
  • Dose the client support Java Applets? {0}
  • ", _ + Request.Browser.JavaApplets) + theInfo &= _ + String.Format("
  • Does the client support Cookies? {0}
  • ", _ + Request.Browser.Cookies) + theInfo &= _ + String.Format("
  • Does the client support VBScript? {0}
  • ", _ + Request.Browser.VBScript) + lblOutput.Text = theInfo + End Sub + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + ' Only fill DataSet the very first time + ' the user comes to this page. + If Not IsPostBack Then + ' Populate DataSet and cache it! + End If + ' Use cached DataSet. + End Sub +End Class diff --git a/Code/Chapter 33/FunWithPageMembers/web.config b/Code/Chapter 33/FunWithPageMembers/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 33/FunWithPageMembers/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 33/PageLifeCycle/Default.aspx b/Code/Chapter 33/PageLifeCycle/Default.aspx new file mode 100644 index 0000000..227176c --- /dev/null +++ b/Code/Chapter 33/PageLifeCycle/Default.aspx @@ -0,0 +1,23 @@ +<%@ Page Language="VB" AutoEventWireup="true" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    + +
    +
    +  
    + +
    +
    + + diff --git a/Code/Chapter 33/PageLifeCycle/Default.aspx.vb b/Code/Chapter 33/PageLifeCycle/Default.aspx.vb new file mode 100644 index 0000000..7c24f0a --- /dev/null +++ b/Code/Chapter 33/PageLifeCycle/Default.aspx.vb @@ -0,0 +1,32 @@ +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles Me.Load + ' Perform load logic here... + Response.Write("Load event fired!") + End Sub + + Protected Sub Page_Unload(ByVal sender As Object, ByVal e As System.EventArgs) 'Handles Me.Unload + ' No longer possible to emit data to the HTTP + ' response at this point, so we will write to a local file. + System.IO.File.WriteAllText("C:\MyLog.txt", "Page unloading!") + End Sub + + Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error + Response.Clear() + Response.Write("I am sorry...I can't find a required file.
    ") + Response.Write(String.Format("The error was: {0}", _ + Server.GetLastError().Message)) + Server.ClearError() + End Sub + + Protected Sub btnPostback_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPostback.Click + ' This is just here to allow a postback. + End Sub + + Protected Sub btnTriggerError_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnTriggerError.Click + ' Try to open a nonexistent file on the web server. + ' This will fire the Error event for this page. + System.IO.File.ReadAllText("C:\IDontExist.txt") + End Sub +End Class diff --git a/Code/Chapter 33/PageLifeCycle/web.config b/Code/Chapter 33/PageLifeCycle/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 33/PageLifeCycle/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 33/SinglePageModel/Default.aspx b/Code/Chapter 33/SinglePageModel/Default.aspx new file mode 100644 index 0000000..4dfdbec --- /dev/null +++ b/Code/Chapter 33/SinglePageModel/Default.aspx @@ -0,0 +1,36 @@ +<%@ Page Language="VB" %> +<%@ Import Namespace="AutoLotConnectedLayer" %> +<%@ Assembly Name="AutoLotDAL" %> + + + + + + + + Cars Inventory + + +
    +
    + + +
    +
    + + +
    + +
    +
    + + diff --git a/Code/Chapter 33/SinglePageModel/Web.config b/Code/Chapter 33/SinglePageModel/Web.config new file mode 100644 index 0000000..47a0327 --- /dev/null +++ b/Code/Chapter 33/SinglePageModel/Web.config @@ -0,0 +1,92 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 33/SinglePageModel/bin/AutoLotDAL.dll b/Code/Chapter 33/SinglePageModel/bin/AutoLotDAL.dll new file mode 100644 index 0000000000000000000000000000000000000000..2b301c5a2fa15102f04313b8cdc92214503e045c GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 34/AspNetCarsSite/Ads.xml b/Code/Chapter 34/AspNetCarsSite/Ads.xml new file mode 100644 index 0000000..81653d5 --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/Ads.xml @@ -0,0 +1,14 @@ + + + + SlugBug.jpg + Your new Car? + 80 + + + car.gif + http://www.CarSuperSite.com + Like this Car? + 80 + + diff --git a/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx b/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx new file mode 100644 index 0000000..31976b3 --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="BuildCar.aspx.vb" Inherits="Default2" title="Untitled Page" %> + +
    +
    + + + + + + + + + + + + + + Purple + Green + Red + Yellow + Pea Soup Green + Black + Lime Green + + + + + + + + + + + + +
    +
    +
    + diff --git a/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx.vb b/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx.vb new file mode 100644 index 0000000..6290eaa --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/BuildCar.aspx.vb @@ -0,0 +1,12 @@ + +Partial Class Default2 + Inherits System.Web.UI.Page + + Protected Sub carWizard_FinishButtonClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.WizardNavigationEventArgs) Handles carWizard.FinishButtonClick + ' Get each value. + Dim order As String = String.Format("{0}, your {1} {2} will arrive on {3}.", _ + txtCarPetName.Text, ListBoxColors.SelectedValue, txtCarModel.Text, carCalendar.SelectedDate.ToShortDateString()) + ' Assign to label + lblOrder.Text = order + End Sub +End Class diff --git a/Code/Chapter 34/AspNetCarsSite/CAR.GIF b/Code/Chapter 34/AspNetCarsSite/CAR.GIF new file mode 100644 index 0000000000000000000000000000000000000000..b973fdda82279a96a81766a8b32339aa5cd755be GIT binary patch literal 3938 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 oGmjeBoK& + + + + This is the default page of this site.
    + Not too much to do here, so use the menu system
    + to go to more interesting pages!
    +
    + diff --git a/Code/Chapter 34/AspNetCarsSite/Default.aspx.vb b/Code/Chapter 34/AspNetCarsSite/Default.aspx.vb new file mode 100644 index 0000000..75f1603 --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/Default.aspx.vb @@ -0,0 +1,5 @@ + +Partial Class _Default + Inherits System.Web.UI.Page + +End Class diff --git a/Code/Chapter 34/AspNetCarsSite/Inventory.aspx b/Code/Chapter 34/AspNetCarsSite/Inventory.aspx new file mode 100644 index 0000000..6b30f5e --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/Inventory.aspx @@ -0,0 +1,51 @@ +<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Inventory.aspx.vb" Inherits="Default2" title="Untitled Page" %> + +
    +
    +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +  +
    + diff --git a/Code/Chapter 34/AspNetCarsSite/Inventory.aspx.vb b/Code/Chapter 34/AspNetCarsSite/Inventory.aspx.vb new file mode 100644 index 0000000..b078677 --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/Inventory.aspx.vb @@ -0,0 +1,5 @@ + +Partial Class Default2 + Inherits System.Web.UI.Page + +End Class diff --git a/Code/Chapter 34/AspNetCarsSite/MasterPage.master b/Code/Chapter 34/AspNetCarsSite/MasterPage.master new file mode 100644 index 0000000..dce503b --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/MasterPage.master @@ -0,0 +1,48 @@ +<%@ Master Language="VB" +CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> + + + + + + Untitled Page + + +
    +
    +
    + +
    + +  
    +
    + + + + + + + + + + +   +
    +
    + + +
    + + + + + + +    +
    +
    + + diff --git a/Code/Chapter 34/AspNetCarsSite/MasterPage.master.vb b/Code/Chapter 34/AspNetCarsSite/MasterPage.master.vb new file mode 100644 index 0000000..deccd8e --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/MasterPage.master.vb @@ -0,0 +1,5 @@ + +Partial Class MasterPage + Inherits System.Web.UI.MasterPage +End Class + diff --git a/Code/Chapter 34/AspNetCarsSite/SlugBug.jpg b/Code/Chapter 34/AspNetCarsSite/SlugBug.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2cccc7c1c277f7aa6c0e8a657334b7d52819bdd GIT binary patch literal 7317 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 IQBgDh1+QTi8~^|S literal 0 HcmV?d00001 diff --git a/Code/Chapter 34/AspNetCarsSite/Web.sitemap b/Code/Chapter 34/AspNetCarsSite/Web.sitemap new file mode 100644 index 0000000..cf2cd54 --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/Web.sitemap @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/Code/Chapter 34/AspNetCarsSite/web.config b/Code/Chapter 34/AspNetCarsSite/web.config new file mode 100644 index 0000000..24eb4cf --- /dev/null +++ b/Code/Chapter 34/AspNetCarsSite/web.config @@ -0,0 +1,120 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 34/DynamicCtrls/Default.aspx b/Code/Chapter 34/DynamicCtrls/Default.aspx new file mode 100644 index 0000000..31ce77f --- /dev/null +++ b/Code/Chapter 34/DynamicCtrls/Default.aspx @@ -0,0 +1,33 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + Untitled Page + + +
    +
    + +
    +
    + +
    +
    + HyperLink + +
    +
    + + +
    +
    +
    +
    +
    +
    +   +
    +
    + + diff --git a/Code/Chapter 34/DynamicCtrls/Default.aspx.vb b/Code/Chapter 34/DynamicCtrls/Default.aspx.vb new file mode 100644 index 0000000..dbc7aa7 --- /dev/null +++ b/Code/Chapter 34/DynamicCtrls/Default.aspx.vb @@ -0,0 +1,56 @@ +Option Explicit On +Option Strict On + +Partial Class _Default + Inherits System.Web.UI.Page + + Private Sub ListControlsInPanel() + Dim theInfo As String + theInfo = String.Format("Has controls? {0}
    ", myPanel.HasControls()) + For Each c As Control In myPanel.Controls + If c.GetType() IsNot GetType(System.Web.UI.LiteralControl) Then + theInfo += "***************************
    " + theInfo += String.Format("Control Name? {0}
    ", c.ToString()) + theInfo += String.Format("ID? {0}
    ", c.ID) + theInfo += String.Format("Control Visible? {0}
    ", c.Visible) + theInfo += String.Format("ViewState? {0}
    ", c.EnableViewState) + End If + Next + lblControlInfo.Text = theInfo + End Sub + + Protected Sub Page_Load(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles Me.Load + ListControlsInPanel() + End Sub + + Protected Sub btnRemovePanelItems_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnRemovePanelItems.Click + myPanel.Controls.Clear() + ListControlsInPanel() + End Sub + + Protected Sub btnAddWidgets_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnAddWidgets.Click + For i As Integer = 0 To 4 + ' Assign a name so we can get + ' the text value out later + ' using the HttpRequest.QueryString() + ' method. + Dim t As TextBox = New TextBox() + t.ID = String.Format("newTextBox{0}", i) + myPanel.Controls.Add(t) + ListControlsInPanel() + Next + End Sub + + Protected Sub btnGetTextBoxValues_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnGetTextBoxValues.Click + Dim textBoxValues As String = "" + For i As Integer = 0 To Request.Form.Count - 1 + textBoxValues += String.Format("
  • {0}

  • ", Request.Form(i)) + Next + lblTextBoxText.Text = textBoxValues + End Sub +End Class + diff --git a/Code/Chapter 34/DynamicCtrls/web.config b/Code/Chapter 34/DynamicCtrls/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 34/DynamicCtrls/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 34/FunWithThemes/App_Themes/BasicGreen/BasicGreen.skin b/Code/Chapter 34/FunWithThemes/App_Themes/BasicGreen/BasicGreen.skin new file mode 100644 index 0000000..8211e21 --- /dev/null +++ b/Code/Chapter 34/FunWithThemes/App_Themes/BasicGreen/BasicGreen.skin @@ -0,0 +1,21 @@ +<%-- +Default skin template. The following skins are provided as examples only. + +1. Named control skin. The SkinId should be uniquely defined because + duplicate SkinId's per control type are not allowed in the same theme. + + + + + +2. Default skin. The SkinId is not defined. Only one default + control skin per control type is allowed in the same theme. + + +--%> + + + + + + \ No newline at end of file diff --git a/Code/Chapter 34/FunWithThemes/App_Themes/CrazyOrange/CrazyOrange.skin b/Code/Chapter 34/FunWithThemes/App_Themes/CrazyOrange/CrazyOrange.skin new file mode 100644 index 0000000..b6c0ed2 --- /dev/null +++ b/Code/Chapter 34/FunWithThemes/App_Themes/CrazyOrange/CrazyOrange.skin @@ -0,0 +1,40 @@ +<%-- +Default skin template. The following skins are provided as examples only. + +1. Named control skin. The SkinId should be uniquely defined because + duplicate SkinId's per control type are not allowed in the same theme. + + + + + +2. Default skin. The SkinId is not defined. Only one default + control skin per control type is allowed in the same theme. + + +--%> + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 34/FunWithThemes/Default.aspx b/Code/Chapter 34/FunWithThemes/Default.aspx new file mode 100644 index 0000000..687093b --- /dev/null +++ b/Code/Chapter 34/FunWithThemes/Default.aspx @@ -0,0 +1,36 @@ +<%@ Page Language="VB" AutoEventWireup="false" +CodeFile="Default.aspx.vb" +Inherits="_Default" Theme = "CrazyOrange"%> + + + + + + Untitled Page + + +
    +
    +
    +  
    +
    +
    + + +
    +
    +
    +
    + +
    +   +
    + +
    +  
    +
    +
    +
    + + + diff --git a/Code/Chapter 34/FunWithThemes/Default.aspx.vb b/Code/Chapter 34/FunWithThemes/Default.aspx.vb new file mode 100644 index 0000000..bd42855 --- /dev/null +++ b/Code/Chapter 34/FunWithThemes/Default.aspx.vb @@ -0,0 +1,33 @@ +Option Explicit On +Option Strict On + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnNoTheme_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNoTheme.Click + ' Empty strings result in no theme being applied. + Session("UserTheme") = "" + ' Trigger the PreInit event again. + Server.Transfer(Request.FilePath) + End Sub + + Protected Sub btnGreenTheme_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGreenTheme.Click + Session("UserTheme") = "BasicGreen" + ' Trigger the PreInit event again. + Server.Transfer(Request.FilePath) + End Sub + + Protected Sub btnOrangeTheme_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOrangeTheme.Click + Session("UserTheme") = "CrazyOrange" + ' Trigger the PreInit event again. + Server.Transfer(Request.FilePath) + End Sub + + Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit + Try + Theme = Session("UserTheme").ToString() + Catch + Theme = "" + End Try + End Sub +End Class diff --git a/Code/Chapter 34/FunWithThemes/web.config b/Code/Chapter 34/FunWithThemes/web.config new file mode 100644 index 0000000..4fff2ae --- /dev/null +++ b/Code/Chapter 34/FunWithThemes/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 34/ValidatorCtrls/Default.aspx b/Code/Chapter 34/ValidatorCtrls/Default.aspx new file mode 100644 index 0000000..61574d9 --- /dev/null +++ b/Code/Chapter 34/ValidatorCtrls/Default.aspx @@ -0,0 +1,54 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    +
    +
    + Please enter your name +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +  
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + diff --git a/Code/Chapter 34/ValidatorCtrls/Default.aspx.vb b/Code/Chapter 34/ValidatorCtrls/Default.aspx.vb new file mode 100644 index 0000000..dddc719 --- /dev/null +++ b/Code/Chapter 34/ValidatorCtrls/Default.aspx.vb @@ -0,0 +1,8 @@ + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnPostback_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPostback.Click + lblValidationComplete.Text = "You passed validation!" + End Sub +End Class diff --git a/Code/Chapter 34/ValidatorCtrls/web.config b/Code/Chapter 34/ValidatorCtrls/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 34/ValidatorCtrls/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/AppState/App_Code/CarLotInfo.vb b/Code/Chapter 35/AppState/App_Code/CarLotInfo.vb new file mode 100644 index 0000000..8ab5f12 --- /dev/null +++ b/Code/Chapter 35/AppState/App_Code/CarLotInfo.vb @@ -0,0 +1,19 @@ +Option Explicit On +Option Strict On + +Imports Microsoft.VisualBasic + +Public Class CarLotInfo + Public Sub New(ByVal sPerson As String, _ + ByVal saleCar As String, ByVal popularColor As String) + salesPersonOfTheMonth = sPerson + currentCarOnSale = saleCar + mostPopularColorOnLot = popularColor + End Sub + + ' Public for easy access. + Public salesPersonOfTheMonth As String + Public currentCarOnSale As String + Public mostPopularColorOnLot As String +End Class + diff --git a/Code/Chapter 35/AppState/Default.aspx b/Code/Chapter 35/AppState/Default.aspx new file mode 100644 index 0000000..26a0cc9 --- /dev/null +++ b/Code/Chapter 35/AppState/Default.aspx @@ -0,0 +1,33 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    + + diff --git a/Code/Chapter 35/AppState/Default.aspx.vb b/Code/Chapter 35/AppState/Default.aspx.vb new file mode 100644 index 0000000..cf67036 --- /dev/null +++ b/Code/Chapter 35/AppState/Default.aspx.vb @@ -0,0 +1,50 @@ +Option Explicit On +Option Strict On + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnShowAppVariables_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnShowAppVariables.Click + ' Get object from application variable. + Dim appVars As CarLotInfo = _ + CType(Application("CarSiteInfo"), CarLotInfo) + + Dim appState As String = _ + String.Format("
  • Car on sale: {0}
  • ", _ + appVars.currentCarOnSale) + + appState &= _ + String.Format("
  • Most popular color: {0}
  • ", _ + appVars.mostPopularColorOnLot) + appState &= _ + String.Format("
  • Big shot SalesPerson: {0}
  • ", _ + appVars.salesPersonOfTheMonth) + lblAppVariables.Text = appState + End Sub + + Protected Sub btnSetNewSP_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnSetNewSP.Click + ' Set the new Salesperson. + CType(Application("CarSiteInfo"), CarLotInfo).salesPersonOfTheMonth _ + = txtNewSP.Text + End Sub + + Protected Sub btnShowCarOnSale_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnShowCarOnSale.Click + 'lblCurrCarOnSale.Text = String.Format("Sale on {0}'s today!", _ + 'CType(Application("CurrentCarOnSale"), String)) + + lblCurrCarOnSale.Text = String.Format("Sale on {0}'s today!", _ + CType(Application("CarSiteInfo"), CarLotInfo).currentCarOnSale) + End Sub + + ' Just as an example... + Private Sub CleanAppData() + ' Remove a single item via string name. + Application.Remove("SomeItemIDontNeed") + + ' Destroy all application data! + Application.RemoveAll() + End Sub +End Class diff --git a/Code/Chapter 35/AppState/Global.asax b/Code/Chapter 35/AppState/Global.asax new file mode 100644 index 0000000..f179e4c --- /dev/null +++ b/Code/Chapter 35/AppState/Global.asax @@ -0,0 +1,35 @@ +<%@ Application Language="VB" %> + + \ No newline at end of file diff --git a/Code/Chapter 35/AppState/web.config b/Code/Chapter 35/AppState/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 35/AppState/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll b/Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll new file mode 100644 index 0000000000000000000000000000000000000000..8f158893ab6e3c3ecd3b956e492feae219f0de79 GIT binary patch literal 17920 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll.refresh b/Code/Chapter 35/CacheState/Bin/AutoLotDAL.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..95d7f109fcb00fb6feb9a9a920b866aa8f64caf8 GIT binary patch literal 106 zcmezWPme*5AqI#+q%%VXLn1=~LkUAFLlJ`lgAowMFgP-l0!8u}e1N!w!3D_o0g5Iu ZWHRIdX&0c{B%q3P94hq~QW$c85CC8h6XgH^ literal 0 HcmV?d00001 diff --git a/Code/Chapter 35/CacheState/Bin/AutoLotDAL.pdb b/Code/Chapter 35/CacheState/Bin/AutoLotDAL.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ab038940e97f9fedd349cd8969caac764c85893b GIT binary patch literal 42496 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 35/CacheState/Bin/AutoLotDAL.xml b/Code/Chapter 35/CacheState/Bin/AutoLotDAL.xml new file mode 100644 index 0000000..b8e562a --- /dev/null +++ b/Code/Chapter 35/CacheState/Bin/AutoLotDAL.xml @@ -0,0 +1,24 @@ + + + + +AutoLotDAL + + + + + + Returns the cached ResourceManager instance used by this class. + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + \ No newline at end of file diff --git a/Code/Chapter 35/CacheState/Default.aspx b/Code/Chapter 35/CacheState/Default.aspx new file mode 100644 index 0000000..d62223c --- /dev/null +++ b/Code/Chapter 35/CacheState/Default.aspx @@ -0,0 +1,47 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +  
    + + + + + + + +
    + +
    +
    + + diff --git a/Code/Chapter 35/CacheState/Default.aspx.vb b/Code/Chapter 35/CacheState/Default.aspx.vb new file mode 100644 index 0000000..b4b0e11 --- /dev/null +++ b/Code/Chapter 35/CacheState/Default.aspx.vb @@ -0,0 +1,39 @@ +Option Explicit On +Option Strict On + +Imports System.Data +Imports AutoLotConnectedLayer + +Partial Class _Default + Inherits System.Web.UI.Page + Private cnStr As String = "Data Source=(local)\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True" + + Protected Sub btnAddCar_Click(ByVal sender As Object, _ + ByVal e As EventArgs) Handles btnAddCar.Click + ' Update the Inventory table + ' and call RefreshGrid(). + Dim dal As New InventoryDAL() + dal.OpenConnection(cnStr) + + dal.InsertAuto(Integer.Parse(txtCarID.Text), txtCarColor.Text, _ + txtCarMake.Text, txtCarPetName.Text) + dal.CloseConnection() + RefreshGrid() + End Sub + + Private Sub RefreshGrid() + ' Populate grid. + Dim dal As New InventoryDAL() + dal.OpenConnection(cnStr) + Dim theCars As DataTable = dal.GetAllInventory() + carsGridView.DataSource = theCars + carsGridView.DataBind() + dal.CloseConnection() + End Sub + + Protected Sub Page_Load(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles Me.Load + carsGridView.DataSource = CType(Cache("AppDataTable"), DataTable) + carsGridView.DataBind() + End Sub +End Class diff --git a/Code/Chapter 35/CacheState/Global.asax b/Code/Chapter 35/CacheState/Global.asax new file mode 100644 index 0000000..fd1af05 --- /dev/null +++ b/Code/Chapter 35/CacheState/Global.asax @@ -0,0 +1,72 @@ +<%@ Application Language="VB" %> +<%@ Import Namespace = "System.Data" %> +<%@ Import Namespace="AutoLotConnectedLayer" %> + + \ No newline at end of file diff --git a/Code/Chapter 35/CacheState/web.config b/Code/Chapter 35/CacheState/web.config new file mode 100644 index 0000000..2e184b3 --- /dev/null +++ b/Code/Chapter 35/CacheState/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/CookieStateApp/Default.aspx b/Code/Chapter 35/CookieStateApp/Default.aspx new file mode 100644 index 0000000..8174358 --- /dev/null +++ b/Code/Chapter 35/CookieStateApp/Default.aspx @@ -0,0 +1,34 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + + diff --git a/Code/Chapter 35/CookieStateApp/Default.aspx.vb b/Code/Chapter 35/CookieStateApp/Default.aspx.vb new file mode 100644 index 0000000..815a608 --- /dev/null +++ b/Code/Chapter 35/CookieStateApp/Default.aspx.vb @@ -0,0 +1,26 @@ +Option Explicit On +Option Strict On + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnNewCookie_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnNewCookie.Click + ' Make a new (persistent) cookie. + Dim theCookie As HttpCookie = _ + New HttpCookie(txtCookieName.Text, _ + txtCookieValue.Text) + theCookie.Expires = DateTime.Parse("03/26/2009") + Response.Cookies.Add(theCookie) + End Sub + + Protected Sub btnShowCookie_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnShowCookie.Click + Dim cookieData As String = "" + For Each s As String In Request.Cookies + cookieData &= String.Format _ + ("
  • Name: {0}, Value: {1}
  • ", _ + s, Request.Cookies(s).Value) + Next + lblCookieData.Text = cookieData + End Sub +End Class diff --git a/Code/Chapter 35/CookieStateApp/web.config b/Code/Chapter 35/CookieStateApp/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 35/CookieStateApp/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/FunWithProfiles/App_Code/UserAddress.vb b/Code/Chapter 35/FunWithProfiles/App_Code/UserAddress.vb new file mode 100644 index 0000000..ab9e435 --- /dev/null +++ b/Code/Chapter 35/FunWithProfiles/App_Code/UserAddress.vb @@ -0,0 +1,9 @@ +Imports Microsoft.VisualBasic +Imports System + + _ +Public Class UserAddress + Public street As String + Public city As String + Public state As String +End Class diff --git a/Code/Chapter 35/FunWithProfiles/Default.aspx b/Code/Chapter 35/FunWithProfiles/Default.aspx new file mode 100644 index 0000000..e88252d --- /dev/null +++ b/Code/Chapter 35/FunWithProfiles/Default.aspx @@ -0,0 +1,34 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    + +                 +
    +
    + +               +
    +
    +
    +
    + + + + diff --git a/Code/Chapter 35/FunWithProfiles/Default.aspx.vb b/Code/Chapter 35/FunWithProfiles/Default.aspx.vb new file mode 100644 index 0000000..9051389 --- /dev/null +++ b/Code/Chapter 35/FunWithProfiles/Default.aspx.vb @@ -0,0 +1,27 @@ +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub Page_Load(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles Me.Load + GetUserAddress() + End Sub + + Protected Sub btnSubmit_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnSubmit.Click + ' Database writes happening here! + Profile.AddressInfo.City = txtCity.Text + Profile.AddressInfo.street = txtStreetAddress.Text + Profile.AddressInfo.State = txtState.Text + + ' Get settings from database. + GetUserAddress() + End Sub + + Private Sub GetUserAddress() + ' Database reads happening here! + lblUserData.Text = String.Format("You live here: {0}, {1}, {2}", _ + Profile.AddressInfo.street, Profile.AddressInfo.city, _ + Profile.AddressInfo.state) + End Sub + +End Class diff --git a/Code/Chapter 35/FunWithProfiles/web.config b/Code/Chapter 35/FunWithProfiles/web.config new file mode 100644 index 0000000..83c8043 --- /dev/null +++ b/Code/Chapter 35/FunWithProfiles/web.config @@ -0,0 +1,121 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/SessionState/App_Code/UserShoppingCart.vb b/Code/Chapter 35/SessionState/App_Code/UserShoppingCart.vb new file mode 100644 index 0000000..57006f8 --- /dev/null +++ b/Code/Chapter 35/SessionState/App_Code/UserShoppingCart.vb @@ -0,0 +1,20 @@ +Option Explicit On +Option Strict On + +Imports Microsoft.VisualBasic + +Public Class UserShoppingCart + Public desiredCar As String + Public desiredCarColor As String + Public downPayment As Single + Public isLeasing As Boolean + Public dateOfPickUp As DateTime + + Public Overrides Function ToString() As String + Return String.Format("Car: {0}
    Color: {1}
    " & _ + "$ Down: {2}
    Lease: {3}
    Pick-up Date: {4}", _ + desiredCar, desiredCarColor, downPayment, _ + isLeasing, dateOfPickUp.ToShortDateString()) + End Function +End Class + diff --git a/Code/Chapter 35/SessionState/Default.aspx b/Code/Chapter 35/SessionState/Default.aspx new file mode 100644 index 0000000..137e846 --- /dev/null +++ b/Code/Chapter 35/SessionState/Default.aspx @@ -0,0 +1,52 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + + + + + +
    +
    +
    +
    + +
    + +
    +
    + + diff --git a/Code/Chapter 35/SessionState/Default.aspx.vb b/Code/Chapter 35/SessionState/Default.aspx.vb new file mode 100644 index 0000000..c4248ec --- /dev/null +++ b/Code/Chapter 35/SessionState/Default.aspx.vb @@ -0,0 +1,30 @@ +Option Explicit On +Option Strict On + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnSubmit_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnSubmit.Click + ' Set current user prefs. + Try + Dim u As UserShoppingCart = CType(Session("UserShoppingCartInfo"), UserShoppingCart) + u.dateOfPickUp = myCalendar.SelectedDate + u.desiredCar = txtCarMake.Text + u.desiredCarColor = txtCarColor.Text + u.downPayment = Single.Parse(txtDownPayment.Text) + u.isLeasing = chkIsLeasing.Checked + lblUserInfo.Text = u.ToString() + Session("UserShoppingCartInfo") = u + Catch ex As Exception + lblUserInfo.Text = ex.Message + End Try + End Sub + + Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + If Not IsPostBack Then + lblUserID.Text = String.Format("Here is your ID: {0}", _ + Session.SessionID) + End If + End Sub +End Class diff --git a/Code/Chapter 35/SessionState/Global.asax b/Code/Chapter 35/SessionState/Global.asax new file mode 100644 index 0000000..95d0354 --- /dev/null +++ b/Code/Chapter 35/SessionState/Global.asax @@ -0,0 +1,31 @@ +<%@ Application Language="VB" %> + + \ No newline at end of file diff --git a/Code/Chapter 35/SessionState/web.config b/Code/Chapter 35/SessionState/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 35/SessionState/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/SimpleStateExample/Default.aspx b/Code/Chapter 35/SimpleStateExample/Default.aspx new file mode 100644 index 0000000..863b0dc --- /dev/null +++ b/Code/Chapter 35/SimpleStateExample/Default.aspx @@ -0,0 +1,25 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> + + + + + + Untitled Page + + +
    +
    +
    + +
    +
    + +
    +
    +   + + +
    +
    + + diff --git a/Code/Chapter 35/SimpleStateExample/Default.aspx.vb b/Code/Chapter 35/SimpleStateExample/Default.aspx.vb new file mode 100644 index 0000000..f48445e --- /dev/null +++ b/Code/Chapter 35/SimpleStateExample/Default.aspx.vb @@ -0,0 +1,38 @@ +Option Explicit On +Option Strict On + +' This is the 'stateless' version of the class +' +'Partial Class _Default +' Inherits System.Web.UI.Page +' ' State data? +' Private userFavoriteCar As String + +' Protected Sub btnSetCar_Click(ByVal sender As Object, _ +' ByVal e As System.EventArgs) Handles btnSetCar.Click +' ' Store favorite car in member variable. +' userFavoriteCar = txtFavCar.Text +' End Sub + +' Protected Sub btnGetCar_Click(ByVal sender As Object, _ +' ByVal e As System.EventArgs) Handles btnGetCar.Click +' ' Set label text to value of member variable. +' lblFavCar.Text = userFavoriteCar +' End Sub +'End Class + +' With state! +Partial Class _Default + Inherits System.Web.UI.Page + Protected Sub btnSetCar_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnSetCar.Click + ' Store favorite car in session variable. + Session("UserFavCar") = txtFavCar.Text + End Sub + + Protected Sub btnGetCar_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnGetCar.Click + ' Set label text to value of session variable. + lblFavCar.Text = CType(Session("UserFavCar"), String) + End Sub +End Class diff --git a/Code/Chapter 35/SimpleStateExample/web.config b/Code/Chapter 35/SimpleStateExample/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 35/SimpleStateExample/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 35/ViewStateApp/Default.aspx b/Code/Chapter 35/ViewStateApp/Default.aspx new file mode 100644 index 0000000..c75c592 --- /dev/null +++ b/Code/Chapter 35/ViewStateApp/Default.aspx @@ -0,0 +1,29 @@ +<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" EnableViewState ="false"%> + + + + + + Untitled Page + + +
    +
    +
    +
    +
    +  
    + + +
    +
    +  
    +
    +
    +
    + + +
    +
    + + diff --git a/Code/Chapter 35/ViewStateApp/Default.aspx.vb b/Code/Chapter 35/ViewStateApp/Default.aspx.vb new file mode 100644 index 0000000..dd94c89 --- /dev/null +++ b/Code/Chapter 35/ViewStateApp/Default.aspx.vb @@ -0,0 +1,26 @@ +Option Explicit On +Option Strict On + +' EnableViewState has been set to false in the Page directive! +' Set to true to change the behnvior of this page. + +Partial Class _Default + Inherits System.Web.UI.Page + + Protected Sub btnAddToVS_Click(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles btnAddToVS.Click + ViewState("CustomViewStateItem") = "Some user data" + lblVSValue.Text = CType(ViewState("CustomViewStateItem"), String) + End Sub + + Protected Sub Page_Load(ByVal sender As Object, _ + ByVal e As System.EventArgs) Handles Me.Load + If Not IsPostBack Then + ' Fill ListBox dynamically! + myListBox.Items.Add("Item One") + myListBox.Items.Add("Item Two") + myListBox.Items.Add("Item Three") + myListBox.Items.Add("Item Four") + End If + End Sub +End Class diff --git a/Code/Chapter 35/ViewStateApp/web.config b/Code/Chapter 35/ViewStateApp/web.config new file mode 100644 index 0000000..ff1dfc6 --- /dev/null +++ b/Code/Chapter 35/ViewStateApp/web.config @@ -0,0 +1,115 @@ + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Code/Chapter 4/FunWithArrays/FunWithArrays.sln b/Code/Chapter 4/FunWithArrays/FunWithArrays.sln new file mode 100644 index 0000000..cbc7128 --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/FunWithArrays.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithArrays", "FunWithArrays.vbproj", "{50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 4/FunWithArrays/FunWithArrays.suo b/Code/Chapter 4/FunWithArrays/FunWithArrays.suo new file mode 100644 index 0000000000000000000000000000000000000000..0573c6c04cc3ef6bd376dab6265097a0cd147d72 GIT binary patch literal 17408 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj b/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj new file mode 100644 index 0000000..f72f59b --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {50FDA6F4-2E86-4CEE-A8E1-88D6FCFC5C20} + Exe + FunWithArrays.Program + FunWithArrays + FunWithArrays + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithArrays.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithArrays.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj.user b/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/FunWithArrays.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithArrays/My Project/Application.Designer.vb b/Code/Chapter 4/FunWithArrays/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 4/FunWithArrays/My Project/Application.myapp b/Code/Chapter 4/FunWithArrays/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 4/FunWithArrays/My Project/AssemblyInfo.vb b/Code/Chapter 4/FunWithArrays/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..6208a08 --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 4/FunWithArrays/My Project/Resources.Designer.vb b/Code/Chapter 4/FunWithArrays/My Project/Resources.Designer.vb new file mode 100644 index 0000000..80b3487 --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithArrays.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithArrays/My Project/Resources.resx b/Code/Chapter 4/FunWithArrays/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithArrays/My Project/Settings.Designer.vb b/Code/Chapter 4/FunWithArrays/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1947bfa --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithArrays.My.MySettings + Get + Return Global.FunWithArrays.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithArrays/My Project/Settings.settings b/Code/Chapter 4/FunWithArrays/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 4/FunWithArrays/Program.vb b/Code/Chapter 4/FunWithArrays/Program.vb new file mode 100644 index 0000000..5bdc4ad --- /dev/null +++ b/Code/Chapter 4/FunWithArrays/Program.vb @@ -0,0 +1,165 @@ +''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +'' This program illustrates how to create and manipulate +'' array types. +''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' +Module Program + ' Comment / Uncomment method calls within Main() to test. + Sub Main() + Console.WriteLine("***** Fun with Arrays *****") + ' SimpleArrays() + ' ArrayOfObjects() + ' ArrayLowerBounds() + ' RedimPreserve() + ' MultiDimArray() + SystemArrayFunctionality() + End Sub + +End Module + +Module HelperMethods + +#Region "Simple arrays" + Sub SimpleArrays() + Console.WriteLine("=> Simple Array Creation.") + ' Create and fill an array of 3 Integers + Dim myInts() As Integer = {100, 200, 300} + ' Now print each value. + For Each i As Integer In myInts + Console.WriteLine(i) + Next + + ' String array with assigned data. + Dim myStrs(2) As String + myStrs(0) = "Cerebus" + myStrs(1) = "Jaka" + myStrs(2) = "Astoria" + For Each s As String In myStrs + Console.WriteLine(s) + Next + End Sub +#End Region + +#Region "Array of Objects" + Sub ArrayOfObjects() + Console.WriteLine("=> Array of Objects.") + + ' An array of Objects can be anything at all. + Dim myObjects(3) As Object + myObjects(0) = 10 + myObjects(1) = False + myObjects(2) = New DateTime(1969, 3, 24) + myObjects(3) = "Form & Void" + + For Each obj As Object In myObjects + ' Print the type and value for each item in array. + Console.WriteLine("Type: {0}, Value: {1}", obj.GetType(), obj) + Next + Console.WriteLine() + End Sub +#End Region + +#Region "Array w/ lower bounds" + Sub ArrayLowerBounds() + Console.WriteLine("=> Using Array.CreateInstance().") + ' An array representing the length of each dimension + Dim myLengths() As Integer = {3} + ' An array representing the lower bound of each dimension. + Dim myBounds() As Integer = {5} + + ' Call Array.CreateInstance() specifying + ' the type of array, length and bounds. + Dim mySpecialArray As Array = _ + Array.CreateInstance(GetType(Integer), myLengths, myBounds) + Console.WriteLine("Lower Bound: {0}", LBound(mySpecialArray)) + Console.WriteLine("Upper Bound: {0}", UBound(mySpecialArray)) + Console.WriteLine() + End Sub + +#End Region + +#Region "Redim / preserve" + Sub RedimPreserve() + Console.WriteLine("=> Redim / Preserve keywords.") + ' Make an array with 10 slots. + Dim myValues(9) As Integer + For i As Integer = 0 To 9 + myValues(i) = i + Next + For i As Integer = 0 To UBound(myValues) + Console.Write("{0} ", myValues(i)) + Next + + ' ReDim the array with extra slots. + ReDim Preserve myValues(15) + For i As Integer = 9 To UBound(myValues) + myValues(i) = i + Next + For i As Integer = 0 To UBound(myValues) + Console.Write("{0} ", myValues(i)) + Next + Console.WriteLine() + End Sub +#End Region + +#Region "multidim-array" + Sub MultiDimArray() + Console.WriteLine("=> Multidimensional arrays.") + Dim myMatrix(6, 6) As Integer ' makes a 7x7 array + ' Populate array. + Dim k As Integer, j As Integer + For k = 0 To 6 + For j = 0 To 6 + myMatrix(k, j) = k * j + Next j + Next k + ' Show array. + For k = 0 To 6 + For j = 0 To 6 + Console.Write(myMatrix(k, j) & " ") + Next j + Console.WriteLine() + Next k + Console.WriteLine() + End Sub + +#End Region + +#Region "Using System.Array" + Sub SystemArrayFunctionality() + Console.WriteLine("=> Working with System.Array.") + ' Initialize items at startup. + Dim gothicBands() As String = _ + {"Tones on Tail", "Bauhaus", "Sisters of Mercy"} + + ' Print out names in declared order. + Console.WriteLine(" -> Here is the array:") + For i As Integer = 0 To gothicBands.GetUpperBound(0) + ' Print a name + Console.Write(gothicBands(i) & " ") + Next + Console.WriteLine() + Console.WriteLine() + + ' Reverse them... + Array.Reverse(gothicBands) + Console.WriteLine(" -> The reversed array") + ' ... and print them. + For i As Integer = 0 To gothicBands.GetUpperBound(0) + ' Print a name + Console.Write(gothicBands(i) & " ") + Next + Console.WriteLine() + Console.WriteLine() + + ' Clear out all but the final member. + Console.WriteLine(" -> Cleared out all but one...") + Array.Clear(gothicBands, 1, 2) + For i As Integer = 0 To gothicBands.GetUpperBound(0) + ' Print a name + Console.Write(gothicBands(i) & " ") + Next + Console.WriteLine() + End Sub +#End Region + +End Module \ No newline at end of file diff --git a/Code/Chapter 4/FunWithEnums/FunWithEnums.sln b/Code/Chapter 4/FunWithEnums/FunWithEnums.sln new file mode 100644 index 0000000..79a605e --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/FunWithEnums.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithEnums", "FunWithEnums.vbproj", "{A803D8F3-7941-4E6B-B8F4-4B025371802F}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A803D8F3-7941-4E6B-B8F4-4B025371802F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A803D8F3-7941-4E6B-B8F4-4B025371802F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A803D8F3-7941-4E6B-B8F4-4B025371802F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A803D8F3-7941-4E6B-B8F4-4B025371802F}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 4/FunWithEnums/FunWithEnums.suo b/Code/Chapter 4/FunWithEnums/FunWithEnums.suo new file mode 100644 index 0000000000000000000000000000000000000000..d494992986fc6f6f30eefa5c7f27c3ce3a2dac22 GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj b/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj new file mode 100644 index 0000000..6fc8b85 --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A803D8F3-7941-4E6B-B8F4-4B025371802F} + Exe + FunWithEnums.Program + FunWithEnums + FunWithEnums + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithEnums.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithEnums.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj.user b/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/FunWithEnums.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithEnums/My Project/Application.Designer.vb b/Code/Chapter 4/FunWithEnums/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 4/FunWithEnums/My Project/Application.myapp b/Code/Chapter 4/FunWithEnums/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 4/FunWithEnums/My Project/AssemblyInfo.vb b/Code/Chapter 4/FunWithEnums/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..0e939aa --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 4/FunWithEnums/My Project/Resources.Designer.vb b/Code/Chapter 4/FunWithEnums/My Project/Resources.Designer.vb new file mode 100644 index 0000000..436f113 --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithEnums.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithEnums/My Project/Resources.resx b/Code/Chapter 4/FunWithEnums/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithEnums/My Project/Settings.Designer.vb b/Code/Chapter 4/FunWithEnums/My Project/Settings.Designer.vb new file mode 100644 index 0000000..131a4da --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithEnums.My.MySettings + Get + Return Global.FunWithEnums.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithEnums/My Project/Settings.settings b/Code/Chapter 4/FunWithEnums/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 4/FunWithEnums/Program.vb b/Code/Chapter 4/FunWithEnums/Program.vb new file mode 100644 index 0000000..6eb57a7 --- /dev/null +++ b/Code/Chapter 4/FunWithEnums/Program.vb @@ -0,0 +1,73 @@ +Option Strict On +'''''''''''''''''''''''''''''''''''''''''''''''''''' +' This program illustrates how to define and +' manipulate Enum types. +'''''''''''''''''''''''''''''''''''''''''''''''''''' +' Build an alias to System.Enum +Imports DotNetEnum = System.Enum + +#Region "Enum definition" +' A custom enumeration. +' Elements of an enumeration need not be sequential! +' This time, EmpType maps to an underlying Byte. +Enum EmpType As Byte + Manager = 10 + Grunt = 1 + Contractor = 100 + VicePresident = 9 +End Enum +#End Region + +Module Program + Sub Main() + Console.WriteLine("**** Fun with Enums *****") + Dim emp As EmpType + emp = EmpType.Contractor + ' Prints out "Contractor = 100". + Console.WriteLine("{0} = {1}", emp.ToString(), CInt(emp)) + + Dim e2 As EmpType + Dim day As DayOfWeek + Dim cc As ConsoleColor + EvaluateEnum(e2) + EvaluateEnum(day) + EvaluateEnum(cc) + End Sub + +#Region "Evaulate enum" + ' This method will print out the details of any enum. + Sub EvaluateEnum(ByVal e As [Enum]) + Console.WriteLine("=> Information about {0}", e.GetType().Name) + + Console.WriteLine("Underlying storage type: {0}", _ + [Enum].GetUnderlyingType(e.GetType())) + + ' Get all name / value pairs for incoming parameter. + Dim enumData As Array = [Enum].GetValues(e.GetType()) + Console.WriteLine("This enum has {0} members.", enumData.Length) + + ' Now show the string name and associated value. + For i As Integer = 0 To enumData.Length - 1 + Console.WriteLine("Name: {0}, Value: {1}", enumData.GetValue(i).ToString(), CInt(enumData.GetValue(i))) + Next + Console.WriteLine() + End Sub +#End Region + +#Region "Ask for bonus" + ' Enums as parameters. + Sub AskForBonus(ByVal e As EmpType) + Select Case (e) + Case EmpType.Contractor + Console.WriteLine("You already get enough cash...") + Case EmpType.Grunt + Console.WriteLine("You have got to be kidding...") + Case EmpType.Manager + Console.WriteLine("How about stock options instead?") + Case EmpType.VicePresident + Console.WriteLine("VERY GOOD, Sir!") + End Select + End Sub +#End Region + +End Module diff --git a/Code/Chapter 4/FunWithMethods/FunWithMethods.sln b/Code/Chapter 4/FunWithMethods/FunWithMethods.sln new file mode 100644 index 0000000..8873311 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/FunWithMethods.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithMethods", "FunWithMethods.vbproj", "{2C64CB54-5135-4BDF-BD95-82FDE8C49E32}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2C64CB54-5135-4BDF-BD95-82FDE8C49E32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C64CB54-5135-4BDF-BD95-82FDE8C49E32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C64CB54-5135-4BDF-BD95-82FDE8C49E32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C64CB54-5135-4BDF-BD95-82FDE8C49E32}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 4/FunWithMethods/FunWithMethods.suo b/Code/Chapter 4/FunWithMethods/FunWithMethods.suo new file mode 100644 index 0000000000000000000000000000000000000000..bca49a88d3556886bf0d49bbdcab48e84eeda691 GIT binary patch literal 16896 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 z + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2C64CB54-5135-4BDF-BD95-82FDE8C49E32} + Exe + FunWithMethods.Program + FunWithMethods + FunWithMethods + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithMethods.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithMethods.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithMethods/FunWithMethods.vbproj.user b/Code/Chapter 4/FunWithMethods/FunWithMethods.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/FunWithMethods.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithMethods/HelperFunctions.vb b/Code/Chapter 4/FunWithMethods/HelperFunctions.vb new file mode 100644 index 0000000..5581dbc --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/HelperFunctions.vb @@ -0,0 +1,63 @@ +Module HelperFunctions + +#Region "ByRef / ByVal" + ' Subroutines have no return value. + Sub PrintMessage(ByRef msg As String) + Console.WriteLine("Your message is: {0}", msg) + ' Caller will see this change! + msg = "Thank you for calling this method" + End Sub + + ' Functions have a return value. + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Dim answer As Integer = x + y + ' Try to set the params to a new value. + x = 22 : y = 30 + Return answer + End Function + + ' This will not compile if Option Strict is on! + Function Test() ' As Object assumed. + Return 5 + End Function +#End Region + +#Region "Optional args" + Sub PrintFormattedMessage(ByVal msg As String, _ + Optional ByVal upperCase As Boolean = False, _ + Optional ByVal timesToRepeat As Integer = 0, _ + Optional ByVal textColor As ConsoleColor = ConsoleColor.Green) + ' Store current console foreground color. + Dim fGroundColor As ConsoleColor = Console.ForegroundColor + ' Set Console foreground color. + Console.ForegroundColor = textColor + ' Print mesage in correct case x number of times. + For i As Integer = 0 To timesToRepeat + Console.WriteLine(msg) + Next + ' Reset current console forground color. + Console.ForegroundColor = fGroundColor + End Sub +#End Region + +#Region "Param array" + Function CalculateAverage(ByVal ParamArray itemsToAvg() As Integer) As Double + Dim itemCount As Integer = UBound(itemsToAvg) + Dim result As Integer + For i As Integer = 0 To itemCount + result += itemsToAvg(i) + Next + Return result / itemCount + End Function +#End Region + +#Region "Static data in method" + Sub PrintLocalCounter() + ' Note the Static keyword. + Static Dim localCounter As Integer + localCounter += 1 + Console.Write("{0} ", localCounter) + End Sub +#End Region + +End Module diff --git a/Code/Chapter 4/FunWithMethods/My Project/Application.Designer.vb b/Code/Chapter 4/FunWithMethods/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 4/FunWithMethods/My Project/Application.myapp b/Code/Chapter 4/FunWithMethods/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 4/FunWithMethods/My Project/AssemblyInfo.vb b/Code/Chapter 4/FunWithMethods/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..9dc0210 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 4/FunWithMethods/My Project/Resources.Designer.vb b/Code/Chapter 4/FunWithMethods/My Project/Resources.Designer.vb new file mode 100644 index 0000000..58fca3f --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithMethods.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithMethods/My Project/Resources.resx b/Code/Chapter 4/FunWithMethods/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithMethods/My Project/Settings.Designer.vb b/Code/Chapter 4/FunWithMethods/My Project/Settings.Designer.vb new file mode 100644 index 0000000..495b894 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithMethods.My.MySettings + Get + Return Global.FunWithMethods.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithMethods/My Project/Settings.settings b/Code/Chapter 4/FunWithMethods/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 4/FunWithMethods/Program.vb b/Code/Chapter 4/FunWithMethods/Program.vb new file mode 100644 index 0000000..e52d6c8 --- /dev/null +++ b/Code/Chapter 4/FunWithMethods/Program.vb @@ -0,0 +1,54 @@ +''''''''''''''''''''''''''''''''''''''''''''''' +' This program illustrates the construction of +' methods and the ByVal, ByRef, ParamArray and +' Optional keywords as well as static local +' data. +''''''''''''''''''''''''''''''''''''''''''''''' +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Methods *****") + ' Pass two Integers by value. + Dim x, y As Integer + x = 10 : y = 20 + Console.WriteLine("{0} + {1} = {2}", x, y, Add(x, y)) + + ' X is still 10 and y is still 20. + Console.WriteLine("After call x = {0} and y = {1}", x, y) + Console.WriteLine() + + ' Pass a string by value, via (). + Dim msg As String = "Hello from Main!" + PrintMessage(msg) + Console.WriteLine("After call msg = {0}", msg) + Console.WriteLine() + + ' Call PrintFormattedMessage() using various optional args. + ' Accept all defaults for the optional args. + PrintFormattedMessage("Call One") + + ' Provide each optional argument. + PrintFormattedMessage("Call Two", True, 5, ConsoleColor.Yellow) + + ' Print this message in current case, one time, in gray. + PrintFormattedMessage("Call Three", , , ConsoleColor.Gray) + + ' Same as previously shown, but cleaner! + PrintFormattedMessage("Call Four", textColor:=ConsoleColor.Gray) + + ' ParamArray data can be sent as a caller supplied array + ' or a comma-delimited list of arguments. + Console.WriteLine(CalculateAverage(10, 11, 12, 44)) + Dim data() As Integer = {22, 33, 44, 55} + Console.WriteLine(CalculateAverage(data)) + Console.WriteLine() + + ' Call method with static local data. + For i As Integer = 0 To 10 + PrintLocalCounter() + Next + Console.WriteLine() + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 4/FunWithStructures/FunWithStructures.sln b/Code/Chapter 4/FunWithStructures/FunWithStructures.sln new file mode 100644 index 0000000..42dacab --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/FunWithStructures.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FunWithStructures", "FunWithStructures.vbproj", "{E755D0A0-9707-4590-905B-87309BB2F987}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E755D0A0-9707-4590-905B-87309BB2F987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E755D0A0-9707-4590-905B-87309BB2F987}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E755D0A0-9707-4590-905B-87309BB2F987}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E755D0A0-9707-4590-905B-87309BB2F987}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 4/FunWithStructures/FunWithStructures.suo b/Code/Chapter 4/FunWithStructures/FunWithStructures.suo new file mode 100644 index 0000000000000000000000000000000000000000..04ccf68a6e993de065fe8442cc0496212f74ea8a GIT binary patch literal 17920 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 Ny2ex3?BBF?`5$B%q@Vx* literal 0 HcmV?d00001 diff --git a/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj b/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj new file mode 100644 index 0000000..7f353ec --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E755D0A0-9707-4590-905B-87309BB2F987} + Exe + FunWithStructures.Program + FunWithStructures + FunWithStructures + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FunWithStructures.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FunWithStructures.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj.user b/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/FunWithStructures.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithStructures/My Project/Application.Designer.vb b/Code/Chapter 4/FunWithStructures/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 4/FunWithStructures/My Project/Application.myapp b/Code/Chapter 4/FunWithStructures/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 4/FunWithStructures/My Project/AssemblyInfo.vb b/Code/Chapter 4/FunWithStructures/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..86a8f0c --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 4/FunWithStructures/My Project/Resources.Designer.vb b/Code/Chapter 4/FunWithStructures/My Project/Resources.Designer.vb new file mode 100644 index 0000000..127380b --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FunWithStructures.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithStructures/My Project/Resources.resx b/Code/Chapter 4/FunWithStructures/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 4/FunWithStructures/My Project/Settings.Designer.vb b/Code/Chapter 4/FunWithStructures/My Project/Settings.Designer.vb new file mode 100644 index 0000000..70346eb --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FunWithStructures.My.MySettings + Get + Return Global.FunWithStructures.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/FunWithStructures/My Project/Settings.settings b/Code/Chapter 4/FunWithStructures/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 4/FunWithStructures/Program.vb b/Code/Chapter 4/FunWithStructures/Program.vb new file mode 100644 index 0000000..31ef4e5 --- /dev/null +++ b/Code/Chapter 4/FunWithStructures/Program.vb @@ -0,0 +1,43 @@ +''''''''''''''''''''''''''''''''''''''''''' +' This example illustrates the basics +' of working with Structure types. +' Later chapters in the text will dive +' into further details. +''''''''''''''''''''''''''''''''''''''''''' +#Region "A simple structure type" +Structure Point + Public X, Y As Integer + Sub Display() + Console.WriteLine("X = {0}, Y = {1}", X, Y) + End Sub + Sub Increment() + X += 1 : Y += 1 + End Sub + Sub Decrement() + X -= 1 : Y -= 1 + End Sub + ' Recall that the ‘x’ format flag displays the + ' data in hex format. + Function PointAsHexString() As String + Return String.Format("X = {0:x}, Y = {1:x}", X, Y) + End Function +End Structure +#End Region + +Module Program + + Sub Main() + Console.WriteLine("***** A First Look at Structures *****") + ' Create an initial Point. + Dim myPoint As Point + myPoint.X = 349 + myPoint.Y = 76 + myPoint.Display() + + ' Adjust the X and Y values. + myPoint.Increment() + myPoint.Display() + Console.WriteLine("Point in hex: {0}", myPoint.PointAsHexString()) + End Sub + +End Module diff --git a/Code/Chapter 4/MethodOverloading/MethodOverloading.sln b/Code/Chapter 4/MethodOverloading/MethodOverloading.sln new file mode 100644 index 0000000..a41a5e8 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/MethodOverloading.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MethodOverloading", "MethodOverloading.vbproj", "{A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 4/MethodOverloading/MethodOverloading.suo b/Code/Chapter 4/MethodOverloading/MethodOverloading.suo new file mode 100644 index 0000000000000000000000000000000000000000..952b77a912d1d61b0075ef03f4841593c0f3c714 GIT binary patch literal 16384 zcmeHOTWnlM8JSug~08dw2VgJ254R7%pvFcF2HKQCjj>VJ_)!N@F~C=z^4J2da)MpAm9st z4S;ok4!~ys>j9qyd=Bt=z(auh0pyb}Iyvv}q{SbBAz|TH7KTWOB63^IVupgJ_23xY z3-Usx&UFoR{-6BZGi279e^IdPCzf< z3BWGEL4c;^N!&jLhyuO}*bj&R^n2zBJof<(xXMv1$LI*k`knFt{j>aUF-Cp7&%0U@4jxu&t|Ut`km|7k93eR7AS>)hkQF0+mr5} zHKLX^RZ5RUjZ86TlqXChd?Yb!3}y=Dyk$=tJM5g1$faXe&P>N9GBahWr7=}D4i7D{> zq?Bt%aWx_3ba~0!xaWBj3*W$ok0wv?n2Be~OG9dpc zS15x>L+dYuh@leY7Sjmu4NDzZ5M#(si#Yy*D7_Q|CE{S^q;btJj--UOp5|W zAp>kvxQ+wofSAEpOoEyssB4}${%nhKIcWc>fB)q$4o7?pI&EBHw#BH_FIh2x@>aM> z8OLAuJt%(KmX7+DGw#M8#jKm4VG3hlVGL-KG^68D;HQ16X&_Cl5_#{uQ_0(Z+8>?ehlJ=-h2)!I6>v&*`x1^v$3N!woZ>h`u67DM0@Y9dUzxX+xOcWiJ&@#ReJef5un1ri0>l%O9@9TUmWo`Q0urGFtN-gh}nM ztMc6ZPJfjWo9?|4dHjXn9DMWr*DkF)H@db@*uOg*dF-X*PoMwO*>4Zc{pvL}bSbeb z-|_a`+Z*~`{Za1qA8xp|yHQOc>c8(3moHpD_I&4CiJ$FxFZg1h{zXL`4^8)q>0{?@aJl}n3JThCn2UhA1UgBCgKSPiY`kfc*IppAOq zx8ONi|9ZXC%B5V%VNH-D4QNZ+yOcbXIz_y1$QMhtcyf^nw=CFP3;u`sG|vTbj^dnsUz2g+-!V>p|K7spv? zOLwFhMEWGkpLHmw>|ye$QdhJYCC;J*&lM$BdVJ)0O^=EPRqd?0Mw|l3-wN)a_}%jF zAowUJaTn3&0;ox145&9b3LicG0jc{6prR;Y+%@uXl(dS0Vf@?f|DzbYZ#oLNJzreS zj`oW+|1$oy)K{KAjSJFK8%kOVS{_VkcI{rE;HQp5bChERZZSO!( z|8PCB?@XkrRdVZ}X7ZnVnXQt6@uxq5k#u6DSSZYs%P&V>L6%9s|FR zqwFaW#rU85-i34S{o5a4Gwnb$70aW>(%lzudkOyhr|gp%XeFL7dGQ%@^*cK*hNeDN zy$VB0svX<>pI_L?(>0jU7*A+4_RJZt2r_ymd;&&emogVvGJcbG^)|?^QW!nszU#4N z*SFge8*E= zTVZt!Nez&wlspT}vnZd17i`KlR2+_beDv1Y&LB=nL{KM*y~-ifCngntRngZ@P*R)N zcS55yiWl{<7sfoj@svwh@I2{GcUaOw6SUxL?yKdA3`b19S z9>x=Whsc{eAF3o*E%zFbPSvv{Y?so8F;_;lO<`d5x;bPLW&ZN6m7Gg~yC}uTYhlo$ zBD>r#E#Rj$6KUm{*xMy#w@b}JN!tw%Wji1Z9pk1%op|%3Bfg+?kV93(ngYv??=)+cd8sLlE9bT+Y7dR?JF7Z2KgWCn zpilCAS)KwW?+t_drXi^)zZqet_L#-nJbtwC$enr(u2PN36R`=rVPq{2ZlyoLGb6Mu zM9ufj;*Y&fYt1soANA}7jX&;1gO{B~dHzFdRq|sFbTU`}MdJExp1A+WQ6moq#h*mo zveRq|vL);AH_v<%zb#MMjN?BkCPun>BK{6k(PPlOwtDN1|1z?dfUe|erWkzFE_fo` zGvQGy_5Y(CuKyo#Cg}m16*T<+4|fyV!G9R_HK&j-w1-N`xVYM`UPfuocGI|Y>;%R& z+`2&7ya literal 0 HcmV?d00001 diff --git a/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj b/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj new file mode 100644 index 0000000..0b7ae1c --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A5BA8AA5-AE89-446F-A061-D6BFC3F1F14E} + Exe + MethodOverloading.Program + MethodOverloading + MethodOverloading + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + On + + + true + full + true + true + bin\Debug\ + MethodOverloading.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + pdbonly + false + true + true + bin\Release\ + MethodOverloading.xml + + + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj.user b/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/MethodOverloading.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 4/MethodOverloading/My Project/Application.Designer.vb b/Code/Chapter 4/MethodOverloading/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 4/MethodOverloading/My Project/Application.myapp b/Code/Chapter 4/MethodOverloading/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 4/MethodOverloading/My Project/AssemblyInfo.vb b/Code/Chapter 4/MethodOverloading/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..31fb571 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 4/MethodOverloading/My Project/Resources.Designer.vb b/Code/Chapter 4/MethodOverloading/My Project/Resources.Designer.vb new file mode 100644 index 0000000..46857c9 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("MethodOverloading.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/MethodOverloading/My Project/Resources.resx b/Code/Chapter 4/MethodOverloading/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 4/MethodOverloading/My Project/Settings.Designer.vb b/Code/Chapter 4/MethodOverloading/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a92fa5d --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.MethodOverloading.My.MySettings + Get + Return Global.MethodOverloading.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 4/MethodOverloading/My Project/Settings.settings b/Code/Chapter 4/MethodOverloading/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 4/MethodOverloading/Program.vb b/Code/Chapter 4/MethodOverloading/Program.vb new file mode 100644 index 0000000..3c419b0 --- /dev/null +++ b/Code/Chapter 4/MethodOverloading/Program.vb @@ -0,0 +1,58 @@ +''''''''''''''''''''''''''''''''''''''''''''''' +' This program illustrates the use of +' method overloading. +''''''''''''''''''''''''''''''''''''''''''''''' +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Method Overloading *****") + ' Calls Integer version of Add() + Console.WriteLine(Add(10, 10)) + ' Calls Long verson of Add() + Console.WriteLine(Add(900000000000, 900000000000)) + ' Calls Double version of Add() + Console.WriteLine(Add(4.3, 4.4)) + End Sub + +End Module + +#Region "Add() overloads" +Module MathUtils + Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Function Add(ByVal x As Double, ByVal y As Double) As Double + Return x + y + End Function + Function Add(ByVal x As Long, ByVal y As Long) As Long + Return x + y + End Function +End Module +#End Region + +#Region "Just for an example..." +Class MathUtilsClass + Overloads Function Add(ByVal x As Integer, ByVal y As Integer) As Integer + Return x + y + End Function + Overloads Function Add(ByVal x As Double, ByVal y As Double) As Double + Return x + y + End Function + Overloads Function Add(ByVal x As Long, ByVal y As Long) As Long + Return x + y + End Function +End Class +#End Region + +#Region "Uncomment to generate errors..." +'Module LotsOfErrors +' ' Compiler error! Methods can't differ only by +' ' ByRef/ByVal +' Sub TestSub(ByVal a As Integer) +' End Sub +' Sub TestSub(ByRef a As Integer) +' End Sub +' Sub TestSub(ByVal a As Integer, Optional ByVal b As Integer = 0) +' End Sub +'End Module +#End Region \ No newline at end of file diff --git a/Code/Chapter 5/ConstData/ConstData.sln b/Code/Chapter 5/ConstData/ConstData.sln new file mode 100644 index 0000000..be7d6b0 --- /dev/null +++ b/Code/Chapter 5/ConstData/ConstData.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ConstData", "ConstData.vbproj", "{F55D6BAD-CAD2-4C91-9A93-420F5F678788}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F55D6BAD-CAD2-4C91-9A93-420F5F678788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F55D6BAD-CAD2-4C91-9A93-420F5F678788}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F55D6BAD-CAD2-4C91-9A93-420F5F678788}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F55D6BAD-CAD2-4C91-9A93-420F5F678788}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 5/ConstData/ConstData.suo b/Code/Chapter 5/ConstData/ConstData.suo new file mode 100644 index 0000000000000000000000000000000000000000..0a258a12d4cc67238d1c5f1dabad0b3ef3602ba4 GIT binary patch literal 22528 zcmeHPUu+yl8Q+VOkkCL{QbH*qy{2htsdKgCIJTRn#CJY7ZtU3gIZlCV-Ob&eefIkH z*j*H?(4nkfO@}j2U^k&*dE$|*>-HFb-1GEdo{(c{5FK7?w{h(Vw`#>KAeE_r{bQ=gN zpnV7w2OR+24*D?YAm}5YkAkQhcOw57=n&}Rpu?cMKzD<9pL7q-kAm(6-3R&v=zh=x zpihEW=4RUX7MRp5{JH4Ev{piHYs+Zu=;@sK^f2#=mKaObP@C<=+mIjfIbV#f}R3B4VnQx1JXg4Ksitz#GWmH zWty-*`5gApEzK{*$7HXxblt z|IN{to=@(dnf=OFzXhduESX8M&MCBh7Omo-W;Tvlw0H?MwekB3Q0FHLPyN^bY)rgu z^A6<4`R?h|!`ZRrc+#>Koa}Tmu9xz0cg~0>&Znp16T0aZEPFBDW9Q@Pd^Tm}jcjU8 zFS~{v@5RrO;|}Sr&Noch*1VB(vy+BnE!jE4N!W%XFm3lEr6tp(@*&NF-v!68o$O#K zZyQ(QQ?_N8j!~+SLh>uRMXMBKnwisWBR^)ib5`DIfw5W3cnTWmK)XhvX~Z?vQ|h`S z#SJ|k1^#hPrxsA}LJRtCu+51rObS^Ii~tuS(0~+0Xn#rQi!9UZ7zcl13^6Dw{~ahx z++vyrzbP>Xniz)`W}l4Ud>K;YaJE`H0{+B2HRe_;&-)!9+FVReYKxkQR?xw10moVJ z9M{Tdiz1{cLAvG%?Js!KMvGd1^1hQoAgw|1ii>5_NSV6hq_65cZ$bO|#4wZN2cyO^ zjlpu+Ear5ocy|jg%Gav#8mb}2Pm810STEN!+RIutSnC!ln+s>VUcBUpy9AqNR%o7$ zd5iW%4s#Dj;_321bc}^E^uLG^;5L=xevCijcPrzMw%-e6 zjuhli`;+57>Il4V4fQ_&z6$?>{D(!I^FSdBy<)G5LEs;weMbK*YWuV8cM}AWs6Sr= z$$5GV)_)wf6McdOw0jo#n8X!b%-M1D1@$5h3+y~Br74^dxlCNA?QR3h;;_VQ%v=rGvpJMyyV4SfYrWoGVjPj5dZ*)>Ow}{*LP(}?G~{;V%Y07>B-=sGO0$qt z7jdgt z_Qe~_k!@iH`K_DO5RYadEI)h)x2nxAG@_!3`PDS zrt<^ZJ-eRo0358WoZF$r#=k?W2xGkCOZ`vvOFLa$*ik(X$Dd{B4J{&5JQ8+T3;xkZ zQSS@#A4AV9f-B4M{Swf-euW6BJQ}6vYkRx zZFFrXp(mV)=(QP`Kj=+!&Q77VFQ7FF=sab?B~daD3E28fr$p4FwuVE{u`vBpzMz_$ z#Y+N*#2WNJj(4ben|2NnS?RbOX9eieEUt3?Rd)i6y`LEWF~+25(?!+)yHWO%=l_fY zR_ITB85QcsF@7tyZ4*9|AE(#FRqq*_V#6As7=0N+HXI9qE5FwtfdF zDt|xzL>}lNqpynJt?Hsg0!CW>f5$4nnxFZf;dvA!SXoi{lLUVBprudZ*pHeW!|y(f z9G;!PwPD;lhOw0d3^FDxBf?1mjC}yflPJ*&S6b+U7-!Vw%NVyQj8jJVh&t5X@K!t} zBqD#pb3OWHw4=AYH~8S!e|`4Nzr6O&fgfJnKdRZkdwlSL7v|6X=+7@dH+lW%uYmzl zM(Z!!{`U2^50Ae3{rv0SJ^b!KSV_6c(@ZA$MjoGt(|^c`DBq$$BH9efd$^3z)yR8b zbcc3x8M@!tdoX}pw3wCmK#w%&J@Bsd9`XVwq|XrZgsX1>??z2V3+XlVNAoBp z72L#h(OJ^XjJuRCT8VTC5zDe&bc`v>GMz-qRP!M1pfY&T@}hqxXG{M|176!85q}Qh zI`KRz{&b`4OWwOKpa;oSM}M==l{_*YShcgf;&mDDw}QP<`TOzjEJkEr@GhawCZrjL zG@LhOyt8nMDZyqk1#!d+QkgR?pWtk=x0??jL zB2zYU5Ty8dBcI5)HcD6TvdQ+u*d2Q*+-|PGiLQ+8;_p^p$0pmE$6`dsp$38s+P1zt z3W3RWFOC15Jgi!D_e_yZv}?ve9rnzi>Qoenx@XT`hTl}WRsB%@g}M=zH(nLG(RiDN zza`Ob8Dq@A++4oX7k_Y?u>s1fx9KDZd?P}80%}9vuJ0|c(dr2Ql-Ti{b}EMuCeAZ*4nN()wuVhwWYM&FaJ@*^klqB zS)dLqqG=J`W7MS!u@|PWn9q~%5Cge)Pp)`JkNNmft2)0mlV30j9HPn}c&zeM$zQq9 z;)!p|T$9aeYuOS<4KC4U)r z3&Q56C1JqoCNk=kRSDu%8h7%d9DNenA+%PR!uB%WXgk_pZz*pUwc`3kR`?BaA5Rtk ztGg-^KpyTh$ZZ!buGiJ}m6g^3=YjeW%Jqf% ztBF9oCM`;h!=4+)j`PQ`E_B2vx=`St1iyJ&=5YmTy8>!WJYyQ}Z<&tHnNyzsfU2 z)V=&}FF)et_jq}im!I(Rqh5Zmm*3~*@@?D^KRUwsqxJUMjI}22A&}PIJamUEmE5V% zsAzrrab?gSqmp(N>o>ox>Q}qI;y{nWYi4Y#nhm0VXr*um7pb|v_5Z>|}KTPd4 zhG>2ITT#w%!4c<|eJk`k*w=n}wh|W^1*mO3iJMA3>SUENsdOqcK^N`z=)efJ^ja8mA+j`2+<(NV55F;v%AdQ6 zT<^6R;9AbJe7UYf{x&=k19*83$7QcvShkk+U;p}R*n3;K?)Uy%d5&ePF`}?N1TTK? zH~VW>n7KBqc(%HDNfg~_1_zkxDew%xgrLD77=;YTVR#;30w6XjKEP+S_*VK9tci@UDcNG?ZO2lpYMg`QceMY#PA%bzw=+PV2 zXl@(SsP#zhGuxt8t3^563$4Rqo7LEIJ6J4@$3)avxr)<_SM;a0)^WrvtKZUdq!Ar# z5Wmgl{}!l?T^Dh!aTGKx`l)cK)^n%5L@teDdRrM|;A}=}uegz4s*Rj8R*y_qZTs5T zC);N$VpFOmlwOBN04ZU8bX0!NvoW#Pdfwc%Uc&!kYs{NEzj=|_b|3Net*0=7eaysG g+*)m~mr;!ezl`m(MsqX1yq~Q53GXe4FCWD literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/ConstData/ConstData.vbproj b/Code/Chapter 5/ConstData/ConstData.vbproj new file mode 100644 index 0000000..0424788 --- /dev/null +++ b/Code/Chapter 5/ConstData/ConstData.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F55D6BAD-CAD2-4C91-9A93-420F5F678788} + Exe + ConstData.Program + ConstData + ConstData + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ConstData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ConstData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/ConstData/ConstData.vbproj.user b/Code/Chapter 5/ConstData/ConstData.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 5/ConstData/ConstData.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 5/ConstData/My Project/Application.Designer.vb b/Code/Chapter 5/ConstData/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 5/ConstData/My Project/Application.myapp b/Code/Chapter 5/ConstData/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 5/ConstData/My Project/AssemblyInfo.vb b/Code/Chapter 5/ConstData/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..861d53c --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 5/ConstData/My Project/Resources.Designer.vb b/Code/Chapter 5/ConstData/My Project/Resources.Designer.vb new file mode 100644 index 0000000..167ea28 --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ConstData.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/ConstData/My Project/Resources.resx b/Code/Chapter 5/ConstData/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 5/ConstData/My Project/Settings.Designer.vb b/Code/Chapter 5/ConstData/My Project/Settings.Designer.vb new file mode 100644 index 0000000..8c86c89 --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ConstData.My.MySettings + Get + Return Global.ConstData.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/ConstData/My Project/Settings.settings b/Code/Chapter 5/ConstData/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 5/ConstData/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 5/ConstData/Program.vb b/Code/Chapter 5/ConstData/Program.vb new file mode 100644 index 0000000..812f9e7 --- /dev/null +++ b/Code/Chapter 5/ConstData/Program.vb @@ -0,0 +1,33 @@ +' This program illustrates constant data and read only fields. + +#Region "MyMathClass" +Public Class MyMathClass + Public Shared ReadOnly PI As Double + Shared Sub New() + PI = 3.14 + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Const *****") + Console.WriteLine("The value of PI is: {0}", MyMathClass.PI) + + ' Error! Can't change a constant! + ' MyMathClass.PI = 3.1444 + + Console.ReadLine() + End Sub + + Sub LocalConstStringVariable() + ' A local constant data point. + Const fixedStr As String = "Fixed String Data" + Console.WriteLine(fixedStr) + + ' Error! + ' fixedStr = "This will not work!" + End Sub + +End Module + diff --git a/Code/Chapter 5/EmployeeApp Documentation/Documentation.chm b/Code/Chapter 5/EmployeeApp Documentation/Documentation.chm new file mode 100644 index 0000000000000000000000000000000000000000..8b027084ce35892b019f7d2aa8c2f37917f55f6f GIT binary patch literal 44810 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

    =(79rn^Vzp0*v%M1|Z2Rvs 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 aYzYIwMwU7PNbLy_pn!w|0x}K?1OPh{BoK)J literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_.html new file mode 100644 index 0000000..646982f --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_.html @@ -0,0 +1,135 @@ + + + + Employee Constructor () + + + + + + + + + + + + + + + +

    +
    +
    +
    +

    The default constructor.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Sub New()
    C#
    public Employee()
    C++
    public:
     Employee() sealed 
    J#
    public Employee()
    JScript
    public function Employee()

    See Also

    + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_c97a4a35.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_c97a4a35.html new file mode 100644 index 0000000..4bce93a --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/C_EmployeeApp_Employee_ctor_c97a4a35.html @@ -0,0 +1,137 @@ + + + + Employee Constructor (String, Int32, Int32, Single, String) + + + + + + + + + + + + + + + + +
    +
    +
    +

    A custom constrctor to set the state of an employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Sub New( _ 
       ByVal name As String,  _ 
       ByVal age As Integer,  _ 
       ByVal id As Integer,  _ 
       ByVal pay As Single,  _ 
       ByVal ssn As String _ 
    )
    C#
    public Employee(
       string name,
       int age,
       int id,
       float pay,
       string ssn
    )
    C++
    public:
     Employee(
       String name,
       int age,
       int id,
       float pay,
       String ssn
    ) sealed 
    J#
    public Employee(
       string name,
       int age,
       int id,
       float pay,
       string ssn
    )
    JScript
    public function Employee(
       name : String,
       age : int,
       id : int,
       pay : float,
       ssn : String
    )

    + Parameters +

    name
    age
    id
    pay
    ssn

    See Also

    + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Caution.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Caution.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d585bb95ca2b428a34863fb76f3adbb39fb6b27 GIT binary patch literal 924 zcmZ?wbhEHb83&%*w|gIh$8Zc#pS zO62xQ#v7M~ZeEste@x=T6}HcJn7-fV{BfP*_icv%w;2B4WBzzYmTS zlHu1&j_*Gh{(oTj^OfQMcgFv}82FK^8XLV|No+&pQyfk>HhJN+xK_Q zzdnb~oY*vL+NP~rZ~po+_rt?wKff;g{cYQU1Gf(!x_kQcy+1z=yng-d{f8g_{=WJ5 z_wB#G?|%IF^Xu2&zkmOM{XI&Ih5&=&PZmZ7hW`vYps)bt2?mZzhX0%;kCNFZX)p=@ zQ=X*U&Z@!n-}I%UvOBx7;N%My0tv@j)wxRV7$_vLbtrJQUf7_Rc%WU}e%hbpL(MHc zyc{8SW)!e^2@2|@^n5U2cIV;n3Yy};xR`-a+&HU%L8$3yr
    \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhk b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhk new file mode 100644 index 0000000..fc02d78 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhk @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhp b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhp new file mode 100644 index 0000000..3fa6111 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.hhp @@ -0,0 +1,40 @@ +[FILES] +sdkLinkmanager.html +N_EmployeeApp.html +Hier_N_EmployeeApp.html +T_EmployeeApp_Employee.html +T_EmployeeApp_Employee_Members.html +T_EmployeeApp_Employee_Constructor.html +C_EmployeeApp_Employee_ctor_.html +C_EmployeeApp_Employee_ctor_c97a4a35.html +T_EmployeeApp_Employee_Properties.html +P_EmployeeApp_Employee_Age.html +P_EmployeeApp_Employee_Company.html +P_EmployeeApp_Employee_ID.html +P_EmployeeApp_Employee_Name.html +P_EmployeeApp_Employee_Pay.html +P_EmployeeApp_Employee_SocialSecurityNumber.html +T_EmployeeApp_Employee_Methods.html +M_EmployeeApp_Employee_DisplayStats.html +M_EmployeeApp_Employee_GiveBonus.html +tooltip.htc + +[OPTIONS] +Title=Documentation +Auto Index=Yes +Binary TOC=Yes +Compatibility=1.1 or later +Compiled file=Documentation.chm +Default Window=MsdnHelp +Default topic=N_EmployeeApp.html +Display compile progress=No +Error log file=Documentation.log +Full-text search=Yes +Index file=Documentation.hhk +Language=0x409 English (United States) +Contents file=Documentation.hhc + +[WINDOWS] +MsdnHelp="Documentation Help","Documentation.hhc","Documentation.hhk","N_EmployeeApp.html","N_EmployeeApp.html",,,,,0x62520,220,0x387e,[86,51,872,558],,,,,,,0 + +[INFOTYPES] diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.log b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.log new file mode 100644 index 0000000..3853e91 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Documentation.log @@ -0,0 +1,14 @@ +Microsoft HTML Help Compiler 4.74.8702 + +Compiling c:\Users\Andrew Troelsen\My Books\VB 3rd Edition\Code\Chapter 5\EmployeeApp Documentation\ndoc_msdn_temp\Documentation.chm + + +Compile time: 0 minutes, 1 second +21 Topics +100 Local links +0 Internet links +15 Graphics + + +Created c:\Users\Andrew Troelsen\My Books\VB 3rd Edition\Code\Chapter 5\EmployeeApp Documentation\ndoc_msdn_temp\Documentation.chm, 44,810 bytes +Compression decreased file by 188,809 bytes. diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xml b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xml new file mode 100644 index 0000000..2025751 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xsd b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xsd new file mode 100644 index 0000000..b27ce39 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Help1NamespaceMap.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Hier_N_EmployeeApp.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Hier_N_EmployeeApp.html new file mode 100644 index 0000000..f3494f7 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/Hier_N_EmployeeApp.html @@ -0,0 +1,86 @@ + + + + EmployeeApp Hierarchy + + + + + + + + + + + + + + + + +
    + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_DisplayStats.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_DisplayStats.html new file mode 100644 index 0000000..075a7dd --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_DisplayStats.html @@ -0,0 +1,138 @@ + + + + DisplayStats Method + + + + + + + + + + + + + + + + +
    +
    +
    +

    This method displays the state of the object.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Sub DisplayStats()
    C#
    public void DisplayStats()
    C++
    public:
     void DisplayStats() sealed 
    J#
    public void DisplayStats()
    JScript
    public  + function DisplayStats()

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_GiveBonus.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_GiveBonus.html new file mode 100644 index 0000000..0f7ad8f --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/M_EmployeeApp_Employee_GiveBonus.html @@ -0,0 +1,140 @@ + + + + GiveBonus Method + + + + + + + + + + + + + + + + +
    +
    +
    +

    This method gives a pay increase to the employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Sub GiveBonus( _ 
       ByVal amount As Single _ 
    )
    C#
    public void GiveBonus(
       float amount
    )
    C++
    public:
     void GiveBonus(
       float amount
    ) sealed 
    J#
    public void GiveBonus(
       float amount
    )
    JScript
    public  + function GiveBonus(
       amount : float
    )

    + Parameters +

    amount

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/N_EmployeeApp.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/N_EmployeeApp.html new file mode 100644 index 0000000..26113e6 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/N_EmployeeApp.html @@ -0,0 +1,100 @@ + + + + EmployeeApp + + + + + + + + + + + + + + + + +
    +
    +
    +

    + + Classes +

    +
    + + + + + + + + + + + + + + +
     ClassDescription
    + Public class + + Employee + This class represents an employee.
    +
    +
    + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Age.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Age.html new file mode 100644 index 0000000..f1052e3 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Age.html @@ -0,0 +1,137 @@ + + + + Age Property + + + + + + + + + + + + + + + + +
    +
    +
    +

    Gets or sets the age of the employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Property Age As Integer
    C#
    public int Age { get; set; }
    C++
    public property int Age sealed  {
        int get();
        void set(int value);
    }
    J#
    /** property */
    public int get_Age();

    /** property */
    public void set_Age(int value);
    JScript
    public function get Age() : int

    public function set Age(value : int);

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Company.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Company.html new file mode 100644 index 0000000..c3fa8e6 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Company.html @@ -0,0 +1,137 @@ + + + + Company Property + + + + + + + + + + + + + + + + +
    + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_ID.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_ID.html new file mode 100644 index 0000000..befaf4d --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_ID.html @@ -0,0 +1,137 @@ + + + + ID Property + + + + + + + + + + + + + + + + +
    +
    +
    +

    Gets or sets the ID of the employee.

    +
    + Namespace: +
    EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Property ID As Integer
    C#
    public int ID { get; set; }
    C++
    public property int ID sealed  {
        int get();
        void set(int value);
    }
    J#
    /** property */
    public int get_ID();

    /** property */
    public void set_ID(int value);
    JScript
    public function get ID() : int

    public function set ID(value : int);

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Name.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Name.html new file mode 100644 index 0000000..6e99140 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Name.html @@ -0,0 +1,137 @@ + + + + Name Property + + + + + + + + + + + + + + + + +
    +
    +
    +

    Gets or sets the name of the employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Property Name As String
    C#
    public string Name { get; set; }
    C++
    public property string Name sealed  {
        String get();
        void set(String value);
    }
    J#
    /** property */
    public string get_Name();

    /** property */
    public void set_Name(string value);
    JScript
    public function get Name() : String

    public function set Name(value : String);

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Pay.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Pay.html new file mode 100644 index 0000000..40ab053 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_Pay.html @@ -0,0 +1,137 @@ + + + + Pay Property + + + + + + + + + + + + + + + + +
    +
    +
    +

    Gets or sets the current pay of the employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Property Pay As Single
    C#
    public float Pay { get; set; }
    C++
    public property float Pay sealed  {
        float get();
        void set(float value);
    }
    J#
    /** property */
    public float get_Pay();

    /** property */
    public void set_Pay(float value);
    JScript
    public function get Pay() : float

    public function set Pay(value : float);

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_SocialSecurityNumber.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_SocialSecurityNumber.html new file mode 100644 index 0000000..29004d9 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/P_EmployeeApp_Employee_SocialSecurityNumber.html @@ -0,0 +1,137 @@ + + + + SocialSecurityNumber Property + + + + + + + + + + + + + + + + +
    +
    +
    +

    Read only access to SSN. Set this value with a constructor argument.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public ReadOnly Property SocialSecurityNumber As String
    C#
    public string SocialSecurityNumber { get; }
    C++
    public property string SocialSecurityNumber sealed  {
        String get();
    }
    J#
    /** property */
    public string get_SocialSecurityNumber();
    JScript
    public function get SocialSecurityNumber() : String

    See Also

    + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee.html new file mode 100644 index 0000000..1c09570 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee.html @@ -0,0 +1,137 @@ + + + + Employee Class + + + + + + + + + + + + + + + + +
    +
    +
    +

    This class represents an employee.

    +
    + Namespace: + EmployeeApp +
    + Assembly: EmployeeApp (in EmployeeApp.exe) +

    Syntax

    Visual Basic (Declaration)
    Public Class Employee
    C#
    public class Employee
    C++
    ref class Employee
    J#
    public class Employee
    JScript
    public class Employee

    Inheritance Hierarchy

    System.Object
       EmployeeApp.Employee

    Thread Safety

    Public static (Shared in Visual Basic)staticShared members of this type are safe for multithreaded operations. Instance members are not guaranteed to be thread-safe.

    See Also

    + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Constructor.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Constructor.html new file mode 100644 index 0000000..c1b4be6 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Constructor.html @@ -0,0 +1,125 @@ + + + + Employee Constructor + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    Initializes a new instance of the Employee class.

    +

    + + Overload List +

    +
    + + + + + + + + + + + + + + + + + + + +
      + Name + + Description +
    + Public method + + Employee + The default constructor.
    + Public method + + Employee (String, Int32, Int32, Single, String) + A custom constrctor to set the state of an employee.
    +
    +

    + + See Also +

    + +
    + + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Members.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Members.html new file mode 100644 index 0000000..394ad6b --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Members.html @@ -0,0 +1,347 @@ + + + + Employee Members + + + + + + + + + + + + + + + + +
    +
    +
    +

    This class represents an employee.

    +
    +

    The following tables list the members exposed by Employee.

    +

    + + Public Constructors +

    +
    + + + + + + + + + + + + + + +
     NameDescription
    + Static + Public method + + Employee + Overloaded. Initializes a new instance of the Employee class.
    + Top +
    +

    + + Public Properties +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Public property + + Age + Gets or sets the age of the employee.
    + Public property + Static + + Company + Set the company name of the employees.
    + Public property + + ID + Gets or sets the ID of the employee.
    + Public property + + Name + Gets or sets the name of the employee.
    + Public property + + Pay + Gets or sets the current pay of the employee.
    + Public property + + SocialSecurityNumber + Read only access to SSN. Set this value with a constructor argument.
    + Top +
    +

    + + Public Methods +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Public method + + DisplayStats + This method displays the state of the object.
    + Public method + EqualsDetermines whether the specified Object is equal to the current Object. (inherited from Object)
    + Public method + GetHashCodeServes as a hash function for a particular type. (inherited from Object)
    + Public method + GetTypeGets the Type of the current instance. (inherited from Object)
    + Public method + + GiveBonus + This method gives a pay increase to the employee.
    + Public method + ToStringReturns a String that represents the current Object. (inherited from Object)
    + Top +
    +

    + + Protected Methods +

    +
    + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Family method + FinalizeAllows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (inherited from Object)
    + Family method + MemberwiseCloneCreates a shallow copy of the current Object. (inherited from Object)
    + Top +
    +

    + + Explicit Interface Implementations +

    +
    + + + + + + + + + + + + + + +
     NameDescription
    + Static + Private method + + Employee + Overloaded. Initializes a new instance of the Employee class.
    + Top +
    +

    + + See Also +

    + +
    + + + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Methods.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Methods.html new file mode 100644 index 0000000..29ff8ab --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Methods.html @@ -0,0 +1,213 @@ + + + + Methods + + + + + + + + + + + + + + + + +
    +
    +
    +

    + + Public Methods +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Public method + + DisplayStats + This method displays the state of the object.
    + Public method + EqualsDetermines whether the specified Object is equal to the current Object. (inherited from Object)
    + Public method + GetHashCodeServes as a hash function for a particular type. (inherited from Object)
    + Public method + GetTypeGets the Type of the current instance. (inherited from Object)
    + Public method + + GiveBonus + This method gives a pay increase to the employee.
    + Public method + ToStringReturns a String that represents the current Object. (inherited from Object)
    + Top +
    +

    + + Protected Methods +

    +
    + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Family method + FinalizeAllows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (inherited from Object)
    + Family method + MemberwiseCloneCreates a shallow copy of the current Object. (inherited from Object)
    + Top +
    +

    + + See Also +

    + +
    + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Properties.html b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Properties.html new file mode 100644 index 0000000..813d6c8 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/T_EmployeeApp_Employee_Properties.html @@ -0,0 +1,191 @@ + + + + Properties + + + + + + + + + + + + + + + + +
    +
    +
    +

    + + Public Properties +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NameDescription
    + Public property + + Age + Gets or sets the age of the employee.
    + Public property + Static + + Company + Set the company name of the employees.
    + Public property + + ID + Gets or sets the ID of the employee.
    + Public property + + Name + Gets or sets the name of the employee.
    + Public property + + Pay + Gets or sets the current pay of the employee.
    + Public property + + SocialSecurityNumber + Read only access to SSN. Set this value with a constructor argument.
    + Top +
    +

    + + See Also +

    + +
    + + +
    + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/box.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/box.gif new file mode 100644 index 0000000000000000000000000000000000000000..c02289406549b0d7054939d0360377b9080b3002 GIT binary patch literal 129 zcmZ?wbhEHb^tA$P5M+J%baT&v#gK8#Mf92+Wav(Yd6uZ;sTarJdVe$uyfSe19ZyLhFJJ2@W|d MCzb>WFfv#J0K*_K+W-In literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collall.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collall.gif new file mode 100644 index 0000000000000000000000000000000000000000..66a6f116291469ca468e97079c32df68a78a1ee6 GIT binary patch literal 75 zcmZ?wbhEHbq3D;GuFM;<}rGEh}r1XwtI<3xFq`9kE|%QQIlGHmv>^0g`4B6%Yu?0 Ww_NK;Fp9gEauFeOMd- literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collapse_all.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/collapse_all.gif new file mode 100644 index 0000000000000000000000000000000000000000..45f018af95dabbf562392e30a433c8294d65deba GIT binary patch literal 197 zcmZ?wbhEHbq3D;GuFM;<}rGEh}r1XwtI<3xFq`9kE|%QQIlGHmv>^0g`4B6%Yu?0 Ww_NK;Fp9gEauFeOMd- literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycode.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycode.gif new file mode 100644 index 0000000000000000000000000000000000000000..1678162660cfe65f8018be7f458b367531fc422c GIT binary patch literal 578 zcmZ?wbhEHbSLNAt7fh_{^#$% z)90^D+VHk(-JheEKdszxE~WM4wR>;A{rvm-{WtCKjd^o!DY^A8+xterv2DT5_Zic# z&e?G8((RAam+fA>>4dV!w4cBJD7p5{S$%NR$q(x;{9nKCifQUm&5$)Kcb;#Wf8+ek zXP2(sowfE<-t^}Qeb3Kae{=o*tJ&+%Ojz|`*RB7r-v3thnXMkMXx6$@)0XXi_UiM4 zXCGC4=c;@{0e(ySZ<@euz%I=fumw*27<@fPR4~r*VbkEy0 z|L8A8=g!+tzJLGmd;Q_JA3pto9}F0%2NZv@FfuTtG3bDd z1jPvh`}~HqrskH`w)Q4QMiv%+IqeR{)XAx#VchMiQ@AXg5@)n(q#CQ(F)&31O7igN zH$_ZV@V8`|k{Yk(kfxOC6~xRczAa8!#9o%mQP@f_B$by}MlV)9fx-8HsFcwZHy^%8 zYld(GEq7bZR99WLloWFthUCwmJyM-bqLchMUD^avZ|zhrR%lVw6EZuJF!2Gy6xFs# S3JwX2kFj$H8?Z1jSOWkqKne5! literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycodeHighlight.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/copycodeHighlight.gif new file mode 100644 index 0000000000000000000000000000000000000000..be87230ff9140549163b83e6d62db0f6c8413e30 GIT binary patch literal 578 zcmZ?wbhEHbHTBnl%3lvw-rPIo*RG6TyMliH{C;cy)SYdz zk4~<r%_%nW?{ie0y>8@bL*Uzcz)xxqIr%)1&VmUV6Jb?AlD3mzz8;PnG%j^y06# zSAV_Oe`edX=ZmDCU)gnO&+M1CcKy1u^w+V3!@aV1k1qZGCMkj$V1G8+^p z4D9n8lAD@aTHD&27#X>_jRcfC7?UO^8Qbu+3r^wi)|Q{q8l0pS9>Ty95NE>6>(nGL zS)D(WWlEB;ie$21QnVN|oB1|F155Vucv^ zogM9brIM_5*%K2bL>Ll2f7VN~)znap;tXnYNxHR@JNQ7eqOz=6&B2Ka8u(b-oD32Q PmK^HW;c{SMVz34PtXmVJ literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d3bbb6e75d9b0e321db0ea173879db85d854ebe GIT binary patch literal 221 zcmZ?wbhEHb>kt2)zW&R=!1VIXuY1q_ zy#Dy_=A%Ch3@p#y{C)KDF9RbhBO~*hkN;l01F9hm6o0aS73qLTkev*yQ3*;tDV|-f ztJb|z@aR@N|K*Y2xrOidJhtO%D)0!|A=1-ObTVZJ2V+Bt7q87?h7%%&Te%ioViP|& pwd!Dy%aWXZLDC@yB&FZ)di_mb*8ceOi*;d~%q^{Lt(=Ms)&M}USfu~} literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf50c2014e39ddaa89234a96fc031c16d78d24f7 GIT binary patch literal 366 zcmZ?wbhEHb*37h|ym;66H?f;1h|9`&xf3*Am(7 z{r__R|MfNhKi_9yWcYt$_5UYF{y*6L|Hc}iX|w=}KUu)W>VQa)pBUJ>4|ped=m@p8 zE-6~c!lE>>y@adRZO+ubl<1W?R??oXkIq<_^liB{=c0x92hJM9iMQu=*f2F;eE!>y zy-7i?iJh~J-H*42my=Vmzn9lfOklb|Kj$<7F)=@`g-Y^VoC{@^`!TIvvv!Rij|k7k oO`A7v^kd$&d(Un^mIDV59rR;6cKpO~262Y7=gyxKcVw^z08>4Y@c;k- literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange_up.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpdown_orange_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..a173df1e6c65591ed607440154b3899644aaf184 GIT binary patch literal 364 zcmZ?wbhEHb*37h|ym;66H?f=i0|BrV6KQZC|(s{||Qme{zI@k>UT1H9&J{1QdU=fKAo`ksv=Yuyr2rO7PGTYHe9k zw33BIVM2QeSFh6?v9l@J8*@x%ccwntqhry%d0UX0D|_AhyVZp literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpup.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/drpup.gif new file mode 100644 index 0000000000000000000000000000000000000000..de7719859febdeaacc51c4c36c5f5017e0e4ed8a GIT binary patch literal 923 zcmV;M17!S1Nk%w1VGjTi0QUd@)7|^l-}|+_ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LV00000EC2ui01p5W000Ph022rpNU$J5fdvvOT&Qq>00|2WNSsJ< zfx`(74rtuS(SgGU3J8cCNm7AB1q=eHT*;DwLjnN+$ec+tz{{938_)z`Qvl4F2qGY; xc~d5Wp$K%!?D-SGP?->BGR3)5YSF4zeNx3b6>HX}UTr2AK(?&evIznL06T*k*;xPp literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/exp.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/exp.gif new file mode 100644 index 0000000000000000000000000000000000000000..123fda96f0c6eaf5d72591656b6c40d1f1eb746e GIT binary patch literal 200 zcmZ?wbhEHb#Mt5W!JUJ_8UXN1S~may literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/expall.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/expall.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a91b12735682290bdc099565353a3bc9169066b GIT binary patch literal 78 zcmZ?wbhEHb#Mt5W!JUJ_8UXN1S~may literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/footer.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/footer.gif new file mode 100644 index 0000000000000000000000000000000000000000..7d0c2877a3414f304badbac700f9f3d73628e609 GIT binary patch literal 49 zcmZ?wbhEHbWMp7wn8?8J?%n?@_y3ui>ec)A@9*5X!+-%4 zf3kqZbU-A?3lS} z%x{<;J^Mz@mY0o5Jo75}nsW>r@@#u_dpFr^zLa|TM$XOK1$Wj=&)hU8bL)b_?Td zJi)+mjNw1$pYP2s{f!*LVrK*&B{;RPmR{(%Sg=5_L#60U$HhY|EzNE^F@LT%xAgVu zd)532Kf=Vv?fNfu&Wl5j4^FelOIQ%F#GOS#H^3po;fvF`xrYCLb`&Tz_1Bw5ggJB- zybNB!)E)5P;|Hy}as1jh&R6ImM?IlcsZ&x>PZYBdl$;drQpg@cQS!yw@E Ifd&R^0JeDBrT_o{ literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intdelegate.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intdelegate.gif new file mode 100644 index 0000000000000000000000000000000000000000..55188de1c88b12d480fae170d90e7089521a581a GIT binary patch literal 1043 zcmZ?wbhEHb6krfw_|5jxLY4xG$4H4PR@r4})4b!W-7BuG=Hssm% z==RPun>E{F&H|f-i|iIJwp+5&b=9TR%a_xyT+6+5BlqU5yxX@6?yQ-fxoJ-3)&+&z z7ZvYZTDo(2$)1%JdskH)n4^Afz0IYqE(g|BAKFlRWK;e7+eN)|woUKZJZ;jp3G+5g zn!j`A(si?zt(&rN^VG##CokAJdEu@p3wKRhyl487y|b5XnXz==tmXUXuH3zL>)Oq` z*3MaRVD8F83)UW9xc11h4ab*lI=*V_k(FCcuHJTf?e;Tkcbr+j^X#Str}wP7xMBC% zjl0in+;e{O-V0myUf6cv(vE|db{x9A`^eQjN3ZTZcJ1V{Ye%=-y13`jtM1pYC%pMJ z%L^gMgC`qi^FhfZ8PaN_!b6E{wrzjOBTt-FU` z-n{qh_WkGgAHRBf{oRY3AD%pa{p9((XD{AAfA#jotBF?nzjw#Cl3t)ve~m zh0px{Cp;!dsTzH8KRVB*{7A%)@Mp`EUE3K}7A#geJ3~+OUu&m}x}UH@bI6{|!)~ln z+9LlNJHK=YE^?~#Ta$Qr+7S`X|C_E%WNtsnZ>JivBGEX>MTEm5??%VRMXcSTYC$Vr zNFO@cENxtLX6EGNV@<}Y0X+;4A9gTH7b}IITX^8iG$AFM4-!cZ$L2^Gr(HPFn7|{h pD_dEhPT29_!a~Mo7G|b`KjH!m)&R+fhr<8> literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intenumeration.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intenumeration.gif new file mode 100644 index 0000000000000000000000000000000000000000..a405bd653185be481ba0f6b1a141fa184e616c21 GIT binary patch literal 980 zcmZ?wbhEHb6krfw_|53%p${c>uoM=b-BO8^T3+wLmO(3Y^uMrC*|h; z%m>?D9_{siyf5JC;mD_lqn;j(d43}0<*D?Sr!!xj&wq5J@cEgVR~L(3Uo3uosr1d2 z%D2~Q-rp{IccXsY?8Yriy7sJ@bo#*N*B4q|Uu=DIsr~)!=J&T--`{Edc(3!(#g!i) z^nH5R|LO6>FVALtc{cOg>-qmb^n882;QQNU-`}1G2g4{a5<@`oCkrD3!+!=Hkmo^p zf`MZr!+%a0j|~eP8^aQ03@0(OcMJLO9a`a}dTO$&Lq)^{4OK4|4!*J*D+)evh^Twj zyjWql_~8B)ZfUz5#fOc|k_HlgW=DKXa^p77I8yP@>EM24S^Ksv3mrWK_$0&xEUS#3 zo|2U06U&^mWLdMQR!|4S!-a?08Z{<-;gE7>?UWB*_D7-6L18kt^PD0N!>4cW$g}bN llQw+H!YQOyCmyz(_GBnE=NLBR*>+TUt!+~1X^NTN9K4|0ZQb;QHPbWKOwZahCv)q9 z!tINScP=g6xx8f0%8I?KDh|w1KeyiI(pHxPYpM@zs6Dc&{=}w=7fWkiuBv;rq5k=a z$oIF4z8=W?b+PRKllo&jCY;(g|6zO6%LR?^_fEKbwCV1dzVincK0Dv}?oj9R3!R_N zO!@zz=g*T3_imiKee24jyH}q+xc>Cvt>=&Ly?lEA+xyEuKHvNI>E^Sik6u1|`18x- z@87?H{W?mFh5$+kDE?$&WMKHupaT*GSMUp?V3UU5433Wrnb~@qW{d-~T`K9J=}8 z=B;&w`L*0@_880Fh zG$^u&T4lXRSg_!!BZq*&je>y7%MNl_RBIhLXmFgF!#1D8rSOnT2fwUE&V!E&mIXDc zyDhn~QTb>G^ZzQ11jh?U_}0b+OC)F{xpxXGdn{2nAkY%FE{@gU%LGSfCKgsUmIMg_ G25SH)&%M+D literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intinterface.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intinterface.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c6a750d768defaade9260d297080d5729bfe182 GIT binary patch literal 959 zcmZ?wbhEHb6krfw_|5holS*4>Rd+3^?Ok5izqC2Wup!TO&GgJob27IsDBQlNc<0j6oy$x1tgP6( zs^Y*L^>gcOE^T!=u%`OZhT0>W>fhfkYMrvOXZEK4d7Gy!+%a?6w%IH8&sn*D(Yk$$ z*B@HA=E%~G$Cht8x_0}?4LeV4+H-E({?ps{U)pi-@~*=db|1OA|LEmCK=SyN{~vk| z9KUkt)Xih(Zl1hw_sr!xXD;8pc>U3(8xODCd~oCLvxiULy#M(5(-(;Uz@8i>MneEw z2q^w!VPs(V&!7X61my_^jyVkfIb}RHEI8QAA*>bCVQ`X1TDwQXXH#+$r?`WPoMclo z$3Y3Pa^u;8ip20jS!E91qT`!IGC9jtN~2n!ngnc literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intmethod.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intmethod.gif new file mode 100644 index 0000000000000000000000000000000000000000..d490b6e220448b17a88f17e17667b0088cadc0a8 GIT binary patch literal 978 zcmZ?wbhEHb6krfw_|5ZMiM)it`cHF`C5dUbUM_5O}Z z{!WS!9!jx(ntAa?^#%>iIfe~+w!Nl(Q!S>=vzgcD)<3~-;CWXPdsbHLT~%>lj{3Rv zHkY=#99UC*XhZFhP4(|@7j?~CH)F}VIm_3r*}87)?zQJT&flGJ@7av!FDJZuJ@L)E zx$l3?`2B14?_cwOKVI|r(fUX4mcDrYF@&}^M96sXVDS1-g+sgH7u8uotfI?9D06Cc-+Lw$~0TY zv1suzdvzJ7j);UtCZ^5+tA>DphYV9C4B}QeBram%Yz($=F%Wnv&m(3uMPuT@LkAr+ vS?6)oEM(D(mE@IJ7x1WwwOh=H!@!3zTrZZ9$KPWH!$ZbqMn(xX76xko0krAi literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intproperty.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intproperty.gif new file mode 100644 index 0000000000000000000000000000000000000000..6da09115c2ce56001e43bcfc835fcb506f0295f6 GIT binary patch literal 1036 zcmZ?wbhEHb6krfw_|59u9mX?Rt5pKj{c5H z{!WS!9!jx(ntAa?-rjz0ej(oeLB9SWJ^{hLfnkxp;elxm(G`)YVg3m*u|+YC=?Osv ziCzVX-u1cB#icbyJrefQH67;}1+Q_eJy=jX_kLfJNOO*1L!NCzc6dW!OiO88cTr%^ zgn+3n!JTt5C$|>Q?5|okBVx_;%uRDLmo19lx}b3TqT-!POLs0W*|V}@@2ZL;lSNO= zlszy<{oHz+Yb*8cZ!&tbLh#jY!(Y3UE^T$Wvp3|xn(9LvYL9HH|9?UL-oeDThaKJ? z_x^M~?DM6FM`x?v-!A%cJ^kD5%@0_%J+T0~Gw@qF+ ztzpfQ{;kUz*R0*JW6k14>yND3b*uGE>ypc}mK^=R^W@X*r#>FpG4zt--oAeR z`0f8^?|#4d@aO%P-*0~Y|MczexBvft{QCRj_rIUN|NsB{`|m#>_z#YyQGzBRp!k!8 zk%8eqgAT}aP@Z7mc**de^N)EN?>vL}eP<>dY&t6`%>4guBlDv!SKW{aJ31287R?up z$cQT=WhMHX@`95*hwE)Zvl5>}1c;xSQzukxQqherCuTie<> zSh=>OzdK;nePRNqPQ(Ve{Y)=!#AbU4EKv2D^x;C|VK?5RO@g9fOev>kn+G>oY}mYG z!b?ZbdnJ6fOC38nM3SOc7%V(KTiKz3W#%M>q$9F(?c2>BR44R_Xernv6f`(EFjxZs D(Z5;= literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intstructure.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/intstructure.gif new file mode 100644 index 0000000000000000000000000000000000000000..a36eb0b3b6b092de2a58e53b3ace28f0fbc1f574 GIT binary patch literal 1004 zcmZ?wbhEHb6krfw_|5YtAuj$g^EqE6}6cJI{3frPRx}Q}5g>zIU(u!IOfg52_!o znVz|6PUhAHh1(Yu?_65Cb9u?0l@)teRh*b1eqfIJ-Q}X^*4sQ>CGvK&#M>Z9RtIL5k)rU6J9@$j?@tE_+V=kXA#Js;<^!ZlF=Ub&;Zk2qwRXX$R|0gX^o_0Kc zHR09kDX-toeEVVH$InYYeOvSG+lFsHHvRau{nziEzu(>8{`GP9w^wt&y_)y`L(iS_ z=kMLWbpO`ZPq(godw1je`#X={{rL6#_pevKf4%+v``vGFFpLr-F$5HUvM@3*{AbVs zc^;G}7&uNc{OA0`uF5*4kwaL_C+LxfQ>*4Ag_D7g9ym8?PEpwC=g0f}Bb68df}KOQVR+`L)TC}hDW{1O~oM~ N!J(o1KNAy!H2}%S_eTH# literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.css b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.css new file mode 100644 index 0000000..6e120c3 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.css @@ -0,0 +1,572 @@ +.userDataStyle +{ + behavior: url(#default#userData); +} + +@media all +{ + tool\:tip{behavior: url(tooltip.htc)} +} + +body +{ + background: #FFFFFF; + color: #000000; + font-family: Verdana; + font-size: medium; + font-style: normal; + font-weight: normal; + margin: 0px; + width: 100%; +} + +a +{ + color: #0000FF; +} + +a:visited +{ + color: #0000FF; +} + +a:hover +{ + color: #3366FF; +} + +div#mainSection +{ + font-size: 70%; + width: 100%; +} + +div#mainBody +{ + font-size: 90%; + margin-left: 15px; + margin-top: 10px; + padding-bottom: 20px; +} +div#mainBody p, div#mainBody ol, div#mainBody ul, div#mainBody dl +{ + padding-right: 5; +} + +div#header +{ + background-color: #D4DFFF; + padding: 0px; + width: 100%; +} + +div#header table +{ + border-bottom: solid 1px #C8CDDE; + width: 100%; +} + +span#runningHeaderText +{ + color: #003399; + font-size: 90%; + padding-left: 13px; +} + + +span#nsrTitle +{ + color: #003399; + font-size: 120%; + font-weight: bold; + padding-left: 13px; +} + +div#header table td +{ + color: #0000FF; + font-size: 70%; + margin-top: 0px; + margin-bottom: 0px; + padding-right: 20px; +} + +div#header table tr#headerTableRow3 td +{ + padding-bottom: 2px; + padding-top: 5px; + padding-left: 15px; +} + +div#header table#bottomTable +{ + border-top: solid 1px #FFFFFF; + text-align: left; + padding-left: 15px; +} + +div#footer +{ + font-size: 90%; + margin: 0px; + padding: 2px; + width: 100%; +} + +hr#footerHR +{ + border-bottom: solid 1px #EEEEFF; + border-top: solid 1px #C8CDDE; + height: 3px; + color: #D4DFFF; +} +/* +div.saveHistory +{ + behavior:url(#default#saveHistory); +} +*/ +div.section +{ + padding-top: 2px; + padding-bottom: 2px; + padding-left: 16px; + padding-right: 15px; + width: 100%; +} + +.heading +{ + font-weight: bold; + margin-top: 18px; + margin-bottom: 8px; +} + +h1.heading +{ + color: #003399; + font-size: 130%; +} + +.subHeading +{ + font-weight: bold; + margin-bottom: 4px; +} + +h3.subHeading +{ + color: #000000; + font-size: 120%; + font-weight: normal; +} + +h4.subHeading +{ + color: #000000; + font-size: 100%; +} + +img.toggle +{ + border: none; + margin-right: 5px; +} + +img.copyCodeImage +{ + border: none; + margin: 1px; + margin-right: 3px; +} + +img.downloadCodeImage +{ + border: none; + margin-right: 3px; +} + +img.viewCodeImage +{ + border: none; + margin-right: 3px; +} + +img.note +{ + border: none; + margin-right: 3px; +} + +img#languageFilterImage +{ + border: none; + margin-left: 10px; + vertical-align: middle; +} + +img#membersOptionsFilterImage +{ + border: none; + margin-left: 10px; + vertical-align: middle; +} + +img#toggleAllImage +{ + margin-left: 4px; + vertical-align: middle; +} + +div#mainSection table +{ + border: none; + font-size: 100%; + width: 100%; + margin-top: 5px; + margin-bottom: 5px; +} + +div#mainSection table tr +{ + vertical-align: top; +} + +div#mainSection table th +{ + background-color: #EFEFF7; + border-bottom: solid 1px #C8CDDE; + color: #000066; + padding-left: 5px; + padding-right: 5px; + text-align: left; +} + +div#mainSection table td +{ + background-color: #F7F7FF; + border-bottom: solid 1px #D5D5D3; + /*border-left: solid 1px #D5D5D3;*/ + padding-left: 5px; + padding-right: 5px; + margin: 1px; +} + +div#mainSection table td.imageCell +{ + white-space: nowrap; + /*width: 1%;*/ +} + +div#mainSection table td.nameCell +{ + white-space: nowrap; +} + +div.code table +{ + border: none; + font-size: 95%; + margin-bottom: 5px; + margin-top:-.4em; + width: 100%; +} + +div.code table th +{ + background: #EFEFF7; + border-bottom: solid 1px #C8CDDE; + color: #000066; + font-weight: bold; + padding-left: 5px; + padding-right: 5px; +} + +div.code table td +{ + background: #F7F7FF; + border-top: solid 1px #FFFFFF; + padding-left: 5px; + padding-right: 5px; + padding-top: 5px; + padding-bottom: 15px; +} + +div.code table td.syntax +{ + font-family: Monospace, Courier New, Courier; + font-size: 105%; + color: #000066; + white-space: nowrap; +} + +div.code table td.message +{ +} + +div.alert table +{ + border: none; + font-size: 100%; + width: 100%; +} + +div.alert table th +{ + background: #EFEFF7; + border-bottom-width: 0px; + color: #000066; + padding-left: 5px; + padding-right: 5px; +} + +div.alert table td +{ + background: #F7F7FF; + border-top: solid 1px #FFFFFF; + padding-left: 5px; + padding-right: 5px; +} + +span.copyCode +{ + color: #0000ff; + font-size: 90%; + font-weight: normal; + cursor: hand; + float: right; + display: inline; + text-align: right; +} + +.downloadCode +{ + color: #0000ff; + font-size: 90%; + font-weight: normal; + cursor: hand; +} + +.viewCode +{ + color: #0000ff; + font-size: 90%; + font-weight: normal; + cursor: hand; +} + +code +{ + font-family: Monospace, Courier New, Courier; + font-size: 105%; + color: #000066; +} + +dl +{ + margin-top: 0px; + padding-left: 1px; +} + +dt +{ + font-style: italic; +} + +dd +{ + margin-bottom: 0px; + margin-left: 0px; +} + +ul +{ + margin-top:0px; + margin-bottom:0px; + margin-left: 17px; + list-style-type: disc; +} + +ul ul +{ + margin-bottom: 4px; + margin-left: 17px; + margin-top: 3px; + list-style-type: disc; +} + +ol +{ + margin-top:0px; + margin-bottom:0px; + margin-left: 28px; + list-style-type: decimal; +} + +ol ol +{ + margin-bottom: 4px; + margin-left: 24px; + margin-top: 3px; + list-style-type: lower-alpha; +} + +li +{ + margin-top:-2px; + margin-bottom: 3px; +} + +p +{ + margin-top: 10px; + margin-bottom: 5px; +} + +.tip +{ + color: #0000FF; + font-style: italic; + cursor: hand; + text-decoration: underline; +} + +.languageFilter +{ + color: #0000FF; + cursor: hand; + text-decoration: underline; + padding-bottom: 4px; +} + +.math +{ + font-family: Times New Roman; + font-size: 125%; +} + +.sourceCodeList +{ + font-family: Verdana; + font-size: 90%; +} + +pre.viewCode +{ + width: 100%; + overflow: auto; +} + +MSHelp\:link +{ + text-decoration: underline; + color: #0000ff; + hoverColor: #3366ff; + filterString: ; +} + + +/*----------------------------------------------*/ +/* +.attribute a:link +{ + color: #000088; + text-decoration: none; +} +.attribute a:visited +{ + color: #000088; + text-decoration: none; +} +.attribute a:hover +{ + color: #3366ff; +} + +.attribute MSHelp\:link + { + text-decoration: underline; + color: #0000ff; + hoverColor: #3366ff; + filterString: ; + } +*/ +.missing +{ + color: Red; + font-weight: bold; +} +div.hier +{ + margin-top: 0.5em; + margin-right: 0.0em; + margin-bottom: 0.5em; + margin-left: 1.0em; +} +div#mainSection table.hier +{ + border: none; + font-size: 100%; + padding: 0px; + margin: 0px; + border-collapse: collapse; + width: auto; +} +div#mainSection table.hier tr +{ + padding: 0px; + margin: 0px; +} +div#mainSection table.hier td +{ + border: none; + vertical-align: top; + padding: 0px; + margin: 50px; + background-color: transparent; +} + +div.code table td span.attribute +{ + padding: 0px; + margin: 0px; +} + +p.inheritDoc +{ + padding: 2px; + margin: 0px; + background-color: #FFFFE0; + border-top: solid 1px #E0E0C0; +} +p.inheritSource +{ + padding: 0px 2px; + margin: 0px; + font-size: 85%; + background-color: #F0F0D0; + color: #606050; +} +span.autoText +{ + padding: 2px; + margin: 0px; + background-color: #E0FFE0; + color: #206020; +} + +p.missing +{ + padding: 2px; + margin: 0px; + font-size: 85%; + background-color: #FFE0E0; + color: #800000; + font-weight: bold; +} + +.topicstatus /* Topic Status Boilerplate class */ + { + display: block; + color: red; + } diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.js b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.js new file mode 100644 index 0000000..6554af2 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/ndoc.js @@ -0,0 +1,1458 @@ +window.onload=LoadPage; +window.onunload=Window_Unload; +window.onresize=ResizeWindow; +window.onbeforeprint = set_to_print; +window.onafterprint = reset_form; + +var vbDeclaration; +var vbUsage; +var csLang; +var cLang; +var jsharpLang; +var jsLang; + +var scrollPos = 0; + +var inheritedMembers; +var protectedMembers; +var assemblyMembers; +var privateMembers; +var netcfMembersOnly; + +var sdkNamespace="ms-help://MS.NETDEVFX.v20.en"; + +/* +********** +********** Begin +********** +*/ + +function LoadPage() +{ + if(IsEvilUrl()) + { + ReloadEvilUrlAsGoodUrl(); + return; // in just a moment, page will reload. + } + + SeeAlsoLinkVisibility() + ExampleLinkVisibility() + + // show correct language + LoadLanguages(); + LoadMembersOptions(); + + Set_up_checkboxes(); + + DisplayLanguages(); + + if(inheritedMembers=="off") + DisplayInheritedMembers(); + if(protectedMembers=="off") + DisplayProtectedMembers(); + if(assemblyMembers=="off") + DisplayAssemblyMembers(); + if(privateMembers=="off") + DisplayPrivateMembers(); + if(netcfMembersOnly=="on") + DisplayNETCFMembers(); + + ChangeMembersOptionsFilterLabel(); + + LoadSections(); + + LoadNamespace(); + + ResizeWindow(); + + // vs70.js did this to allow up/down arrow scrolling, I think + try { mainSection.setActive(); } catch(e) { } + + // make body visible, now that we're ready to render + document.body.style.display = ""; + + //set the scroll position + try{mainSection.scrollTop = scrollPos;} + catch(e){} +} + +function Window_Unload() +{ + if (IsGoodUrl()) + { + SaveLanguages(); + SaveMembersOptions(); + SaveSections(); + } +} + +function ResizeWindow() +{ + if (document.body.clientWidth==0) return; + var header = document.all.item("header"); + var mainSection = document.all.item("mainSection"); + if (mainSection == null) return; + + + document.body.scroll = "no" + mainSection.style.overflow= "auto"; + header.style.width= document.body.offsetWidth - 2; + //mainSection.style.paddingRight = "20px"; // Width issue code + mainSection.style.width= document.body.offsetWidth - 4; + mainSection.style.top=0; + if (document.body.offsetHeight > header.offsetHeight + 4) + mainSection.style.height= document.body.offsetHeight - (header.offsetHeight + 4); + else + mainSection.style.height=0; + + try + { + mainSection.setActive(); + } + catch(e) + { + } +} + +function Load(key) +{ + userDataCache.load("docSettings"); + var value = userDataCache.getAttribute(key); + return value; + return null; +} + +function Save(key, value) +{ + userDataCache.setAttribute(key, value); + userDataCache.save("docSettings"); +} + +function RemoveAttribute(key) +{ + userDataCache.removeAttribute(key); + userDataCache.save("docSettings"); +} + +function set_to_print() +{ + //breaks out of divs to print + var i; + + if (window.text)document.all.text.style.height = "auto"; + + for (i=0; i < document.all.length; i++) + { + if (document.all[i].tagName == "body") + { + document.all[i].scroll = "yes"; + } + if (document.all[i].id == "header") + { + document.all[i].style.margin = "0px 0px 0px 0px"; + document.all[i].style.width = "100%"; + } + if (document.all[i].id == "mainSection") + { + document.all[i].style.overflow = "visible"; + document.all[i].style.top = "5px"; + document.all[i].style.width = "100%"; + document.all[i].style.padding = "0px 10px 0px 30px"; + } + } +} + +function reset_form() +{ + //returns to the div nonscrolling region after print + document.location.reload(); +} + +function IsEvilUrl() +{ + var url = "" + document.location + "."; + var r = url.indexOf("mk:@MSITStore") != -1; + return r; +} + +function IsGoodUrl() +{ + return !IsEvilUrl(); +} + +function ReloadEvilUrlAsGoodUrl() +{ + var url = "" + document.location + "."; + var i = url.indexOf("mk:@MSITStore"); + if(i != -1) + { + url = "ms-its:" + url.substring(14, url.length - 1); + document.location.replace(url); + } +} + +function SeeAlsoLinkVisibility() +{ + var seeAlsoSection; + + seeAlsoSection = document.getElementById("seeAlsoSection"); + if(seeAlsoSection == null) + { + document.getElementById("seeAlsoSectionLink").style.display = "none"; + } +} +function ExampleLinkVisibility() +{ + var exampleSection; + + exampleSection = document.getElementById("codeExampleSection"); + if(exampleSection == null) + { + document.getElementById("exampleSectionLink").style.display = "none"; + } +} + +function Set_up_checkboxes() +{ + var checkbox; + + checkbox = document.getElementById("vbDeclarationCheckbox"); + if(checkbox != null) + { + if(vbDeclaration == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("vbUsageCheckbox"); + if(checkbox != null) + { + if(vbUsage == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("csCheckbox"); + if(checkbox != null) + { + if(csLang == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("cCheckbox"); + if(checkbox != null) + { + if(cLang == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("jsharpCheckbox"); + if(checkbox != null) + { + if(jsharpLang == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("jsCheckbox"); + if(checkbox != null) + { + if(jsLang == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("inheritedCheckbox"); + if(checkbox != null) + { + if(inheritedMembers == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("protectedCheckbox"); + if(checkbox != null) + { + if(protectedMembers == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("assemblyCheckbox"); + if(checkbox != null) + { + if(assemblyMembers == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("privateCheckbox"); + if(checkbox != null) + { + if(privateMembers == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } + + checkbox = document.getElementById("netcfCheckbox"); + if(checkbox != null) + { + if(netcfMembersOnly == "on") + checkbox.checked = true; + else + checkbox.checked = false; + } +} + +/* +********** +********** End +********** +*/ +var sdkLinkType="sdklink://"; +function LoadNamespace() +{ + var ns = Load("sdkNamespace"); + if (ns!=null) + { + if(sdkNamespace!=ns) sdkNamespace=ns; + } + + var iMembers = document.getElementsByTagName("a"); + for(var i = 0; i < iMembers.length; ++i) + { + var strHref = iMembers[i].href; + if(strHref.substr(0, sdkLinkType.length)==sdkLinkType) + { + var newHref = sdkNamespace + "/" + strHref.substr(sdkLinkType.length); + iMembers[i].href=newHref; + } + } +} + +/* +********** +********** Begin Language Filtering +********** +*/ + +function SetLanguage(key) +{ + var i = 0; + if(vbDeclaration == "on") + i++; + if(vbUsage == "on") + i++; + if(csLang == "on") + i++; + if(cLang == "on") + i++; + if(jsharpLang == "on") + i++; + if(jsLang == "on") + i++; + + if(key.id == "vbDeclarationCheckbox") + { + if(vbDeclaration == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + vbDeclaration = "off"; + } + else + vbDeclaration = "on"; + } + if(key.id == "vbUsageCheckbox") + { + if(vbUsage == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + vbUsage = "off"; + } + else + vbUsage = "on"; + } + + if(key.id == "csCheckbox") + { + if(csLang == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + csLang = "off"; + } + else + csLang = "on"; + } + if(key.id == "cCheckbox") + { + if(cLang == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + cLang = "off"; + } + else + cLang = "on"; + } + if(key.id == "jsharpCheckbox") + { + if(jsharpLang == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + jsharpLang = "off"; + } + else + jsharpLang = "on"; + } + if(key.id == "jsCheckbox") + { + if(jsLang == "on") + { + if(i == 1) + { + key.checked = true; + return; + } + + jsLang = "off"; + } + else + jsLang = "on"; + } + + DisplayLanguages(); +} + +function DisplayLanguages() +{ + var spanElements = document.getElementsByTagName("span"); + + var x = 0; + if(vbDeclaration == "on") + x++; + if(vbUsage == "on") + x++; + if(csLang == "on") + x++; + if(cLang == "on") + x++; + if(jsharpLang == "on") + x++; + if(jsLang == "on") + x++; + + var i; + for(i = 0; i < spanElements.length; ++i) + { + if(spanElements[i].codeLanguage != null) + { + if(spanElements[i].codeLanguage == "VisualBasic") + { + if(vbDeclaration == "on" || vbUsage == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + if(spanElements[i].codeLanguage == "VisualBasicDeclaration") + { + if(vbDeclaration == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + + if(spanElements[i].codeLanguage == "VisualBasicUsage") + { + if(vbUsage == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + + if(spanElements[i].codeLanguage == "CSharp") + { + if(csLang == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + + if(spanElements[i].codeLanguage == "ManagedCPlusPlus") + { + if(cLang == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + if(spanElements[i].codeLanguage == "JSharp") + { + if(jsharpLang == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + if(spanElements[i].codeLanguage == "JScript") + { + if(jsLang == "on") + spanElements[i].style.display = ""; + else + spanElements[i].style.display = "none"; + } + + if(spanElements[i].codeLanguage == "NotVisualBasicUsage") + { + if((x == 1) && (vbUsage == "on")) + { + spanElements[i].style.display = "none"; + } + else + { + spanElements[i].style.display = ""; + } + } + if(spanElements[i].codeLanguage == "OnlyVisualBasic") + { + if(((vbDeclaration == "on")||(vbUsage == "on")) && (csLang != "on")) + { + spanElements[i].style.display = ""; + } + else + { + spanElements[i].style.display = "none"; + } + } + if(spanElements[i].codeLanguage == "AnyButVisualBasic") + { + if((vbDeclaration != "on") && (vbUsage != "on") && (csLang == "on")) + { + spanElements[i].style.display = ""; + } + else + { + spanElements[i].style.display = "none"; + } + } + if(spanElements[i].codeLanguage == "VisualBasicAndAnother") + { + if(((vbDeclaration == "on") || (vbUsage == "on")) && (csLang == "on")) + { + spanElements[i].style.display = ""; + } + else + { + spanElements[i].style.display = "none"; + } + } + } + } + ChangeLanguageFilterLabel(); +} + +function ChangeLanguageFilterLabel() +{ + var i = 0; + if(vbDeclaration == "on") + i++; + if(vbUsage == "on") + i++; + if(csLang == "on") + i++; + if(cLang == "on") + i++; + if(jsharpLang == "on") + i++; + if(jsLang == "on") + i++; + + var labelElement; + + labelElement = document.getElementById("showAllLabel"); + + if(labelElement == null) + return; + + labelElement.style.display = "none"; + + labelElement = document.getElementById("multipleLabel"); + labelElement.style.display = "none"; + + labelElement = document.getElementById("vbLabel"); + labelElement.style.display = "none"; + + labelElement = document.getElementById("csLabel"); + labelElement.style.display = "none"; + + labelElement = document.getElementById("cLabel"); + labelElement.style.display = "none"; + + labelElement = document.getElementById("jsharpLabel"); + labelElement.style.display = "none"; + + labelElement = document.getElementById("jsLabel"); + labelElement.style.display = "none"; + + if(i == 6) + { + labelElement = document.getElementById("showAllLabel"); + labelElement.style.display = "inline"; + } + else if ((i > 1) && (i < 6)) + { + if((i == 2) && ((vbDeclaration == "on") && (vbUsage == "on"))) + { + labelElement = document.getElementById("vbLabel"); + labelElement.style.display = "inline"; + } + else + { + labelElement = document.getElementById("multipleLabel"); + labelElement.style.display = "inline"; + } + } + else if (i == 1) + { + if(vbDeclaration == "on" || vbUsage == "on") + { + labelElement = document.getElementById("vbLabel"); + labelElement.style.display = "inline"; + } + if(csLang == "on") + { + labelElement = document.getElementById("csLabel"); + labelElement.style.display = "inline"; + } + if(cLang == "on") + { + labelElement = document.getElementById("cLabel"); + labelElement.style.display = "inline"; + } + if(jsharpLang == "on") + { + labelElement = document.getElementById("jsharpLabel"); + labelElement.style.display = "inline"; + } + if(jsLang == "on") + { + labelElement = document.getElementById("jsLabel"); + labelElement.style.display = "inline"; + } + } +} + +function LoadLanguages() +{ + var value; + value = Load("vbDeclaration"); + if(value == null) + vbDeclaration = "on"; + else + vbDeclaration = value; + + value = Load("vbUsage"); + if(value == null) + vbUsage = "on"; + else + vbUsage = value; + + value = Load("csLang"); + if(value == null) + csLang = "on"; + else + csLang = value; + + value = Load("cLang"); + if(value == null) + cLang = "on"; + else + cLang = value; + + value = Load("jsharpLang"); + if(value == null) + jsharpLang = "on"; + else + jsharpLang = value; + + value = Load("jsLang"); + if(value == null) + jsLang = "on"; + else + jsLang = value; + +} + +function SaveLanguages() +{ + Save("vbDeclaration", vbDeclaration); + Save("vbUsage", vbUsage); + Save("csLang", csLang); + Save("cLang", cLang); + Save("jsharpLang", jsharpLang); + Save("jsLang", jsLang); +} + +/* +********** +********** End Language Filtering +********** +*/ + + +/* +********** +********** Begin Members Options Filtering +********** +*/ + +function SetMembersOptions(key) +{ + if(key.id == "inheritedCheckbox") + { + if(key.checked == true) + inheritedMembers = "on"; + else + inheritedMembers = "off"; + + DisplayInheritedMembers(); + } + if(key.id == "protectedCheckbox") + { + if(key.checked == true) + protectedMembers = "on"; + else + protectedMembers = "off"; + + DisplayProtectedMembers(); + } + if(key.id == "assemblyCheckbox") + { + if(key.checked == true) + assemblyMembers = "on"; + else + assemblyMembers = "off"; + + DisplayAssemblyMembers(); + } + if(key.id == "privateCheckbox") + { + if(key.checked == true) + privateMembers = "on"; + else + privateMembers = "off"; + + DisplayPrivateMembers(); + } + if(key.id == "netcfCheckbox") + { + if(key.checked == true) + netcfMembersOnly = "on"; + else + netcfMembersOnly = "off"; + + DisplayNETCFMembers(); + } + + ChangeMembersOptionsFilterLabel(); +} + +function DisplayInheritedMembers() +{ + var iMembers = document.getElementsByTagName("tr"); + var i; + + if(inheritedMembers == "off") + { + for(i = 0; i < iMembers.length; ++i) + { + if(iMembers[i].name == "inheritedMember") + iMembers[i].style.display = "none"; + } + } + else + { + for(i = 0; i < iMembers.length; ++i) + { + if(iMembers[i].name == "inheritedMember") + { + if(netcfMembersOnly == "on") + { + if(iMembers[i].notSupportedOn == "netcf") + { + iMembers[i].style.display = "none"; + } + else + { + iMembers[i].style.display = ""; + } + } + else + iMembers[i].style.display = ""; + } + } + } +} + +function DisplayProtectedMembers() +{ + var imgElements = document.getElementsByName("toggleSwitch"); + var i; + + if(protectedMembers == "off") + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Family",0) >= 0) + { + if(imgElements[i].id.indexOf("Assembly", 0) >= 0) + { + if(assemblyMembers == "off") + { + if(ItemCollapsed(imgElements[i].id) == false) + { + ExpandCollapse(imgElements[i]); + } + } + } + else + { + if(ItemCollapsed(imgElements[i].id) == false) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + } + else + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Family",0) >= 0) + { + if(ItemCollapsed(imgElements[i].id) == true) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + +} + +function DisplayAssemblyMembers() +{ + var imgElements = document.getElementsByName("toggleSwitch"); + var i; + + if(assemblyMembers == "off") + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Assembly", 0) >= 0) + { + if(imgElements[i].id.indexOf("Family", 0) >= 0) + { + if(protectedMembers == "off") + { + if(ItemCollapsed(imgElements[i].id) == false) + { + ExpandCollapse(imgElements[i]); + } + } + } + else + { + if(ItemCollapsed(imgElements[i].id) == false) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + } + else + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Assembly", 0) >= 0) + { + if(ItemCollapsed(imgElements[i].id) == true) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + +} + +function DisplayPrivateMembers() +{ + var imgElements = document.getElementsByName("toggleSwitch"); + var i; + + if(privateMembers == "off") + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Private", 0) == 0) + { + if(ItemCollapsed(imgElements[i].id) == false) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + else + { + for(i = 0; i < imgElements.length; ++i) + { + if(imgElements[i].id.indexOf("Private", 0) == 0) + { + if(ItemCollapsed(imgElements[i].id) == true) + { + ExpandCollapse(imgElements[i]); + } + } + } + } + +} + +function DisplayNETCFMembers() +{ + var netcfMembers = document.getElementsByTagName("tr"); + var i; + + if(netcfMembersOnly == "off") + { + for(i = 0; i < netcfMembers.length; ++i) + { + if(netcfMembers[i].notSupportedOn == "netcf") + { + netcfMembers[i].style.display = ""; + } + } + DisplayInheritedMembers(); + } + else + { + for(i = 0; i < netcfMembers.length; ++i) + { + if(netcfMembers[i].notSupportedOn == "netcf") + { + netcfMembers[i].style.display = "none"; + } + } + } +} + +function ChangeMembersOptionsFilterLabel() +{ + + var filtered = false; + + if((inheritedMembers=="off") || (protectedMembers=="off") || (assemblyMembers=="off") || (privateMembers=="off") || (netcfMembersOnly=="on")) + filtered = true; + + var labelElement; + + labelElement = document.getElementById("showAllMembersLabel"); + + if(labelElement == null) + return; + + labelElement.style.display = "none"; + + labelElement = document.getElementById("filteredMembersLabel"); + labelElement.style.display = "none"; + + if(filtered) + { + labelElement = document.getElementById("filteredMembersLabel"); + labelElement.style.display = "inline"; + } + else + { + labelElement = document.getElementById("showAllMembersLabel"); + labelElement.style.display = "inline"; + } +} + +function LoadMembersOptions() +{ + var value; + value = Load("inheritedMembers"); + if(value == null) + inheritedMembers = "on"; + else + inheritedMembers = value; + + value = Load("protectedMembers"); + if(value == null) + protectedMembers = "on"; + else + protectedMembers = value; + + value = Load("assemblyMembers"); + if(value == null) + assemblyMembers = "on"; + else + assemblyMembers = value; + + value = Load("privateMembers"); + if(value == null) + privateMembers = "on"; + else + privateMembers = value; + + value = Load("netcfMembersOnly"); + if(value == null) + netcfMembersOnly = "off"; + else + netcfMembersOnly = value; +} + +function SaveMembersOptions() +{ + Save("inheritedMembers", inheritedMembers); + Save("protectedMembers", protectedMembers); + Save("assemblyMembers", assemblyMembers); + Save("privateMembers", privateMembers); + Save("netcfMembersOnly", netcfMembersOnly); +} + +/* +********** +********** End Members Options Filtering +********** +*/ + + +/* +********** +********** Begin Expand/Collapse +********** +*/ + +var collapsedItems = new Array(); + +function ExpandCollapse(imageItem) +{ + if(ItemCollapsed(imageItem.id) == true) + { + imageItem.src = collapseImage.src; + ExpandSection(imageItem); + RemoveCollapsedItem(imageItem.id); + + if(imageItem.id.indexOf("Family", 0) == 0) + { + protectedMembers = "on"; + Set_up_checkboxes(); + ChangeMembersOptionsFilterLabel(); + } + } + else + { + imageItem.src = expandImage.src; + CollapseSection(imageItem); + AddCollapsedItem(imageItem.id); + } + + SetCollapseAll(); +} + +function ExpandCollapseAll(imageItem) +{ + var imgElements = document.getElementsByName("toggleSwitch"); + var i; + + if(ItemCollapsed(imageItem.id) == true) + { + imageItem.src = collapseAllImage.src; + RemoveCollapsedItem(imageItem.id); + for(i = 0; i < imgElements.length; ++i) + { + imgElements[i].src = collapseImage.src; + ExpandSection(imgElements[i]); + RemoveCollapsedItem(imgElements[i].id); + + if(imgElements[i].id.indexOf("Family", 0) == 0) + protectedMembers = "on"; + if(imgElements[i].id.indexOf("Assembly", 0) == 0) + assemblyMembers = "on"; + if(imgElements[i].id.indexOf("Private", 0) == 0) + privateMembers = "on"; + } + SetToggleAllLabel(false); + } + else + { + imageItem.src = expandAllImage.src; + AddCollapsedItem(imageItem.id); + for(i = 0; i < imgElements.length; ++i) + { + imgElements[i].src = expandImage.src; + CollapseSection(imgElements[i]); + AddCollapsedItem(imgElements[i].id); + } + SetToggleAllLabel(true); + } +} + +function ExpandCollapse_CheckKey(imageItem) +{ + if(window.event.keyCode == 13) + ExpandCollapse(imageItem); +} + +function ExpandCollapseAll_CheckKey(imageItem) +{ + if(window.event.keyCode == 13) + ExpandCollapseAll(imageItem); +} + +function ExpandSection(imageItem) +{ + imageItem.parentElement.parentElement.nextSibling.style.display = ""; +} + +function CollapseSection(imageItem) +{ + imageItem.parentElement.parentElement.nextSibling.style.display = "none"; +} + +function SetCollapseAll() +{ + var imageElement = document.getElementById("toggleAllImage"); + + if(imageElement == null) + return; + + var imgElements = document.getElementsByName("toggleSwitch"); + var allCollapsed = true; + var i; + + for(i = 0; i < imgElements.length; ++i) + { + allCollapsed = allCollapsed && ItemCollapsed(imgElements[i].id) + } + + if(allCollapsed) + { + imageElement.src = expandAllImage.src; + AddCollapsedItem(imageElement.id); + } + else + { + imageElement.src = collapseAllImage.src; + RemoveCollapsedItem(imageElement.id); + } + + SetToggleAllLabel(allCollapsed); +} + +function SetToggleAllLabel(allCollapsed) +{ + var labelElement; + labelElement = document.getElementById("collapseAllLabel"); + + if(labelElement == null) + return; + + labelElement.style.display = "none"; + + labelElement = document.getElementById("expandAllLabel"); + labelElement.style.display = "none"; + + if(allCollapsed) + { + labelElement = document.getElementById("expandAllLabel"); + labelElement.style.display = "inline"; + } + else + { + labelElement = document.getElementById("collapseAllLabel"); + labelElement.style.display = "inline"; + } +} + +function ItemCollapsed(imageId) +{ + var i; + + for(i = 0; i < collapsedItems.length; ++i) + { + if(imageId == collapsedItems[i]) + return true; + } + + return false; +} + +function AddCollapsedItem(imageId) +{ + if(ItemCollapsed(imageId) == false) + collapsedItems[collapsedItems.length] = imageId; +} + +function RemoveCollapsedItem(imageId) +{ + var i; + + for(i = 0; i < collapsedItems.length; ++i) + { + if(imageId == collapsedItems[i]) + collapsedItems.splice(i, 1); + } +} + +function SaveSections() +{ + var i; + var x = 0; + + CleanUserDataStore(); + + for(i = 0; i < collapsedItems.length; ++i) + { + if(ShouldSave(collapsedItems[i]) == true) + { + Save("imageValue" + x, collapsedItems[i]); + x++; + } + } +} + +function LoadSections() +{ + var i = 0; + var imageId = Load("imageValue" + i); + + while(imageId != null) + { + var imageItem = document.getElementById(imageId); + + if(imageItem != null) + { + if(imageItem.id.indexOf("Family", 0) == 0) + { + if(protectedMembers == "on") + { + ExpandCollapse(imageItem); + } + } + else if(imageItem.id.indexOf("Assembly", 0) == 0) + { + if(assemblyMembers == "on") + { + ExpandCollapse(imageItem); + } + } + else if(imageItem.id.indexOf("Private", 0) == 0) + { + if(privateMembers == "on") + { + ExpandCollapse(imageItem); + } + } + else + ExpandCollapse(imageItem); + } + else + { + AddCollapsedItem(imageId); + } + + i++; + imageId = Load("imageValue" + i); + } + + SetCollapseAll(); +} + +function CleanUserDataStore() +{ + var i = 0; + var imageId = Load("imageValue" + i); + + while(imageId != null) + { + RemoveAttribute("imageValue" + i); + i++; + imageId = Load("imageValue" + i); + } +} + +function ShouldSave(imageId) +{ + var toggleName; + + if(imageId == "toggleAllImage") + return false; + + toggleName = "procedureToggle"; + if(imageId.indexOf(toggleName, 0) == 0) + return false; + + toggleName = "sectionToggle"; + if(imageId.indexOf(toggleName, 0) == 0) + return false; + + return true; +} + +function OpenSection(imageItem) +{ + if(ItemCollapsed(imageItem.id) == true) + ExpandCollapse(imageItem); +} + +/* +********** +********** End Expand/Collapse +********** +*/ + + + +/* +********** +********** Begin Copy Code +********** +*/ + +function CopyCode(key) +{ + var trElements = document.getElementsByTagName("tr"); + var i; + for(i = 0; i < trElements.length; ++i) + { + if(key.parentElement.parentElement.parentElement == trElements[i].parentElement) + { + window.clipboardData.setData("Text", trElements[i].innerText); + } + } +} + +function ChangeCopyCodeIcon(key) +{ + var i; + var imageElements = document.getElementsByName("ccImage") + for(i=0; i + + SDK Link Manager + + + + + + + +
    +
    +
    +

    +

    SDK Link Namespace

    + + + + +
    +
    + + + diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/security.gif b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/security.gif new file mode 100644 index 0000000000000000000000000000000000000000..48661ce7426c682f97dc9b27f58d6ef3a7184e89 GIT binary patch literal 183 zcmZ?wbhEHbWM|-FI3mx`($Z3$8~wEi)YYq3TS}ws?d=;I z8wT{uc6t8%d2@4fKtRC5hYv4bzC3^a{F)-2vuDrNlo;;aksR$O93O8rb?VeFU%oUo zHRR?la%BXHQ+FEf7dcOCR584g|Gj=2hA9 zhI%r)*Lh8uGQ~)nFEB9B#Ytu6%$XlPe2|lq>+kRX|NlS3D4=BsDE?$&WMJrG&;eNj z$`cG6PZ&fwmlU*h&F4xzV)ApdsxPw!^Yk?W6B-zrv}@QzJdBt-514B(a5MxaGBqoPEBc;c(x!ur0z&O9b{a~X zl$e-9vs8p09_&6KqoxzEB}0K>hGNDGj*t>1mnlwVCl-}lX6<8ZtSFcgkkI1Mvq?%n zr6HlDtJShlW{JhhiJt8o7V-ZW4mq(tW)c_a>4-6%AbB8WpUty5>K!pU&9`{OZY1?| nt5?7BnXvIOha$V(JFQKM9*t9Z6YVqt3l0m+6z^hUVz34PgL5nO literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/tooltip.htc b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/tooltip.htc new file mode 100644 index 0000000..5d8fe0f --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_msdn_temp/tooltip.htc @@ -0,0 +1,765 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp Documentation/ndoc_qa.log b/Code/Chapter 5/EmployeeApp Documentation/ndoc_qa.log new file mode 100644 index 0000000..b024076 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp Documentation/ndoc_qa.log @@ -0,0 +1,30 @@ +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Name" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Name" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Name" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.ID" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.ID" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.ID" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Pay" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Pay" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Pay" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Age" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Age" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Age" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.SocialSecurityNumber" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.SocialSecurityNumber" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.SocialSecurityNumber" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Company" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Company" +information QA1004: blank or 'noise' tag ignored for member: "P:EmployeeApp.Employee.Company" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#ctor(System.String,System.Int32,System.Int32,System.Single,System.String)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.#cctor" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.GiveBonus(System.Single)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.GiveBonus(System.Single)" +information QA1004: blank or 'noise' tag ignored for member: "M:EmployeeApp.Employee.DisplayStats" +information QA1004: blank or 'noise' tag ignored for member: "T:EmployeeApp.Employee" diff --git a/Code/Chapter 5/EmployeeApp/Employee.Internal.vb b/Code/Chapter 5/EmployeeApp/Employee.Internal.vb new file mode 100644 index 0000000..a1a4c72 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/Employee.Internal.vb @@ -0,0 +1,157 @@ +Public Class Employee + +#Region "Private Fields" + ' Field data. + Private empName As String + Private empID As Integer + Private currPay As Single + Private empAge As Integer + Private empSSN As String + Private Shared companyName As String +#End Region + +#Region "Properties" + ''' + ''' Gets or sets the name of the employee. + ''' + ''' + ''' + ''' + Public Property Name() As String + Get + Return empName + End Get + Set(ByVal value As String) + empName = value + End Set + End Property + + ''' + ''' Gets or sets the ID of the employee. + ''' + ''' + ''' + ''' + Public Property ID() As Integer + Get + Return empID + End Get + Set(ByVal value As Integer) + empID = value + End Set + End Property + + ''' + ''' Gets or sets the current pay of the employee. + ''' + ''' + ''' + ''' + Public Property Pay() As Single + Get + Return currPay + End Get + Set(ByVal value As Single) + currPay = value + End Set + End Property + + ''' + ''' Gets or sets the age of the employee. + ''' + ''' + ''' + ''' + Public Property Age() As Integer + Get + Return empAge + End Get + Set(ByVal value As Integer) + empAge = value + End Set + End Property + ''' + ''' Read only access to SSN. + ''' Set this value with a constructor argument. + ''' + ''' + ''' + ''' + Public ReadOnly Property SocialSecurityNumber() As String + Get + Return empSSN + End Get + End Property + + ''' + ''' Set the company name of the employees. + ''' + ''' + ''' + ''' + Public Shared Property Company() As String + Get + Return companyName + End Get + Set(ByVal value As String) + companyName = value + End Set + End Property +#End Region + +#Region "Constructors" + ''' + ''' The default constructor. + ''' + ''' + Public Sub New() + End Sub + ''' + ''' A custom constrctor to set the state of an employee. + ''' + ''' + ''' + ''' + ''' + ''' + ''' + Public Sub New(ByVal name As String, ByVal age As Integer, _ + ByVal id As Integer, ByVal pay As Single, _ + ByVal ssn As String) + empName = name + empAge = age + empID = id + empSSN = ssn + currPay = pay + End Sub + ''' + ''' This shared constructor sets the shared companyName + ''' field. + ''' + ''' + Shared Sub New() + companyName = "Intertech Training" + End Sub +#End Region + +#Region "Getter / Setter for empName field" + '' Accessor (get method) + 'Public Function GetName() As String + ' Return empName + 'End Function + + '' Mutator (set method) + 'Public Sub SetName(ByVal name As String) + ' ' Remove any illegal characters (!,@,#,$,%), + ' ' check maximum length or case before making assignment. + ' empName = name + 'End Sub + 'Public Function get_SocialSecurityNumber() As String + ' Return empSSN + 'End Function + 'Public Sub set_SocialSecurityNumber(ByVal val As String) + ' empSSN = val + 'End Sub +#End Region + +End Class diff --git a/Code/Chapter 5/EmployeeApp/Employee.vb b/Code/Chapter 5/EmployeeApp/Employee.vb new file mode 100644 index 0000000..157dbe2 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/Employee.vb @@ -0,0 +1,31 @@ +''' +''' This is the Employee class +''' +''' +Partial Public Class Employee + +#Region "Members" + ''' + ''' This method gives a pay increase to the + ''' employee. + ''' + ''' + ''' + Public Sub GiveBonus(ByVal amount As Single) + currPay += amount + End Sub + + ''' + ''' This method displays the state of the object. + ''' + ''' + Public Sub DisplayStats() + Console.WriteLine("Name: {0}", empName) + Console.WriteLine("Age: {0}", empAge) + Console.WriteLine("SSN: {0}", empSSN) + Console.WriteLine("ID: {0}", empID) + Console.WriteLine("Pay: {0}", currPay) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 5/EmployeeApp/EmployeeApp.cd b/Code/Chapter 5/EmployeeApp/EmployeeApp.cd new file mode 100644 index 0000000..732b5ac --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/EmployeeApp.cd @@ -0,0 +1,11 @@ + + + + + + + Employee.Internal.vb + AAAAAAAAAAgAggAAAEAIAAQQEAAAAACEAAAABQAAAUA= + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp/EmployeeApp.sln b/Code/Chapter 5/EmployeeApp/EmployeeApp.sln new file mode 100644 index 0000000..b8045d8 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/EmployeeApp.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EmployeeApp", "EmployeeApp.vbproj", "{83ECB051-6E12-454C-A344-C8F64EB5C3C9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {83ECB051-6E12-454C-A344-C8F64EB5C3C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83ECB051-6E12-454C-A344-C8F64EB5C3C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83ECB051-6E12-454C-A344-C8F64EB5C3C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83ECB051-6E12-454C-A344-C8F64EB5C3C9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 5/EmployeeApp/EmployeeApp.suo b/Code/Chapter 5/EmployeeApp/EmployeeApp.suo new file mode 100644 index 0000000000000000000000000000000000000000..5efd6940da53f3bd3db6b135b6f42af1ec05a55e GIT binary patch literal 22016 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 CH-JI_ literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj b/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj new file mode 100644 index 0000000..691f466 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {83ECB051-6E12-454C-A344-C8F64EB5C3C9} + Exe + EmployeeApp.Program + EmployeeApp + EmployeeApp + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + EmployeeApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + EmployeeApp.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj.user b/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/EmployeeApp.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp/My Project/Application.Designer.vb b/Code/Chapter 5/EmployeeApp/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 5/EmployeeApp/My Project/Application.myapp b/Code/Chapter 5/EmployeeApp/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 5/EmployeeApp/My Project/AssemblyInfo.vb b/Code/Chapter 5/EmployeeApp/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..809f624 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 5/EmployeeApp/My Project/Resources.Designer.vb b/Code/Chapter 5/EmployeeApp/My Project/Resources.Designer.vb new file mode 100644 index 0000000..0387836 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EmployeeApp.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/EmployeeApp/My Project/Resources.resx b/Code/Chapter 5/EmployeeApp/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 5/EmployeeApp/My Project/Settings.Designer.vb b/Code/Chapter 5/EmployeeApp/My Project/Settings.Designer.vb new file mode 100644 index 0000000..6883ba3 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EmployeeApp.My.MySettings + Get + Return Global.EmployeeApp.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/EmployeeApp/My Project/Settings.settings b/Code/Chapter 5/EmployeeApp/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 5/EmployeeApp/Program.vb b/Code/Chapter 5/EmployeeApp/Program.vb new file mode 100644 index 0000000..9d030d2 --- /dev/null +++ b/Code/Chapter 5/EmployeeApp/Program.vb @@ -0,0 +1,16 @@ +' This project illustrates the use of encapsulation +' services (the first pillar of OOP). +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Encapsulation *****") + Console.WriteLine("These folks work at {0}", Employee.Company) + + Dim emp As New Employee("Marvin", 24, 456, 30000, "111-11-1111") + emp.GiveBonus(1000) + emp.DisplayStats() + + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 5/SharedData/My Project/Application.Designer.vb b/Code/Chapter 5/SharedData/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 5/SharedData/My Project/Application.myapp b/Code/Chapter 5/SharedData/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 5/SharedData/My Project/AssemblyInfo.vb b/Code/Chapter 5/SharedData/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a71deec --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 5/SharedData/My Project/Resources.Designer.vb b/Code/Chapter 5/SharedData/My Project/Resources.Designer.vb new file mode 100644 index 0000000..a2bcb88 --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SharedData.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SharedData/My Project/Resources.resx b/Code/Chapter 5/SharedData/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedData/My Project/Settings.Designer.vb b/Code/Chapter 5/SharedData/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4c6411d --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SharedData.My.MySettings + Get + Return Global.SharedData.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SharedData/My Project/Settings.settings b/Code/Chapter 5/SharedData/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 5/SharedData/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 5/SharedData/Program.vb b/Code/Chapter 5/SharedData/Program.vb new file mode 100644 index 0000000..2c646e6 --- /dev/null +++ b/Code/Chapter 5/SharedData/Program.vb @@ -0,0 +1,18 @@ +' This project illustrates the use of shared data and +' shared constructors. + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Shared Data *****") + SavingsAccount.SetInterestRate(0.09) + Dim s1 As New SavingsAccount(50) + Dim s2 As New SavingsAccount(100) + + ' All three lines print out "Interest Rate is: 0.09" + Console.WriteLine("Interest Rate is: {0}", s1.GetInterestRateObj()) + Console.WriteLine("Interest Rate is: {0}", s2.GetInterestRateObj()) + Console.WriteLine("Interest Rate is: {0}", SavingsAccount.GetInterestRate()) + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 5/SharedData/SavingsAccount.vb b/Code/Chapter 5/SharedData/SavingsAccount.vb new file mode 100644 index 0000000..214ec43 --- /dev/null +++ b/Code/Chapter 5/SharedData/SavingsAccount.vb @@ -0,0 +1,31 @@ +Public Class SavingsAccount + Public currBalance As Double + Public Shared currInterestRate As Double = 0.04 + + ' Instance constructor. + Public Sub New(ByVal balance As Double) + currBalance = balance + End Sub + + ' A shared constructor. + Shared Sub New() + Console.WriteLine("In Shared ctor!") + currInterestRate = 0.04 + End Sub + + ' Shared members to get/set interest rate. + Public Shared Sub SetInterestRate(ByVal newRate As Double) + currInterestRate = newRate + End Sub + Public Shared Function GetInterestRate() As Double + Return currInterestRate + End Function + + ' Instance members to get/set interest rate. + Public Sub SetInterestRateObj(ByVal newRate As Double) + currInterestRate = newRate + End Sub + Public Function GetInterestRateObj() As Double + Return currInterestRate + End Function +End Class diff --git a/Code/Chapter 5/SharedData/SharedData.sln b/Code/Chapter 5/SharedData/SharedData.sln new file mode 100644 index 0000000..847b38f --- /dev/null +++ b/Code/Chapter 5/SharedData/SharedData.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharedData", "SharedData.vbproj", "{5FE1541F-1EE3-4592-8B5E-183148480E14}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5FE1541F-1EE3-4592-8B5E-183148480E14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FE1541F-1EE3-4592-8B5E-183148480E14}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FE1541F-1EE3-4592-8B5E-183148480E14}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FE1541F-1EE3-4592-8B5E-183148480E14}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 5/SharedData/SharedData.suo b/Code/Chapter 5/SharedData/SharedData.suo new file mode 100644 index 0000000000000000000000000000000000000000..9102704d23168f4166025fd7434781b8517f64f3 GIT binary patch literal 18432 zcmeHPTWlOx8Jd5(_3o^1>s@ze zoy1D=zzZN%T$C3O0@0!%p@M*-3KayRL_DMqkUk(Gp*~Q75FkN#4o_%V-AP1+EXNHC%<9>-_=18o*k>!+;M09szs^unzDzU_AgNU_1uc z2G|bR2>38y6W}9&&44X{t$>dLb^tyG*aBBS{yI^*T*Pt!*iIQX=1Hfc#)<&<3-<-_(D$q5 zPJUTm|1tEO09eK5*?+y`-+;G2$4!i+_aJlffl3|_Q+3D($OCkJ=l*9?Y}2{_S&#dl z`H;%VC%FH~E658>0C@rT|8Bq@zzAR;fbZ=`{)8$&iTnVd2@nK41!xAe09pZUfDqsy z;1J+2;0T}{a1?M1a2)V7-~`|qz_Wl3Ko}4KbONG)F2G5^DZujpJ?0*idjV(Fy*}jU zRhe}LRQUq(i-1e&_otA5T9uzu`DNsv0VLG#B=Qu1E1L!k1K8#$@-e`;`i)x)n*QGY zkL1gHf7kib`;UD2W;{stUsw89gi^vV{U&LpR+Qym5ujKo8eq;+>T!en{D}&8BL8AMswMCB$u+{k&(n?!OEKl zY z$P17U7V;o?a1`riikZvcK6QsY=F)^D$cwsBT;pgrhujjS5wydZC1shA6mhII@8xkP z1=^!zP2jFfr4rY{t0ldT)ml;wR?XN>79i(A?uubxmJnm=0ySiSC1<2pP$sn|8;}Oh zCT5AdcM7#L_(d&Y3L_!~nUI2<#R#rRv{yiGBTphXj2mLd4Wah1pu9Zf7H1(T=D8N_ zaX|Cgf239F3QXMb&i=zEEQk_m<+_`Hb|Jg5Py5Iikllf(UqnAEB zSt`G}(Tdx>)kc6V{gwU0`Lk}-@s(glv$Jon5UxSqJ@VX((ndhpjI+F=_#6JFfNX&^ zRr<~MLXY2{`R6Q*yD0wJVDyC`uG?YgH9?$(QH~1p{D{#;zTb=aqYf}CBp>BD<=RwoUO8lczZ+duRAD`N1Vkt6AicV_Nv@45ZW)DOP8{eHVwO=#sVb=SSQ zHS?dfyU%@P_VfR~cjq=86|maQo7A6^LVKPND?y&EwdX6~;BMM8tt;w{lhD7s`H!{* zwPq~GQGN|7{zre1U;aaX@HW*9^&Cn>&Eq7WO=B+)<1Y1I{iM8K{R{j*Kz)iX2fzK( z^*AI+61LV5{42faEe{$l=kXV?(`zNzf1+RZ%~Y#CpYH|GN5mAt=((3{p~G9?C6!pn zdR|xBf1FS1(|-GR${$(`Zq^emB3caEdg6Yrw4Q8-^^_7TC2b}O1g4VY@@|Q1_hXEi z)}N*~S~=t^DXa-+#Duh_y+h7Ju0w0g%Tjb&f6o3nt5WNVxQxVUy-@?9oyq#dq}&z@ z8r)OzjO4Wjz7aO zxg^pb^(hnJm;OGEy59gW4PrIfYeK9}swlIiKd74JC*PmX{&Uj*DNt!j^qs|+Gr*<` z*ide97JT&|SOrw*1NS?AXaDB}@5=y-tbk$1%y;5WEgu->zi$5X3E=v=GC-xbZz*=1 zAIj~;S`-9LCL!BsJ6T0KCIkOjk&c&c9Bv+@80eWE#4O~B4PKTMoOBAm3q|~?12;D3 zFeYyYp)LN4~8v_L3Wm>tS@qlYXp5kSQgKu9SrXpajZa>8CEq z6doJ>sG(-q&kp2y=Fb~|lKpT(cZ#9ccxgwl2Uec6HztIZL9adi(X@}qGk9gv+6Q$* zC-=B?kGqrSo7LYJm0T{%kLqp>KJ_*u2BjJC}vuW&pO_B0{mnOdN5@s?0HZ zCB|aS^)S)1SSe&XfERtDd`4eZKk%X_MOt!hXYV{)FP*(pdg_z+I1VhR|FA}^!mlCw zq1B%heaTplp!l5ww$Bz1Phj4QL@mj@Ez9dwzEkD9RK8o~%_cas(hcyWot4X zPR@_>^odHz+*ku0c@f9@$mj%m=qRzrQU3}KYl1jci3|Tp8e@|uGeOkh9Jb*Ihk71; z9ciq$jrlqm?&)r{UF4>16VFjhStH36DVHU-W0+6IP|0-=qX&j84Z2a|!VGITQY5!1Aa8mb`VH{}VkBFy&OQ@BR&|h)`9sc(e5bjx%1ard^HBTC)eaI z2!b-Czn-Vi8T?TS5{N4!ofnF$w+cx{&fbj3>Q(?XHzy`Cj?oQ|&PBz8R430d7{4N8 zD%`MQ^zP!#j@BsLFrk&Vc$k#aiKc6M!phfEV@yhtI-+y6c``vCU>5X8YNQ@x3#y|X z>ZUa~wIoIeklQ828*}@nFCc5YAfC?cn>0^am(os0$r4YV>z0qgy>1XXDk+0IRAWJp zjPqSRGmXCE=gywy3FHGzoSCJi_PID}>T=@PIDCR1&-aIgeOq{1=jJ1;^gRXe{RsU}m6n;82TFX_k;taZ!iZ%C&qfE#zC@;w z&gCc6#~$wAdDI#3&VA&bmh%bZ@Z|WK3Qx5AAgkPU`ts$8`BKJiXujeVwehXLy^$!V z#1k*c!OhMv-wx;z(y1W6!l0DknHOUzsA(~df_mOGo~DJ*n3BpWdJGsj9BoeBw{2Q~X4==8W^FT#|PVNLPv{N%6{G`;Xavo`uG1&r}y z&?JO_Ghplng6*%v^%4;w6$gG03tYy;J-8A?-0s2 zG5am8ZK1f1WB2 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {5FE1541F-1EE3-4592-8B5E-183148480E14} + Exe + SharedData.Program + SharedData + SharedData + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SharedData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SharedData.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedData/SharedData.vbproj.user b/Code/Chapter 5/SharedData/SharedData.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 5/SharedData/SharedData.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedMethods/My Project/Application.Designer.vb b/Code/Chapter 5/SharedMethods/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 5/SharedMethods/My Project/Application.myapp b/Code/Chapter 5/SharedMethods/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 5/SharedMethods/My Project/AssemblyInfo.vb b/Code/Chapter 5/SharedMethods/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..3676154 --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 5/SharedMethods/My Project/Resources.Designer.vb b/Code/Chapter 5/SharedMethods/My Project/Resources.Designer.vb new file mode 100644 index 0000000..b4123ff --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SharedMethods.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SharedMethods/My Project/Resources.resx b/Code/Chapter 5/SharedMethods/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedMethods/My Project/Settings.Designer.vb b/Code/Chapter 5/SharedMethods/My Project/Settings.Designer.vb new file mode 100644 index 0000000..cb31b4f --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SharedMethods.My.MySettings + Get + Return Global.SharedMethods.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SharedMethods/My Project/Settings.settings b/Code/Chapter 5/SharedMethods/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 5/SharedMethods/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 5/SharedMethods/Program.vb b/Code/Chapter 5/SharedMethods/Program.vb new file mode 100644 index 0000000..9bb647e --- /dev/null +++ b/Code/Chapter 5/SharedMethods/Program.vb @@ -0,0 +1,23 @@ +' This project illustrates the use of the Shared keyword. +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Shared Methods *****") + For i As Integer = 0 To 5 + Console.WriteLine(Teenager.Complain()) + Next + + Console.WriteLine() + + ' VB-ism! This will be a compiler error + ' by setting the Instance variable accesses + ' shared member condition to "Error" using the My Project window. + Dim bob As New Teenager() + For i As Integer = 0 To 5 + Console.WriteLine(bob.Complain()) + Next + + Console.ReadLine() + End Sub + +End Module diff --git a/Code/Chapter 5/SharedMethods/SharedMethods.sln b/Code/Chapter 5/SharedMethods/SharedMethods.sln new file mode 100644 index 0000000..cd7863c --- /dev/null +++ b/Code/Chapter 5/SharedMethods/SharedMethods.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharedMethods", "SharedMethods.vbproj", "{43D94E69-0782-4E02-8A61-BB38297CA103}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {43D94E69-0782-4E02-8A61-BB38297CA103}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43D94E69-0782-4E02-8A61-BB38297CA103}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43D94E69-0782-4E02-8A61-BB38297CA103}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43D94E69-0782-4E02-8A61-BB38297CA103}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 5/SharedMethods/SharedMethods.suo b/Code/Chapter 5/SharedMethods/SharedMethods.suo new file mode 100644 index 0000000000000000000000000000000000000000..13fe3bf98ad27a6625180eaa3e782b4f48d3b8a2 GIT binary patch literal 17920 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 L%id}(W&HmEvPC6r literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/SharedMethods/SharedMethods.vbproj b/Code/Chapter 5/SharedMethods/SharedMethods.vbproj new file mode 100644 index 0000000..3aa6ad3 --- /dev/null +++ b/Code/Chapter 5/SharedMethods/SharedMethods.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {43D94E69-0782-4E02-8A61-BB38297CA103} + Exe + SharedMethods.Program + SharedMethods + SharedMethods + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SharedMethods.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + pdbonly + false + true + true + bin\Release\ + SharedMethods.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 + + + + + + + 3.5 + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedMethods/SharedMethods.vbproj.user b/Code/Chapter 5/SharedMethods/SharedMethods.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 5/SharedMethods/SharedMethods.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 5/SharedMethods/Teenager.vb b/Code/Chapter 5/SharedMethods/Teenager.vb new file mode 100644 index 0000000..02a64ee --- /dev/null +++ b/Code/Chapter 5/SharedMethods/Teenager.vb @@ -0,0 +1,14 @@ +Public Class Teenager + Public Shared r As Random = New Random() + + Public Shared Function GetRandomNumber(ByVal upperLimit As Short) As Integer + Return r.Next(upperLimit) + End Function + + Public Shared Function Complain() As String + Dim messages As String() = _ + {"Do I have to?", "He started it!", "I'm too tired...", _ + "I hate school!", "You are sooooooo wrong!"} + Return messages(GetRandomNumber(5)) + End Function +End Class diff --git a/Code/Chapter 5/SimpleClassExample/Car.vb b/Code/Chapter 5/SimpleClassExample/Car.vb new file mode 100644 index 0000000..85b94df --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/Car.vb @@ -0,0 +1,34 @@ +Public Class Car + ' The 'state' of the Car. + Public petName As String + Public currSpeed As Integer + +#Region "Constructors" + ' A custom default constructor. + Public Sub New() + petName = "Chuck" + currSpeed = 10 + End Sub + + ' Here, currSpeed will receive the + ' default value of an Integer (zero). + Public Sub New(ByVal pn As String) + petName = pn + End Sub + + ' Let caller set the full 'state' of the Car. + Public Sub New(ByVal pn As String, ByVal cs As Integer) + petName = pn + currSpeed = cs + End Sub +#End Region + + ' The functionality of the Car. + Public Sub PrintState() + Console.WriteLine("{0} is going {1} MPH.", _ + petName, currSpeed) + End Sub + Public Sub SpeedUp(ByVal delta As Integer) + currSpeed += delta + End Sub +End Class diff --git a/Code/Chapter 5/SimpleClassExample/Motorcycle.vb b/Code/Chapter 5/SimpleClassExample/Motorcycle.vb new file mode 100644 index 0000000..90e72f8 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/Motorcycle.vb @@ -0,0 +1,45 @@ +Public Class Motorcycle + Public driverIntensity As Integer + Public driverName As String + + Public Sub SetDriverName(ByVal name As String) + ' These two line are functionally identical. + driverName = name + Me.driverName = name + End Sub + + Public Sub PopAWheely() + For i As Integer = 0 To driverIntensity + Console.WriteLine("Yeeeeeee Haaaaaeewww!") + Next + End Sub + +#Region "Constructors" + Public Sub New() + Console.WriteLine("In default c-tor") + End Sub + + Public Sub New(ByVal intensity As Integer) + Me.New(intensity, "") + Console.WriteLine("In c-tor taking an Integer") + End Sub + + Public Sub New(ByVal name As String) + Me.New(5, name) + Console.WriteLine("In c-tor taking a String") + End Sub + + Public Sub New(ByVal intensity As Integer, ByVal name As String) + Console.WriteLine("In master c-tor") + If intensity > 10 Then + intensity = 10 + End If + driverIntensity = intensity + driverName = name + End Sub +#End Region + +End Class + + + diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Application.Designer.vb b/Code/Chapter 5/SimpleClassExample/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Application.myapp b/Code/Chapter 5/SimpleClassExample/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 5/SimpleClassExample/My Project/AssemblyInfo.vb b/Code/Chapter 5/SimpleClassExample/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1f9eece --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Resources.Designer.vb b/Code/Chapter 5/SimpleClassExample/My Project/Resources.Designer.vb new file mode 100644 index 0000000..17242ff --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleClassExample.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Resources.resx b/Code/Chapter 5/SimpleClassExample/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Settings.Designer.vb b/Code/Chapter 5/SimpleClassExample/My Project/Settings.Designer.vb new file mode 100644 index 0000000..bd3e36d --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleClassExample.My.MySettings + Get + Return Global.SimpleClassExample.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 5/SimpleClassExample/My Project/Settings.settings b/Code/Chapter 5/SimpleClassExample/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 5/SimpleClassExample/Program.vb b/Code/Chapter 5/SimpleClassExample/Program.vb new file mode 100644 index 0000000..ce74ee3 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/Program.vb @@ -0,0 +1,41 @@ +' This project examines the basics of class design and usage +' (Constructors, the New keyword and the Me keyword). + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Class Types *****") + + ' Allocate and configure a Car object. + Dim myCar As New Car() + myCar.petName = "Henry" + myCar.currSpeed = 10 + + ' Speed up the car a few times and print out the + ' new state. + For i As Integer = 0 To 10 + myCar.SpeedUp(5) + myCar.PrintState() + Next + Console.WriteLine() + + ' Make a Car called Chuck going 10 MPH. + Dim chuck As New Car() + chuck.PrintState() + + ' Make a Car called Mary going 0 MPH. + Dim mary As New Car("Mary") + mary.PrintState() + + ' Make a Car called Daisy going 75 MPH. + Dim daisy As New Car("Daisy", 75) + daisy.PrintState() + Console.WriteLine() + + ' Make a Motorcycle. + Dim c As New Motorcycle(5) + c.SetDriverName("Tiny") + c.PopAWheely() + Console.WriteLine("Rider name is {0}", c.driverName) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 5/SimpleClassExample/SimpleClassExample.sln b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.sln new file mode 100644 index 0000000..8787ac8 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleClassExample", "SimpleClassExample.vbproj", "{DE1149B7-6FE7-4A5B-9975-7164F086A603}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DE1149B7-6FE7-4A5B-9975-7164F086A603}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE1149B7-6FE7-4A5B-9975-7164F086A603}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE1149B7-6FE7-4A5B-9975-7164F086A603}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE1149B7-6FE7-4A5B-9975-7164F086A603}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 5/SimpleClassExample/SimpleClassExample.suo b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.suo new file mode 100644 index 0000000000000000000000000000000000000000..efcc4bdee7b91738776e00264dcb770ae3f2a277 GIT binary patch literal 18944 zcmeI3U2I%O701U(8&X;*Y10Cw4O=%U{YVx&wi7#P)7opNO=>r;*Kvy2syN=Y<7U0< z?rz#zO%X__45~NSO)#mq~x#PXN z-jD0VcI?twoqOlbojd2unKNh3IWv3V?QMU1`Sn}=ZmQBDv)RlqTw}I`%3H__Z2Fin zo5<*Seqmw36&geKgS3G-@E){Y6^x60)c^t@i^hWrX+keq}NRyQ$T0BS(X#SrF%B2US1N?i~7^ajtMYnUFP-XJg()IY|37brhrp`?@!crmRs*%J^!9~dDkEMe}3`0Z@iF-hnIV>H&5>-Bq7H9GynOc-#PPi z`rQ|Qu=x!M#Tum+@JR1WB@U#9=3;&M{OMw9tS>g6OUFv5GO_rh1EaCw@oZ@_Uzmw? z6wAWe7u+`6jQyqbRqL>Y_yQiWQ&>JcV@5nHU;OI{h?yDrLrailH-dCe6KsOl7#o&7)}AQF5caD^hn5$&+3?&NYLU z^X0`R#O*}?XpVciYf|05Zs983qU7~|hFMcW+h)K&jr8X%6|PRBYb?-zvN=RUqq_dx zK{8%M$G|sg`ITkv=2?A`7V|SuF+r|bY6ZXSpXKyl@+w`c^thQZS-3C`w$ogvzqd6E(gEXU(YCU{3L7Il*L>?_iKHbuyWE2wc z@%JHn8E7~S5AyIpHc2Bo?gGDTRIN)<@yoV72PjqdU-pN_J?aSD3IEleY~-l;MX#6t zYW#<7pVLTTo>3_@l|kVbUaieh@r%|i5<-$BFAI-ldlity7%OSP>WTrbDfCL7d&cHY zQCEDCeu$Ya%92n!Ls^!x1Xt;jqP5}17t2!)k!{0e6G)eD$a*bi|CfDjKB`hsaOxCeKrze#`b9qpS$O#fuodDv?i9mglLPZ^mdhWxpzMFY@&S zcVo`3GDgkCEIpXC_&i?!e5LR^s@A^$(gqXoLt`U}ET?)SR>{A5-v?8n+#I>fDN{pH zzu#h7TB!bxbTZEKAFn>T8TGKRaB7nct*Es7iD_v!n_?;DH!VKf_>66V*YdZOe)pr! z8!pcOXTg`tj#jEJS6O}iGl$%1Ma-&N-Gu(JdPllPscyy43)!^(u^RsnBRd0D`JpG6 zfwEij=2_-k?X)}4e_GF@;@8?ETU|-|-f6U)o&9A^QE8b-4{9yS*lU>@{IARGe;%1W zL!VvC;XV(8Q`S%;Tc9oIzg^Qqe09C6eU+`GH9$#x8v?)9fN87w#^Js6-|V7oX3YIW z10~T1@s*8v9;q3y-f<`XRiD|9SGErwJ79C2_*7k#?%`bzC0*q9Q(J!aVSKi3a=kzs zE6od7qG?9g`L!Oevws{`(1BGEr^-5&qocZ8t>3tkv>mkG;Yzj`HzSO*RwAvG8P<

    %KJ1nME0Q^K24XoT60gx0n8E%6&QocIX-41 z2(|J0QrZ8CnJDfNwg0Wu9Sa<TQY-GR%c)DuRl2ZrJ}ez9ODR#a~{+vCQzg- z{M)nm)HvtANt&J4zSn#2*MIf!>wh`-_KmNexPH(Sesi?B}SYZw97% z(sWO5KR<0 zsqDsCQ*oMGn5V)WLtJSuPVdh1!b-CNJHYn=6*VMVI6o?C*kuQmVWd;Aock@xTC ztE^nluV(60hIPF!^s()kTS`4HSI0kZq& z0BLaF4=Iv2gMQTGYW?`jTKHd$sQ2rr>>&AZ>ZANSx7vmy&4CbB-4uVgkuvEXrK;C8 zA9qsvQd zThjZe^WOLPR^(4DDV`N|{>gIiKBkt#yD<;-B@?HpbE*3ZYq73Hi5WU+pJj}-%RK(Wcit)Oeye5Xeb=)%v&HS) zy!LMY1?{pkvI*_fmLn|H7QTFjXgrinnt_AsTORV(mrI3u94$f}r+3HV-$tZa z>xFE_D6%Kr8l_%5upGUeFkr{>82g-uIa~4&F_hMjT(okQKryU7d?vlqS&!X#NhA18 z3CexRlh#if#pa(y{?&%_&b4!()l}^avv=Cdw}*)(j8I>-TvW%!bmZ-a&dmjR@t|Hh z!HcCHogyLCUR*D9&C(OS8^@~~fiC%uvL>gjmsh>lA$y~|*P+$k?{uW_mu2s$MzYEd zcX(u_PFP%SZ!&J5r4=4r3|6xo+a#+f_KM42AKY&b?ybT7j^N%F+&hE&&fvZ)xZfGv zU2E>Vh~rN!H5EBjuf@_3H5{rda7qNf#<=p?I34qe#!SHWYdG){a{()x-6!S890$qWd^P zvYu_0a12EB>b%c-rq{`LwIuZ-HL^CeLzG239zmkCgIty$?ar<5e$|WUXjGnF_te*# z-}SU~{aL==ExOv$r#%#{!2WzheNEOsFnC1cd2De!EA>X@$pE!0Ew2cecA9lks#4Mw zp|8EpG+SSi%o430nlo``hKsXl_bba!)__2?>V)D-t!{h4)dqBN-OpOKpOvnX5_kTn z79IU-N{3|B#UHir?Dj%yQKeINYsVdLS=FMXXH6-oloK!4I`vaIo}OY!lC!bHa;J!* z&Y0zpKS`tPxuTUi?FlbE856It7PT`eYhl8Eu@tvrI63pQeY+I5WL~oFBD?-{o9J{l zewfbMb>rCTk_^pIPlfhB!W{6NS?@D`DfhfikRDJHXI5X@*Yg@3wv`rljJw&CO<5Oj5+F;y1`|F@~J7rO^%A4zD-b-UV zLr)U)eTp)jy3ko9X>WImvpU9f(AaSEmEJ^^+v>L-&vNYIdDxPGA?+|C0mJln58YK- z{^Q3USX3cxmW4fhrN4``!O|XB$aXW4+Nfu@EWh}soW9z!l1Dnuq7KX3%H`t)+Tbg1 zD_4d^&oZ>yK%POcV+`aPZh&vhz3VT2Ve)HQd6pCPFAsP)ccpj08|^=IgbA&a*ZzaJ za69j#?ms+A-9H8GHNr1l*DQJbF)BvIKSJH}LBrv5)>?tnR=c@#K#I0ygL?IDe*aaP zKPvwFs9OpeOfvN*f=G@2b0GW$drEA|JVJi19^#-}__veS$`uuVc>gI{gk0xE>iNsY zeE0kl|G3oIa1MogY5!bViyfv)3#7l}zl&JXQ_?qYlLmo_2Vbrz}SR+0T9o zrun%~3BUheiC@4fT@7bD)H{Eqe`nV}joSR&zdXiWD1ZPe3w zz^M4ONBHXqZAYzQJ04u3ezTJGE)T!wTvYB=QtrN5t$&U-pMRG|b-54q&cBswyuWk* E1G+4h3jhEB literal 0 HcmV?d00001 diff --git a/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj new file mode 100644 index 0000000..c57a991 --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DE1149B7-6FE7-4A5B-9975-7164F086A603} + Exe + SimpleClassExample.Program + SimpleClassExample + SimpleClassExample + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleClassExample.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleClassExample.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj.user b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 5/SimpleClassExample/SimpleClassExample.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 6/BasicInheritance/BasicInheritance.sln b/Code/Chapter 6/BasicInheritance/BasicInheritance.sln new file mode 100644 index 0000000..a0e6e2b --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/BasicInheritance.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BasicInheritance", "BasicInheritance.vbproj", "{52A63402-20EF-4EDA-B60C-F4B910E9616E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {52A63402-20EF-4EDA-B60C-F4B910E9616E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52A63402-20EF-4EDA-B60C-F4B910E9616E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52A63402-20EF-4EDA-B60C-F4B910E9616E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52A63402-20EF-4EDA-B60C-F4B910E9616E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 6/BasicInheritance/BasicInheritance.suo b/Code/Chapter 6/BasicInheritance/BasicInheritance.suo new file mode 100644 index 0000000000000000000000000000000000000000..4fc68905a1d0dc28e7ab5f6f45254716bdb331bf GIT binary patch literal 20480 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj b/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj new file mode 100644 index 0000000..fd28c4d --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {52A63402-20EF-4EDA-B60C-F4B910E9616E} + Exe + BasicInheritance.Program + BasicInheritance + BasicInheritance + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + BasicInheritance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + BasicInheritance.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj.user b/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/BasicInheritance.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 6/BasicInheritance/Car.vb b/Code/Chapter 6/BasicInheritance/Car.vb new file mode 100644 index 0000000..1bb7635 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/Car.vb @@ -0,0 +1,24 @@ +' A simple Car class. +Public Class Car + Public ReadOnly MaxSpeed As Integer + Private currSpeed As Integer + + Public Sub New(ByVal max As Integer) + MaxSpeed = max + End Sub + Public Sub New() + MaxSpeed = 55 + End Sub + + Public Property Speed() As Integer + Get + Return currSpeed + End Get + Set(ByVal value As Integer) + currSpeed = value + If currSpeed > MaxSpeed Then + currSpeed = MaxSpeed + End If + End Set + End Property +End Class diff --git a/Code/Chapter 6/BasicInheritance/Cars.cd b/Code/Chapter 6/BasicInheritance/Cars.cd new file mode 100644 index 0000000..b48b91d --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/Cars.cd @@ -0,0 +1,25 @@ + + + + + + + Car.vb + AAACAAAAAAAAAAAAAAAEAAABAAAAAAAAAAAAAAAAAAA= + + + + + + MiniVan.vb + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + Program.vb + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= + + + \ No newline at end of file diff --git a/Code/Chapter 6/BasicInheritance/MiniVan.vb b/Code/Chapter 6/BasicInheritance/MiniVan.vb new file mode 100644 index 0000000..355b90f --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/MiniVan.vb @@ -0,0 +1,12 @@ +' This class cannot be extended! +Public NotInheritable Class MiniVan + Inherits Car + ' Here, we can now define members which are unique to + ' the MiniVan type. +End Class + +' Error! Cannot extend +' a class marked NotInheritable! +'Public Class BetterMiniVan +' Inherits MiniVan +'End Class diff --git a/Code/Chapter 6/BasicInheritance/My Project/Application.Designer.vb b/Code/Chapter 6/BasicInheritance/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 6/BasicInheritance/My Project/Application.myapp b/Code/Chapter 6/BasicInheritance/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 6/BasicInheritance/My Project/AssemblyInfo.vb b/Code/Chapter 6/BasicInheritance/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..dd35d39 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 6/BasicInheritance/My Project/Resources.Designer.vb b/Code/Chapter 6/BasicInheritance/My Project/Resources.Designer.vb new file mode 100644 index 0000000..16e4a33 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

    + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("BasicInheritance.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/BasicInheritance/My Project/Resources.resx b/Code/Chapter 6/BasicInheritance/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 6/BasicInheritance/My Project/Settings.Designer.vb b/Code/Chapter 6/BasicInheritance/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4d9d003 --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.BasicInheritance.My.MySettings + Get + Return Global.BasicInheritance.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/BasicInheritance/My Project/Settings.settings b/Code/Chapter 6/BasicInheritance/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 6/BasicInheritance/Program.vb b/Code/Chapter 6/BasicInheritance/Program.vb new file mode 100644 index 0000000..10de09a --- /dev/null +++ b/Code/Chapter 6/BasicInheritance/Program.vb @@ -0,0 +1,24 @@ +' The project illustrates the use of classical inheritance. + +Module Program + + Sub Main() + Console.WriteLine("***** Basic Inheritance *****") + ' Make a Car type. + Dim myCar As New Car(80) + myCar.Speed = 50 + Console.WriteLine("My car is going {0} MPH", _ + myCar.Speed) + + ' Now make a MiniVan + Dim myVan As New MiniVan() + myVan.Speed = 10 + Console.WriteLine("My van is going {0} MPH", _ + myVan.Speed) + + ' Error! Cannot access private data of the parent from an object! + ' myVan.currSpeed = 10 + Console.ReadLine() + End Sub + +End Module \ No newline at end of file diff --git a/Code/Chapter 6/Employees/Employee.Internal.vb b/Code/Chapter 6/Employees/Employee.Internal.vb new file mode 100644 index 0000000..5d805c5 --- /dev/null +++ b/Code/Chapter 6/Employees/Employee.Internal.vb @@ -0,0 +1,154 @@ +Public Class Employee + ' Field data. + Private empName As String + Private empID As Integer + Private currPay As Single + Private empAge As Integer + Private empSSN As String + Private Shared companyName As String + +#Region "Properties" + ''' + ''' Gets or sets the name of the employee. + ''' + ''' + ''' + ''' + Public Property Name() As String + Get + Return empName + End Get + Set(ByVal value As String) + empName = value + End Set + End Property + + ''' + ''' Gets or sets the ID of the employee. + ''' + ''' + ''' + ''' + Public Property ID() As Integer + Get + Return empID + End Get + Set(ByVal value As Integer) + empID = value + End Set + End Property + + ''' + ''' Gets or sets the current pay of the employee. + ''' + ''' + ''' + ''' + Public Property Pay() As Single + Get + Return currPay + End Get + Set(ByVal value As Single) + currPay = value + End Set + End Property + + ''' + ''' Gets or sets the age of the employee. + ''' + ''' + ''' + ''' + Public Property Age() As Integer + Get + Return empAge + End Get + Set(ByVal value As Integer) + empAge = value + End Set + End Property + ''' + ''' Read only access to SSN. + ''' Set this value with a constructor argument. + ''' + ''' + ''' + ''' + Public ReadOnly Property SocialSecurityNumber() As String + Get + Return empSSN + End Get + End Property + + ''' + ''' Set the company name of the employees. + ''' + ''' + ''' + ''' + Public Shared Property Company() As String + Get + Return companyName + End Get + Set(ByVal value As String) + companyName = value + End Set + End Property +#End Region + +#Region "Constructors" + ''' + ''' The default constructor. + ''' + ''' + Sub New() + End Sub + ''' + ''' A custom constrctor to set the state of an employee. + ''' + ''' + ''' + ''' + ''' + ''' + ''' + Sub New(ByVal name As String, ByVal age As Integer, _ + ByVal id As Integer, ByVal pay As Single, _ + ByVal ssn As String) + empName = name + empAge = age + empID = id + empSSN = ssn + currPay = pay + End Sub + ''' + ''' This shared constructor sets the shared companyName + ''' field. + ''' + ''' + Shared Sub New() + companyName = "Intertech Training" + End Sub +#End Region + +#Region "Getter / Setter for empName field" + '' Accessor (get method) + 'Public Function GetName() As String + ' Return empName + 'End Function + + '' Mutator (set method) + 'Public Sub SetName(ByVal name As String) + ' ' Remove any illegal characters (!,@,#,$,%), + ' ' check maximum length or case before making assignment. + ' empName = name + 'End Sub + 'Public Function get_SocialSecurityNumber() As String + ' Return empSSN + 'End Function + 'Public Sub set_SocialSecurityNumber(ByVal val As String) + ' empSSN = val + 'End Sub +#End Region + +End Class diff --git a/Code/Chapter 6/Employees/Employee.vb b/Code/Chapter 6/Employees/Employee.vb new file mode 100644 index 0000000..424e676 --- /dev/null +++ b/Code/Chapter 6/Employees/Employee.vb @@ -0,0 +1,64 @@ +''' +''' This class represents an employee. +''' +''' +Partial Public MustInherit Class Employee + +#Region "Functionality for the benefits package" + Public Class BenefitPackage + Public Enum BenefitPackageLevel + Standard + Gold + Platinum + End Enum + ' Assume we have other members that represent + ' 401K plans, dental/health benefits, and so on. + Public Function ComputePayDeduction() As Double + Return 125.0 + End Function + End Class + + ' Contain a BenefitPackage object. + Protected empBenefits As New BenefitPackage() + + ' Expose certain benefit behaviors of object. + Public Function GetBenefitCost() As Double + Return empBenefits.ComputePayDeduction() + End Function + ' Expose object through a custom property. + Public Property Benefits() As BenefitPackage + Get + Return empBenefits + End Get + Set(ByVal value As BenefitPackage) + empBenefits = value + End Set + End Property +#End Region + +#Region "Members" + ''' + ''' This method gives a pay increase to the + ''' employee. + ''' + ''' + ''' + Public Overridable Sub GiveBonus(ByVal amount As Single) + currPay += amount + End Sub + + + ''' + ''' This method displays the state of the object. + ''' + ''' + Public Overridable Sub DisplayStats() + Console.WriteLine("Name: {0}", empName) + Console.WriteLine("Age: {0}", empAge) + Console.WriteLine("SSN: {0}", empSSN) + Console.WriteLine("ID: {0}", empID) + Console.WriteLine("Pay: {0}", currPay) + End Sub +#End Region + +End Class diff --git a/Code/Chapter 6/Employees/Employees.cd b/Code/Chapter 6/Employees/Employees.cd new file mode 100644 index 0000000..071b9b7 --- /dev/null +++ b/Code/Chapter 6/Employees/Employees.cd @@ -0,0 +1,55 @@ + + + + + + + Employee.Internal.vb + AAAAAAAAIAgAggAAAEAIAEQQEAAAAACEAAAAhQAAAUA= + + + + + + + + + + + Employee.vb + + + + + + + + Employee.vb + + + + + + + + + + Manager.vb + AAAABAAAQAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAQA= + + + + + + SalesPerson.vb + AAAAAAAAAAAAAAAAAAAAAAAAEAAAgCAAAAAAAAAAAQA= + + + + + + PTSalesPerson.vb + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + \ No newline at end of file diff --git a/Code/Chapter 6/Employees/Employees.sln b/Code/Chapter 6/Employees/Employees.sln new file mode 100644 index 0000000..c132be9 --- /dev/null +++ b/Code/Chapter 6/Employees/Employees.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Employees", "Employees.vbproj", "{29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 6/Employees/Employees.suo b/Code/Chapter 6/Employees/Employees.suo new file mode 100644 index 0000000000000000000000000000000000000000..6a76b976bf6c845494fe0bcdb85eee56b7ac6ce6 GIT binary patch literal 23552 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 XJvlch`Z%(35DlO1H!+m)g_8ac+jBcC literal 0 HcmV?d00001 diff --git a/Code/Chapter 6/Employees/Employees.vbproj b/Code/Chapter 6/Employees/Employees.vbproj new file mode 100644 index 0000000..3d3b4c8 --- /dev/null +++ b/Code/Chapter 6/Employees/Employees.vbproj @@ -0,0 +1,140 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {29C6E0DA-EAF7-47C1-A4F3-C4EA84CD77B1} + Exe + Employees.Program + Employees + Employees + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Employees.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Employees.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 6/Employees/Employees.vbproj.user b/Code/Chapter 6/Employees/Employees.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 6/Employees/Employees.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 6/Employees/Manager.vb b/Code/Chapter 6/Employees/Manager.vb new file mode 100644 index 0000000..d442a94 --- /dev/null +++ b/Code/Chapter 6/Employees/Manager.vb @@ -0,0 +1,40 @@ +' Managers need to know their number of stock options. +Public Class Manager + Inherits Employee + Private numberOfOptions As Integer + Public Property StockOptions() As Integer + Get + Return numberOfOptions + End Get + Set(ByVal value As Integer) + numberOfOptions = value + End Set + End Property + +#Region "Constructors" + Public Sub New() + End Sub + ' This time, use the VB 2005 "MyBase" keyword to call a custom + ' constructor on the base class. + Public Sub New(ByVal fullName As String, ByVal empAge As Integer, _ + ByVal empID As Integer, ByVal currPay As Single, _ + ByVal ssn As String, ByVal numbOfOpts As Integer) + ' Pass these arguments to the parent's constructor. + MyBase.New(fullName, empAge, empID, currPay, ssn) + + ' This belongs with us! + numberOfOptions = numbOfOpts + End Sub +#End Region + + Public Overrides Sub GiveBonus(ByVal amount As Single) + MyBase.GiveBonus(amount) + Dim r As New Random() + numberOfOptions += r.Next(500) + End Sub + + Public Overrides Sub DisplayStats() + MyBase.DisplayStats() + Console.WriteLine("Number of Stock Options: {0}", numberOfOptions) + End Sub +End Class diff --git a/Code/Chapter 6/Employees/My Project/Application.Designer.vb b/Code/Chapter 6/Employees/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 6/Employees/My Project/Application.myapp b/Code/Chapter 6/Employees/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 6/Employees/My Project/AssemblyInfo.vb b/Code/Chapter 6/Employees/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d4a6e40 --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 6/Employees/My Project/Resources.Designer.vb b/Code/Chapter 6/Employees/My Project/Resources.Designer.vb new file mode 100644 index 0000000..49641fe --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Employees.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/Employees/My Project/Resources.resx b/Code/Chapter 6/Employees/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 6/Employees/My Project/Settings.Designer.vb b/Code/Chapter 6/Employees/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4623dd6 --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Employees.My.MySettings + Get + Return Global.Employees.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/Employees/My Project/Settings.settings b/Code/Chapter 6/Employees/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 6/Employees/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 6/Employees/PTSalesPerson.vb b/Code/Chapter 6/Employees/PTSalesPerson.vb new file mode 100644 index 0000000..d7556bc --- /dev/null +++ b/Code/Chapter 6/Employees/PTSalesPerson.vb @@ -0,0 +1,11 @@ +Public NotInheritable Class PTSalesPerson + Inherits SalesPerson + + Public Sub New(ByVal fullName As String, ByVal empAge As Integer, _ + ByVal empID As Integer, ByVal currPay As Single, _ + ByVal ssn As String, ByVal numbOfSales As Integer) + ' Pass these arguments to the parent's constructor. + MyBase.New(fullName, empAge, empID, currPay, ssn, numbOfSales) + End Sub + ' Assume other members here... +End Class diff --git a/Code/Chapter 6/Employees/Program.vb b/Code/Chapter 6/Employees/Program.vb new file mode 100644 index 0000000..746d3fb --- /dev/null +++ b/Code/Chapter 6/Employees/Program.vb @@ -0,0 +1,68 @@ +' This example illustrates the details of building +' class heirarchies. + +' We are enabling this option to ensure that we must +' explicitly cast +Option Strict On + +Module Program + Sub Main() + Console.WriteLine("***** The Employee Class Hierarchy *****") + Console.WriteLine() + ' A better bonus system! + Dim chucky As New Manager("Chucky", 50, 92, 100000, "333-23-2322", 9000) + chucky.GiveBonus(300) + chucky.DisplayStats() + Console.WriteLine() + + Dim fran As New SalesPerson("Fran", 43, 93, 3000, "932-32-3232", 31) + fran.GiveBonus(200) + fran.DisplayStats() + Console.WriteLine() + + ' This method fires the staff ;-) + FunWithCasting() + Console.ReadLine() + End Sub + +#Region "Helper methods" + Sub FunWithCasting() + ' A Manager "is-a" System.Object. + Dim frank As Object = _ + New Manager("Frank Zappa", 9, 3000, 40000, "111-11-1111", 5) + + ' A Manager "is-a" Employee too. + Dim moonUnit As Employee = New Manager("MoonUnit Zappa", 2, 3001, _ + 20000, "101-11-1321", 1) + + ' A PTSalesPerson "is-a" SalesPerson. + Dim jill As SalesPerson = New PTSalesPerson("Jill", 834, 3002, _ + 100000, "111-12-1119", 90) + + ' Streamline the staff. + FireThisPerson(moonUnit) ' "moonUnit" was declared as an Employee. + FireThisPerson(jill) ' "jill" was declared as a SalesPerson. + + ' OK even with Option Strict enabled. + FireThisPerson(CType(frank, Manager)) + End Sub + + Public Sub FireThisPerson(ByVal emp As Employee) + If TypeOf emp Is SalesPerson Then + Console.WriteLine("Lost a sales person named {0}", emp.Name) + Console.WriteLine("{0} made {1} sale(s)...", emp.Name, _ + CType(emp, SalesPerson).SalesNumber) + Console.WriteLine() + End If + If TypeOf emp Is Manager Then + Console.WriteLine("Lost a suit named {0}", emp.Name) + Console.WriteLine("{0} had {1} stock options...", emp.Name, _ + CType(emp, Manager).StockOptions) + Console.WriteLine() + End If + End Sub +#End Region + +End Module + + diff --git a/Code/Chapter 6/Employees/SalesPerson.vb b/Code/Chapter 6/Employees/SalesPerson.vb new file mode 100644 index 0000000..5d0c55c --- /dev/null +++ b/Code/Chapter 6/Employees/SalesPerson.vb @@ -0,0 +1,52 @@ +' Salespeople need to know their number of sales. +Public Class SalesPerson + Inherits Employee + Private numberOfSales As Integer + Public Property SalesNumber() As Integer + Get + Return numberOfSales + End Get + Set(ByVal value As Integer) + numberOfSales = value + End Set + End Property + +#Region "Constructors" + Public Sub New() + End Sub + + ' As a general rule, all subclasses should explicitly call an appropriate + ' base class constructor. + Public Sub New(ByVal fullName As String, ByVal empAge As Integer, _ + ByVal empID As Integer, ByVal currPay As Single, _ + ByVal ssn As String, ByVal numbOfSales As Integer) + ' Pass these arguments to the parent's constructor. + MyBase.New(fullName, empAge, empID, currPay, ssn) + + ' This belongs with us! + numberOfSales = numbOfSales + End Sub +#End Region + + ' A salesperson's bonus is influenced by the number of sales. + Public NotOverridable Overrides Sub GiveBonus(ByVal amount As Single) + Dim salesBonus As Integer = 0 + If numberOfSales >= 0 AndAlso numberOfSales <= 100 Then + salesBonus = 10 + Else + If numberOfSales >= 101 AndAlso numberOfSales <= 200 Then + salesBonus = 15 + Else + salesBonus = 20 + End If + End If + MyBase.GiveBonus(amount * salesBonus) + End Sub + + Public Overrides Sub DisplayStats() + MyBase.DisplayStats() + Console.WriteLine("Number of Sales: {0}", numberOfSales) + End Sub + +End Class + diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Application.Designer.vb b/Code/Chapter 6/ObjectOverrides/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Application.myapp b/Code/Chapter 6/ObjectOverrides/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 6/ObjectOverrides/My Project/AssemblyInfo.vb b/Code/Chapter 6/ObjectOverrides/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..736a8a0 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Resources.Designer.vb b/Code/Chapter 6/ObjectOverrides/My Project/Resources.Designer.vb new file mode 100644 index 0000000..422465b --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ObjectOverrides.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Resources.resx b/Code/Chapter 6/ObjectOverrides/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Settings.Designer.vb b/Code/Chapter 6/ObjectOverrides/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c88d9a0 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ObjectOverrides.My.MySettings + Get + Return Global.ObjectOverrides.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/ObjectOverrides/My Project/Settings.settings b/Code/Chapter 6/ObjectOverrides/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 6/ObjectOverrides/ObjectOverrides.sln b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.sln new file mode 100644 index 0000000..828325f --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ObjectOverrides", "ObjectOverrides.vbproj", "{4A50CBA9-B214-4B8B-8B19-478E83DABC7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4A50CBA9-B214-4B8B-8B19-478E83DABC7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A50CBA9-B214-4B8B-8B19-478E83DABC7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A50CBA9-B214-4B8B-8B19-478E83DABC7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4A50CBA9-B214-4B8B-8B19-478E83DABC7D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 6/ObjectOverrides/ObjectOverrides.suo b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.suo new file mode 100644 index 0000000000000000000000000000000000000000..b2d852a19a4c22deaf262e45923916a8ca0fce12 GIT binary patch literal 20480 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 P8Ry=PdSmB*;oW}$_YbSB literal 0 HcmV?d00001 diff --git a/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj new file mode 100644 index 0000000..0d3e740 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj @@ -0,0 +1,135 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4A50CBA9-B214-4B8B-8B19-478E83DABC7D} + Exe + ObjectOverrides.Program + ObjectOverrides + ObjectOverrides + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + ObjectOverrides.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ObjectOverrides.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj.user b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj.user new file mode 100644 index 0000000..26d4d5b --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/ObjectOverrides.vbproj.user @@ -0,0 +1,17 @@ + + + + + + + + + + + + + en-US + false + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 6/ObjectOverrides/Person.vb b/Code/Chapter 6/ObjectOverrides/Person.vb new file mode 100644 index 0000000..312f99e --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/Person.vb @@ -0,0 +1,53 @@ +' Remember! Person extends Object. +Class Person + Public Sub New(ByVal firstName As String, ByVal lastName As String, _ + ByVal age As Byte) + fName = firstName + lName = lastName + personAge = age + End Sub + Sub New() + End Sub + + ' Public only for simplicity. Properties and Private data + ' would obviously be perferred. + Public fName As String + Public lName As String + Public personAge As Byte + +#Region "System.Object overrides" + Public Overrides Function ToString() As String + Dim myState As String + myState = String.Format("[First Name: {0}; Last Name: {1}; Age: {2}]", _ + fName, lName, personAge) + Return myState + End Function + + 'Public Overrides Function Equals(ByVal obj As Object) As Boolean + ' If TypeOf obj Is Person AndAlso obj IsNot Nothing Then + ' Dim temp As Person = CType(obj, Person) + ' If temp.fName = Me.fName AndAlso _ + ' temp.lName = Me.fName AndAlso _ + ' temp.personAge = Me.personAge Then + ' Return True + ' Else + ' Return False + ' End If + ' Return False + ' End If + 'End Function + + Public Overrides Function Equals(ByVal obj As Object) As Boolean + ' No need to cast 'obj' to a Person anymore, + ' as everyting has a ToString() method. + Return obj.ToString = Me.ToString() + End Function + + ' Return a hash code based on the person's ToString() value. + Public Overrides Function GetHashCode() As Integer + Return Me.ToString().GetHashCode() + End Function + +#End Region + +End Class diff --git a/Code/Chapter 6/ObjectOverrides/Program.vb b/Code/Chapter 6/ObjectOverrides/Program.vb new file mode 100644 index 0000000..d7f7a45 --- /dev/null +++ b/Code/Chapter 6/ObjectOverrides/Program.vb @@ -0,0 +1,49 @@ +' The example illustrates the role of +' the top-most parent class in .NET, +' System.Object + +Module Program + Sub Main() + Console.WriteLine("***** Fun with System.Object *****") + Console.WriteLine() + + ' NOTE: We want these to be identical to test + ' the Equals() and GetHashCode() methods. + Dim p1 As New Person("Homer", "Simpson", 50) + Dim p2 As New Person("Homer", "Simpson", 50) + + ' Get stringified version of objects. + Console.WriteLine("p1.ToString() = {0}", p1.ToString()) + Console.WriteLine("p2.ToString() = {0}", p2.ToString()) + + ' Test Overridden Equals() + Console.WriteLine("p1 = p2?: {0}", p1.Equals(p2)) + + ' Test hash codes. + Console.WriteLine("Same hash codes?: {0}", _ + p1.GetHashCode() = p2.GetHashCode()) + Console.WriteLine() + + ' Change age of p2 and test again. + p2.personAge = 45 + Console.WriteLine("p1.ToString() = {0}", p1.ToString()) + Console.WriteLine("p2.ToString() = {0}", p2.ToString()) + Console.WriteLine("p1 = p2?: {0}", p1.Equals(p2)) + Console.WriteLine("Same hash codes?: {0}", _ + p1.GetHashCode() = p2.GetHashCode()) + + Console.WriteLine() + SharedMembersOfObject() + Console.ReadLine() + End Sub + + Sub SharedMembersOfObject() + ' Shared members of System.Object. + Dim p3 As New Person("Sally", "Jones", 4) + Dim p4 As New Person("Sally", "Jones", 4) + Console.WriteLine("P3 and P4 have same state: {0}", Object.Equals(p3, p4)) + Console.WriteLine("P3 and P4 are pointing to same object: {0}", _ + Object.ReferenceEquals(p3, p4)) + End Sub +End Module + diff --git a/Code/Chapter 6/Shapes/My Project/Application.Designer.vb b/Code/Chapter 6/Shapes/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 6/Shapes/My Project/Application.myapp b/Code/Chapter 6/Shapes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 6/Shapes/My Project/AssemblyInfo.vb b/Code/Chapter 6/Shapes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..63daae2 --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 6/Shapes/My Project/Resources.Designer.vb b/Code/Chapter 6/Shapes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..d27017f --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Shapes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/Shapes/My Project/Resources.resx b/Code/Chapter 6/Shapes/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 6/Shapes/My Project/Settings.Designer.vb b/Code/Chapter 6/Shapes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..48c24eb --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Shapes.My.MySettings + Get + Return Global.Shapes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 6/Shapes/My Project/Settings.settings b/Code/Chapter 6/Shapes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 6/Shapes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 6/Shapes/MyShapes.vb b/Code/Chapter 6/Shapes/MyShapes.vb new file mode 100644 index 0000000..a355677 --- /dev/null +++ b/Code/Chapter 6/Shapes/MyShapes.vb @@ -0,0 +1,41 @@ +' If we did not implement the MustOverride Draw() method, Circle would also be +' considered abstract, and would have to be marked MustInherit! +Public Class Circle + Inherits Shape + Public Sub New() + End Sub + Public Sub New(ByVal name As String) + MyBase.New(name) + End Sub + Public Overrides Sub Draw() + Console.WriteLine("Drawing {0} the Circle", shapeName) + End Sub +End Class + + +' Hexagon DOES override Draw(). +Public Class Hexagon + Inherits Shape + Public Sub New() + End Sub + Public Sub New(ByVal name As String) + MyBase.New(name) + End Sub + Public Overrides Sub Draw() + Console.WriteLine("Drawing {0} the Hexagon", shapeName) + End Sub +End Class + +' This class extends Circle and hides the inherited Draw() method. +Public Class ThreeDCircle + Inherits Circle + + ' Hide the shapeName field above me. + Protected Shadows shapeName As String + + ' Hide any Draw() implementation above me. + Public Shadows Sub Draw() + Console.WriteLine("Drawing a 3D Circle") + End Sub +End Class + diff --git a/Code/Chapter 6/Shapes/Program.vb b/Code/Chapter 6/Shapes/Program.vb new file mode 100644 index 0000000..2f4adb3 --- /dev/null +++ b/Code/Chapter 6/Shapes/Program.vb @@ -0,0 +1,26 @@ +' This example illustrates how to construct a polymorphic interface +' in a class heirarchy. + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Polymorphism *****") + Console.WriteLine() + + ' Make an array of Shape compatible objects. + Dim myShapes() As Shape = {New Hexagon(), New Circle(), _ + New Hexagon("Mick"), New Circle("Beth"), _ + New Hexagon("Linda")} + + ' Loop over each items and interact with the + ' polymorphic interface. + For Each s As Shape In myShapes + s.Draw() + Next + + ' Fun with shadowing. + Dim o As ThreeDCircle = New ThreeDCircle() + o.Draw() + CType(o, Circle).Draw() + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 6/Shapes/Shape.vb b/Code/Chapter 6/Shapes/Shape.vb new file mode 100644 index 0000000..bfa12ae --- /dev/null +++ b/Code/Chapter 6/Shapes/Shape.vb @@ -0,0 +1,22 @@ +' The abstract base class of the hierarchy. +Public MustInherit Class Shape + Protected shapeName As String + + Public Sub New() + shapeName = "NoName" + End Sub + Public Sub New(ByVal s As String) + shapeName = s + End Sub + + Public MustOverride Sub Draw() + + Public Property PetName() As String + Get + Return shapeName + End Get + Set(ByVal value As String) + shapeName = value + End Set + End Property +End Class diff --git a/Code/Chapter 6/Shapes/Shapes.cd b/Code/Chapter 6/Shapes/Shapes.cd new file mode 100644 index 0000000..1e6152c --- /dev/null +++ b/Code/Chapter 6/Shapes/Shapes.cd @@ -0,0 +1,32 @@ + + + + + + AAAAIAAAAAAAAgAAAAAAAAAAAAABAAAAAAAAAAAAAAA= + Shape.vb + + + + + + AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + MyShapes.vb + + + + + + AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + MyShapes.vb + + + + + + AAAAAAAAAAAAAgAAAAAAAAAAAAABAAAAAAAAAAAAAAA= + MyShapes.vb + + + + \ No newline at end of file diff --git a/Code/Chapter 6/Shapes/Shapes.sln b/Code/Chapter 6/Shapes/Shapes.sln new file mode 100644 index 0000000..8bbafcf --- /dev/null +++ b/Code/Chapter 6/Shapes/Shapes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Shapes", "Shapes.vbproj", "{BF51C036-2394-4E4C-BA60-2439A87FE6A1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BF51C036-2394-4E4C-BA60-2439A87FE6A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF51C036-2394-4E4C-BA60-2439A87FE6A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF51C036-2394-4E4C-BA60-2439A87FE6A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF51C036-2394-4E4C-BA60-2439A87FE6A1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 6/Shapes/Shapes.suo b/Code/Chapter 6/Shapes/Shapes.suo new file mode 100644 index 0000000000000000000000000000000000000000..61864c2e9b3775d86b2cda7050b4f127cf554544 GIT binary patch literal 21504 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 S3_I85$@ANPACs-8AO8p85)T6a literal 0 HcmV?d00001 diff --git a/Code/Chapter 6/Shapes/Shapes.vbproj b/Code/Chapter 6/Shapes/Shapes.vbproj new file mode 100644 index 0000000..0089107 --- /dev/null +++ b/Code/Chapter 6/Shapes/Shapes.vbproj @@ -0,0 +1,137 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {BF51C036-2394-4E4C-BA60-2439A87FE6A1} + Exe + Shapes.Program + Shapes + Shapes + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + Shapes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Shapes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 6/Shapes/Shapes.vbproj.user b/Code/Chapter 6/Shapes/Shapes.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 6/Shapes/Shapes.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 7/CustomException/Car.vb b/Code/Chapter 7/CustomException/Car.vb new file mode 100644 index 0000000..0501739 --- /dev/null +++ b/Code/Chapter 7/CustomException/Car.vb @@ -0,0 +1,58 @@ +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As Radio = New Radio() + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If delta < 0 Then + Throw New ArgumentOutOfRangeException() + End If + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New CarIsDeadException(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +End Class diff --git a/Code/Chapter 7/CustomException/CarIsDeadException.vb b/Code/Chapter 7/CustomException/CarIsDeadException.vb new file mode 100644 index 0000000..7475269 --- /dev/null +++ b/Code/Chapter 7/CustomException/CarIsDeadException.vb @@ -0,0 +1,54 @@ +Imports System.Runtime.Serialization + +#Region "CarIsDeadException take one" +'Public Class CarIsDeadException +' Inherits ApplicationException + +' ' Default error message. +' Private messageDetails As String = "Car Error" + +' ' Constructors. +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' messageDetails = msg +' End Sub + +' ' Override the Exception.Message property. +' Public Overrides ReadOnly Property Message() As String +' Get +' Return String.Format("Car Error Message: {0}", messageDetails) +' End Get +' End Property +'End Class +#End Region + +#Region "CarIsDeadException take two" +'Public Class CarIsDeadException +' Inherits ApplicationException +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' MyBase.New(msg) +' End Sub +'End Class +#End Region + +#Region "CarIsDeadException take three" + _ +Public Class CarIsDeadException + Inherits ApplicationException + Public Sub New() + End Sub + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + Public Sub New(ByVal message As String, ByVal inner As System.Exception) + MyBase.New(message, inner) + End Sub + Protected Sub New(ByVal info As SerializationInfo, _ + ByVal context As StreamingContext) + MyBase.New(info, context) + End Sub +End Class +#End Region diff --git a/Code/Chapter 7/CustomException/CustomException.sln b/Code/Chapter 7/CustomException/CustomException.sln new file mode 100644 index 0000000..09307a7 --- /dev/null +++ b/Code/Chapter 7/CustomException/CustomException.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomException", "CustomException.vbproj", "{547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 7/CustomException/CustomException.suo b/Code/Chapter 7/CustomException/CustomException.suo new file mode 100644 index 0000000000000000000000000000000000000000..c477f93d6d1e188b95e1139f58882c7c649bd2d0 GIT binary patch literal 20992 zcmeI4UvS)26~}*Rp@94;P^?(7ENP1%WKGhvv;->IO;SozT9UM&ZpCExmo$Gj>~0IS z=>v#Q{vCaQ7e|;uhe3uJ)N%Yj%7X(agAY2+=nMMbIE;!u;9DC%-+O;I`+xVBv}8Bh zn>oMx+u!g0?z#8ebIv{I+onx32+(kKHzfTO5h6MDuAK))&ti7Hv%^R z;(_bP-w%8Q_yBM{@Ihb`@FCzP;KRUXAOc(qYyet;Ex=Y_8=$%ztRhmb%BBu_Y5sDI zN1r!Kp7BmH0^!p}IL38cV_YlUv-j7Z|Kh$^Th^+On1OT%jA?Ju+XwbB?)tpP?2C}s zjc6c;UwO#S3=gYphqu$~@?zxeTz7kITsygM=dOdlUhW=VY~?VmJ?>?plS_AkU$P*% z2#dc^UoH**5ST{*-=X)w-?G&HZ{+K*N?1uw&Xh|JNdBb<_66^p4shk92h>;fS$aS^ zz{#B zfKFgL&;{%Ob^><*yMW!moj^Bm7jQSQ2j~M-zaYka9Ow<6^^@-f4g|mN3-W;=zn}ad za0qw+7zBm@)peNs2=E~A5TKFzB=9L90jSKU$sYzj6Z{?}PXejn_Zayka159To=uTY z12e!ZkOt-e)t4d90=eM#3Gzn)Ns`{zN^kG}NAlTizw7{V%Tn{n{UIy5zM@Vu%$=E#Q$pnTX$+IGpt}*+kE5D&s#I8P25r>8wASIB+r& zOQ)x@iTIXCSMFG(FEx>yNY5tX>6D*{9~+s=`I*QaiTLqsEf#?ylM6)6?Q3QVP_INRGrJBeSVU?wB8m-rqMIIW#hz8%t+q zBHJ@5P@g}nL5J1<(iFPod^n6g$$C@X0GuYhc9^S=mUGX=SGCes^pECv*$d*cT4mik zwOKZXlGFb_5|Bdzeeh3s4AxUiTG!SQ&Ofch}^deY5l7}hioe0Mv>0q_eIPDxUebT5*({54Z0QX7Wr1_Pm-?E*L@GMJTM2iSxm*YOgvoybU@y!wH zO_;B8l6&6#dyG-CJWUVA3_gd~{caR~+p3lCzqCmbdT4CKk@-|@#ER)x?fXEK z^3`#7F3(g^*zebQEiDxPn{+zP_f;3)wH9@-u<*v3#Zb+zqhGK#8YLnL-LF~vU8eu? z`sXBkqZv_FXZ5rk{U@8$)mW&T+DMlgR zL`ho5YNS~sy?IG5woIhQG#B~ins3c={IBBvr{T%t^x4*2*ylswlr>b#7HFsc^20R# zVf(Mx%-0RW$k&5W#6cwaO-gTkr|a5x&i-@3J$Kwv`dnp2_XD(FbHIerd?SpV^xxc~ zZ6~j5t>NfynHE$d7JUZcX4gwZ5$u3pSxb(v@^5Bc-8^5 zo3D3!rVCS=K-L%y6&S#BLd`%x(%R-W! zJ`aXjGiS%4_FG$N-A;`L+k8D%fyT(+Qq2Ex!=vT z3z_RD=F|tA_8y4Heoh+edB#Yh=1gZjpMbk6SJbw8CKcH8#{++zb%9UP8Ars=r2(zW^U1=U^9oggM zovtPY_o2l( zT6WMJZItCD|IE&og^^|&Tp>CA6X9K0{kM&>-wx_J3^xhu2>c?RFP@k4c2-clEJOdE zlm5FGE=?KSv-EkI*7VaF&6}dadyoI1nfs<`#jJtx0?PODq+Se6@wW|7Me&rd^uL9& zR|f%z33P|X-8YtSapWU`wV`p5AM5y5e#!Fz-!nrFBiCldhF@$_o~b;uD5BPQDi0xfwWL#gvlXkv+8Z;5ixjm} zJWBSFW*c2=rP8m%>U~$|4d|a1en_2!)j#q=q=S^)I)ht(7{Yqc9Hbbuyn=cf*v&t} ztz>JheZ7a*f%+rHAZ%0kO`3%sH4?a#6$sh?!h0iihQ(iKf7jCg&PS@%8{+RR@~5Pi z!{YCu?CU|L54|Z~Uw&%5{Z&s&Dogm8Q~#cj3n-c?EtdkB#hFpHz0#ywuKEl!gq$S< zt4nKM*6vZ1Vcgr#wcc(J*&mjI_8NwcVfkPCFX|=9Un_+a(+fL}k5Kk6LB+M?PkTb@ zrRCV4<5c>KpyFEiwRfRjLjKMED>nx9%Ip2(z)ypM@72mpWvQFL@96hRrOrhcg9fo} zp`|!Pb#5Vwc|kSpA5uDorZTadDb)jX{|MG!(k(hdToal#ea zwxnE7^Bb7j2xusTv7Ki!3=}|(6U>l+>30|Rr=fpG=k~50JMl!c3TPvW-AGlp*#+1G zY2?qJKr6(VFU7@ouR@KNU)go`>1V%o=1R?ivSY-Z#qrGA5e*lI3LA;GQ7`Q)>tx6} z84AnZJto%F!2oGDTAZgEv>4FI-3~m0UVe4po$h3?6dCX5FDzE|uJZU@YF5sxNAbEV z#FZ*XG(HpMU&M)%iy&zCHNZ^0KvZoR4Tn8Pi7lMX~tM zq3M_AhYR;_yBACAQ8r?ez!Kd~pLft_d97p6&hA5qQbsh~j_stVm?G8o~PM)-F{`$C|dK)*`T8-Xye@Zy-BIE7{t?Gm39q??dliO_KGJS-%^>QEG}A$51jYO{Pxx39nx97&cjaq`b{}t2rkv(kt%_@IRx13y zbY$&m$<-Pazlh#7f7=V=2l*WpflX#3SqccxU;J0Q7xu}*y|6#gNdc20iTwSSFT@;? z^ul8gbtT{EhiK!urM730DDf;@%0VQBe`Xr*8^=uJpU^(_AJMd`e!-LHGW*aAm;XVmil&D6ISHJol48%dn@KxxLYFc z1x-Pk##^`Hd#6*MIsR|A--{U&l43q_e69W9#hm3@EKbr+ z)6%yS_(eLet+Ps!pCq};ZlrAaS;=To1XE{Kq(748i*nrB6*lWVV&0bH);uX*x6vne zURt>IpGb<^S-EVK_^~)c66#tZ>!|QsN10}q_;Tv0&(aCf14^PyW4XP&jgGqt+t@sM zLMQtRdBM(jrCO!1?TwJ(QjRTbPa}1|qA11GvvY%MpCl^}L-9V=qQ$2d(#lal_Wu*0 z`y8Nsc^A_E7X_;Q=Y?Xc)vKIBK$b&VtOnI-GP-4~?;vv1 + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {547CAE6C-F6F5-4B84-AC0F-D503BA1A07C9} + Exe + CustomException.Program + CustomException + CustomException + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + CustomException.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomException.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 7/CustomException/CustomException.vbproj.user b/Code/Chapter 7/CustomException/CustomException.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 7/CustomException/CustomException.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 7/CustomException/My Project/Application.Designer.vb b/Code/Chapter 7/CustomException/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 7/CustomException/My Project/Application.myapp b/Code/Chapter 7/CustomException/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 7/CustomException/My Project/AssemblyInfo.vb b/Code/Chapter 7/CustomException/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..83539ae --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 7/CustomException/My Project/Resources.Designer.vb b/Code/Chapter 7/CustomException/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8ee8f4f --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomException.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/CustomException/My Project/Resources.resx b/Code/Chapter 7/CustomException/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 7/CustomException/My Project/Settings.Designer.vb b/Code/Chapter 7/CustomException/My Project/Settings.Designer.vb new file mode 100644 index 0000000..755d2b4 --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomException.My.MySettings + Get + Return Global.CustomException.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/CustomException/My Project/Settings.settings b/Code/Chapter 7/CustomException/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 7/CustomException/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 7/CustomException/Program.vb b/Code/Chapter 7/CustomException/Program.vb new file mode 100644 index 0000000..b8d8f81 --- /dev/null +++ b/Code/Chapter 7/CustomException/Program.vb @@ -0,0 +1,47 @@ +' This example illustrates how to throw, catch and interact with +' custom exceptions. + +Module Program + Sub Main() + Console.WriteLine("***** Simple Exception Example *****") + Console.WriteLine("=> Creating a car and stepping on it!") + Dim myCar As New Car("Zippy", 20) + myCar.CrankTunes(True) + + Try + For i As Integer = 0 To 10 + myCar.Accelerate(10) + Next + Catch ex As ArgumentOutOfRangeException + Console.WriteLine(ex.Message) + Catch ex As CarIsDeadException + Console.WriteLine("*** Error! ***") + Console.WriteLine("Member name: {0}", ex.TargetSite) + Console.WriteLine("Class defining member: {0}", _ + ex.TargetSite.DeclaringType) + Console.WriteLine("Member type: {0}", ex.TargetSite.MemberType) + Console.WriteLine("Message: {0}", ex.Message) + Console.WriteLine("Source: {0}", ex.Source) + Console.WriteLine("Stack: {0}", ex.StackTrace) + Console.WriteLine("Help Link: {0}", ex.HelpLink) + + ' By default, the data field is empty, so check for Nothing. + Console.WriteLine("-> Custom Data:") + If (ex.Data IsNot Nothing) Then + For Each de As DictionaryEntry In ex.Data + Console.WriteLine("-> {0} : {1}", de.Key, de.Value) + Next + End If + Catch ex As Exception + Console.WriteLine("Some other exception happened!") + Console.WriteLine(ex.Message) + Finally + ' This will always execute, error or not. + myCar.CrankTunes(False) + End Try + + ' The error has been handled, processing continues with the next statement. + Console.WriteLine("***** Out of exception logic *****") + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 7/CustomException/Radio.vb b/Code/Chapter 7/CustomException/Radio.vb new file mode 100644 index 0000000..cdd0154 --- /dev/null +++ b/Code/Chapter 7/CustomException/Radio.vb @@ -0,0 +1,9 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class diff --git a/Code/Chapter 7/SimpleException/Car.vb b/Code/Chapter 7/SimpleException/Car.vb new file mode 100644 index 0000000..52d7716 --- /dev/null +++ b/Code/Chapter 7/SimpleException/Car.vb @@ -0,0 +1,55 @@ +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As New Radio() + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New Exception(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +End Class diff --git a/Code/Chapter 7/SimpleException/My Project/Application.Designer.vb b/Code/Chapter 7/SimpleException/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 7/SimpleException/My Project/Application.myapp b/Code/Chapter 7/SimpleException/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 7/SimpleException/My Project/AssemblyInfo.vb b/Code/Chapter 7/SimpleException/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..83a74f9 --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 7/SimpleException/My Project/Resources.Designer.vb b/Code/Chapter 7/SimpleException/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f72b8dc --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleException.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/SimpleException/My Project/Resources.resx b/Code/Chapter 7/SimpleException/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 7/SimpleException/My Project/Settings.Designer.vb b/Code/Chapter 7/SimpleException/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f68dbc7 --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleException.My.MySettings + Get + Return Global.SimpleException.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/SimpleException/My Project/Settings.settings b/Code/Chapter 7/SimpleException/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 7/SimpleException/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 7/SimpleException/Program.vb b/Code/Chapter 7/SimpleException/Program.vb new file mode 100644 index 0000000..d070a36 --- /dev/null +++ b/Code/Chapter 7/SimpleException/Program.vb @@ -0,0 +1,38 @@ +' This example illustrates how to throw, catch and interact with +' exceptions. +Module Program + Sub Main() + Console.WriteLine("***** Simple Exception Example *****") + Console.WriteLine("=> Creating a car and stepping on it!") + Dim myCar As New Car("Zippy", 20) + myCar.CrankTunes(True) + + Try + For i As Integer = 0 To 10 + myCar.Accelerate(10) + Next + Catch ex As Exception + Console.WriteLine("*** Error! ***") + Console.WriteLine("Member name: {0}", ex.TargetSite) + Console.WriteLine("Class defining member: {0}", _ + ex.TargetSite.DeclaringType) + Console.WriteLine("Member type: {0}", ex.TargetSite.MemberType) + Console.WriteLine("Message: {0}", ex.Message) + Console.WriteLine("Source: {0}", ex.Source) + Console.WriteLine("Stack: {0}", ex.StackTrace) + Console.WriteLine("Help Link: {0}", ex.HelpLink) + + ' By default, the data field is empty, so check for Nothing. + Console.WriteLine("-> Custom Data:") + If (ex.Data IsNot Nothing) Then + For Each de As DictionaryEntry In ex.Data + Console.WriteLine("-> {0} : {1}", de.Key, de.Value) + Next + End If + End Try + + ' The error has been handled, processing continues with the next statement. + Console.WriteLine("***** Out of exception logic *****") + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 7/SimpleException/Radio.vb b/Code/Chapter 7/SimpleException/Radio.vb new file mode 100644 index 0000000..e1075fc --- /dev/null +++ b/Code/Chapter 7/SimpleException/Radio.vb @@ -0,0 +1,10 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class + diff --git a/Code/Chapter 7/SimpleException/SimpleException.sln b/Code/Chapter 7/SimpleException/SimpleException.sln new file mode 100644 index 0000000..d2e20b5 --- /dev/null +++ b/Code/Chapter 7/SimpleException/SimpleException.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleException", "SimpleException.vbproj", "{C05FE71C-CB73-4A4E-99C2-94CB9549EC2C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C05FE71C-CB73-4A4E-99C2-94CB9549EC2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C05FE71C-CB73-4A4E-99C2-94CB9549EC2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C05FE71C-CB73-4A4E-99C2-94CB9549EC2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C05FE71C-CB73-4A4E-99C2-94CB9549EC2C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 7/SimpleException/SimpleException.suo b/Code/Chapter 7/SimpleException/SimpleException.suo new file mode 100644 index 0000000000000000000000000000000000000000..9197243a2f72f52579b25ed1c61459d4dc60e4c9 GIT binary patch literal 18432 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 7/SimpleException/SimpleException.vbproj b/Code/Chapter 7/SimpleException/SimpleException.vbproj new file mode 100644 index 0000000..3ff377b --- /dev/null +++ b/Code/Chapter 7/SimpleException/SimpleException.vbproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {C05FE71C-CB73-4A4E-99C2-94CB9549EC2C} + Exe + SimpleException.Program + SimpleException + SimpleException + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleException.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleException.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 7/SimpleException/SimpleException.vbproj.user b/Code/Chapter 7/SimpleException/SimpleException.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 7/SimpleException/SimpleException.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Car.vb b/Code/Chapter 7/Vb6StyleErrorHandling/Car.vb new file mode 100644 index 0000000..a01d6d9 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/Car.vb @@ -0,0 +1,58 @@ +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As Radio = New Radio() + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If delta < 0 Then + Throw New ArgumentOutOfRangeException() + End If + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New CarIsDeadException(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +End Class diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/CarIsDeadException.vb b/Code/Chapter 7/Vb6StyleErrorHandling/CarIsDeadException.vb new file mode 100644 index 0000000..898ce80 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/CarIsDeadException.vb @@ -0,0 +1,18 @@ + _ +Public Class CarIsDeadException + Inherits ApplicationException + Public Sub New() + End Sub + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + Public Sub New(ByVal message As String, ByVal inner As System.Exception) + MyBase.New(message, inner) + End Sub + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, _ + ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + End Sub +End Class + + diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.Designer.vb b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.myapp b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/AssemblyInfo.vb b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a004908 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.Designer.vb b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f8b1c30 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Vb6StyleErrorHandling.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.resx b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.Designer.vb b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.Designer.vb new file mode 100644 index 0000000..c36ba7d --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Vb6StyleErrorHandling.My.MySettings + Get + Return Global.Vb6StyleErrorHandling.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.settings b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Program.vb b/Code/Chapter 7/Vb6StyleErrorHandling/Program.vb new file mode 100644 index 0000000..1fbcf3c --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/Program.vb @@ -0,0 +1,22 @@ +Module Program + Sub Main() + Console.WriteLine("***** VB 6.0 Style Error Handling *****") + On Error GoTo OOPS + + Dim myCar As New Car("Sven", 80) + For i As Integer = 0 To 10 + myCar.Accelerate(10) + Next +OOPS: + ' Use Err object. + Console.WriteLine("=> Handling error with Err object.") + Console.WriteLine(Err.Description) + Console.WriteLine(Err.Source) + + ' Use Err object to get exception object. + Console.WriteLine("=> Handling error with exception.") + Console.WriteLine(Err.GetException().StackTrace) + Console.WriteLine(Err.GetException().TargetSite) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Radio.vb b/Code/Chapter 7/Vb6StyleErrorHandling/Radio.vb new file mode 100644 index 0000000..cdd0154 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/Radio.vb @@ -0,0 +1,9 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.sln b/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.sln new file mode 100644 index 0000000..1bdd176 --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Vb6StyleErrorHandling", "Vb6StyleErrorHandling.vbproj", "{61E99007-0366-4995-98AC-58EDC77F64F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {61E99007-0366-4995-98AC-58EDC77F64F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61E99007-0366-4995-98AC-58EDC77F64F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61E99007-0366-4995-98AC-58EDC77F64F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61E99007-0366-4995-98AC-58EDC77F64F9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.suo b/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.suo new file mode 100644 index 0000000000000000000000000000000000000000..3461172d0ce7722092004f9f0c1561b1b15f2394 GIT binary patch literal 18432 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {61E99007-0366-4995-98AC-58EDC77F64F9} + Exe + Vb6StyleErrorHandling.Program + Vb6StyleErrorHandling + Vb6StyleErrorHandling + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + Vb6StyleErrorHandling.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + Vb6StyleErrorHandling.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.vbproj.user b/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 7/Vb6StyleErrorHandling/Vb6StyleErrorHandling.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.sln b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.sln new file mode 100644 index 0000000..ac2661e --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "FinalizableDisposableClass", "FinalizableDisposableClass.vbproj", "{C53439E5-E8F2-4725-BFC7-15B6E40CBC48}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C53439E5-E8F2-4725-BFC7-15B6E40CBC48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C53439E5-E8F2-4725-BFC7-15B6E40CBC48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C53439E5-E8F2-4725-BFC7-15B6E40CBC48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C53439E5-E8F2-4725-BFC7-15B6E40CBC48}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.suo b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.suo new file mode 100644 index 0000000000000000000000000000000000000000..873b381e76f9762a40c808ed6f978c1c2fd6f754 GIT binary patch literal 19456 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

    o9dcd4W2b=k1Kk<#z>64aayO?^UAG>JWx@r0%D# z3_wccsXk*xQ~2XrP9UvkS7=@R+H_p3$6TLUL=5XG^wLR*{MyBfj-GX;gIYyKJ21*s zMqYYR#c#XTYUQpxI@&JsqJ-Zut{){%KGA&56Lsf&YKqB8yFH#JVT*9JVjL^wCx)DL zxno!S9YMfh>oJa#t6faIQH+}>25Ef%=#85^PhOX{gZ`F^b!q84d*NL-085*kK?&7V z@TA!Ot{$1qF7d^qr*#7L024=MW4XPUM$KJz8aI!gV8oA|7o@G?)+%<|H$sNp9BZeC zx_<(&bMVas-5|L?>)xTogEGmzci4dMf4P6?H&y+a?3#S6TcGaTby;3sV$NOkexY~r z;wwzb{|GbyV>7vi@`RXQLM`HHLYx^=2l0zN>CxUT8x#LABZMb$QIB3LS9yB6?&P&6 zSxsaRzr9#Z+~oSLDbBT@bUUR-KG*z7&02tPFob<-_t<@Wz4{Sg{JoCM<(d!&pE8&K z3xsQE`K04N`Atpn>5liiY%{MOg|WWJl&8;cu8BV@Y~xA%&jkyTRz7L`CaU?xZ$E!8 z-@3o2T5tNr@2^$=wN`__5UVf0bY6Y@x{M6;j`Nbz?G=N^C%2V_yK!;&wd?>_tF4{$ NTI&4GS?i;_`X81VHQfLJ literal 0 HcmV?d00001 diff --git a/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj new file mode 100644 index 0000000..40944b1 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj @@ -0,0 +1,135 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {C53439E5-E8F2-4725-BFC7-15B6E40CBC48} + Exe + FinalizableDisposableClass.Program + FinalizableDisposableClass + FinalizableDisposableClass + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + FinalizableDisposableClass.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + FinalizableDisposableClass.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj.user b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/FinalizableDisposableClass.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.Designer.vb b/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.myapp b/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/AssemblyInfo.vb b/Code/Chapter 8/FinalizableDisposableClass/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4db0690 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.Designer.vb b/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.Designer.vb new file mode 100644 index 0000000..aafaa92 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

    + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("FinalizableDisposableClass.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.resx b/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.Designer.vb b/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.Designer.vb new file mode 100644 index 0000000..0bef60b --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.FinalizableDisposableClass.My.MySettings + Get + Return Global.FinalizableDisposableClass.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.settings b/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 8/FinalizableDisposableClass/MyResourceWrapper.vb b/Code/Chapter 8/FinalizableDisposableClass/MyResourceWrapper.vb new file mode 100644 index 0000000..7018b34 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/MyResourceWrapper.vb @@ -0,0 +1,33 @@ +Public Class MyResourceWrapper + Implements IDisposable + + ' Used to determine if Dispose() + ' has already been called. + Private disposed As Boolean = False + + Public Sub Dispose() Implements IDisposable.Dispose + ' Call our helper method. + ' Specifying True signifies that + ' the object user triggered the clean up. + CleanUp(True) + GC.SuppressFinalize(Me) + End Sub + + Private Sub CleanUp(ByVal disposing As Boolean) + ' Be sure we have not already been disposed! + If Not Me.disposed Then + If disposing Then + ' Dispose managed resources. + End If + ' Clean up unmanaged resources here. + End If + disposed = True + End Sub + + Protected Overrides Sub Finalize() + ' Call our helper method. + ' Specifying False signifies that + ' the GC triggered the clean up. + CleanUp(False) + End Sub +End Class diff --git a/Code/Chapter 8/FinalizableDisposableClass/Program.vb b/Code/Chapter 8/FinalizableDisposableClass/Program.vb new file mode 100644 index 0000000..bb6ac15 --- /dev/null +++ b/Code/Chapter 8/FinalizableDisposableClass/Program.vb @@ -0,0 +1,12 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Finalizers *****") + Console.WriteLine("Hit the return key to shut down this app") + Console.WriteLine("and force the GC to invoke Finalize()") + Console.WriteLine("for finalizable objects created in this AppDomain.") + Console.ReadLine() + Dim rw As New MyResourceWrapper() + End Sub + +End Module diff --git a/Code/Chapter 8/SimpleDispose/My Project/Application.Designer.vb b/Code/Chapter 8/SimpleDispose/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 8/SimpleDispose/My Project/Application.myapp b/Code/Chapter 8/SimpleDispose/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 8/SimpleDispose/My Project/AssemblyInfo.vb b/Code/Chapter 8/SimpleDispose/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1e055fc --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 8/SimpleDispose/My Project/Resources.Designer.vb b/Code/Chapter 8/SimpleDispose/My Project/Resources.Designer.vb new file mode 100644 index 0000000..7486324 --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleDispose.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleDispose/My Project/Resources.resx b/Code/Chapter 8/SimpleDispose/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleDispose/My Project/Settings.Designer.vb b/Code/Chapter 8/SimpleDispose/My Project/Settings.Designer.vb new file mode 100644 index 0000000..5eabffe --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleDispose.My.MySettings + Get + Return Global.SimpleDispose.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleDispose/My Project/Settings.settings b/Code/Chapter 8/SimpleDispose/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 8/SimpleDispose/MyResourceWrapper.vb b/Code/Chapter 8/SimpleDispose/MyResourceWrapper.vb new file mode 100644 index 0000000..70014ae --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/MyResourceWrapper.vb @@ -0,0 +1,14 @@ +' Implementing IDisposable. +Class MyResourceWrapper + Implements IDisposable + + ' The object user should call this method + ' when they finished with the object. + Public Sub Dispose() Implements IDisposable.Dispose + ' Clean up unmanaged resources here. + ' Dispose other contained disposable objects. + + ' Just for tracing purposes. + Console.WriteLine("In Dispose method") + End Sub +End Class diff --git a/Code/Chapter 8/SimpleDispose/Program.vb b/Code/Chapter 8/SimpleDispose/Program.vb new file mode 100644 index 0000000..8d8c11c --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/Program.vb @@ -0,0 +1,20 @@ +#Region "Simple Car for testing" +Class Car + Implements IDisposable + Public Sub Dispose() Implements IDisposable.Dispose + Console.WriteLine("In Car Dispose") + End Sub +End Class +#End Region + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Dispose *****") + Using rw As New MyResourceWrapper(), _ + rw2 As New MyResourceWrapper(), _ + myCar As New Car() + ' Use the objects, Dispose() automatically called! + End Using + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 8/SimpleDispose/SimpleDispose.sln b/Code/Chapter 8/SimpleDispose/SimpleDispose.sln new file mode 100644 index 0000000..a1a0d27 --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/SimpleDispose.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleDispose", "SimpleDispose.vbproj", "{D8464D59-3812-4E81-BB73-A2018BD911F4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D8464D59-3812-4E81-BB73-A2018BD911F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8464D59-3812-4E81-BB73-A2018BD911F4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8464D59-3812-4E81-BB73-A2018BD911F4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8464D59-3812-4E81-BB73-A2018BD911F4}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 8/SimpleDispose/SimpleDispose.suo b/Code/Chapter 8/SimpleDispose/SimpleDispose.suo new file mode 100644 index 0000000000000000000000000000000000000000..7cdd777f13f226c201392d6be54f0d30ebc1ed5f GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj b/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj new file mode 100644 index 0000000..58e91cc --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {D8464D59-3812-4E81-BB73-A2018BD911F4} + Exe + SimpleDispose.Program + SimpleDispose + SimpleDispose + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + SimpleDispose.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleDispose.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj.user b/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 8/SimpleDispose/SimpleDispose.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Application.Designer.vb b/Code/Chapter 8/SimpleFinalize/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Application.myapp b/Code/Chapter 8/SimpleFinalize/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 8/SimpleFinalize/My Project/AssemblyInfo.vb b/Code/Chapter 8/SimpleFinalize/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..d71d33c --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Resources.Designer.vb b/Code/Chapter 8/SimpleFinalize/My Project/Resources.Designer.vb new file mode 100644 index 0000000..fe0bebe --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleFinalize.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Resources.resx b/Code/Chapter 8/SimpleFinalize/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Settings.Designer.vb b/Code/Chapter 8/SimpleFinalize/My Project/Settings.Designer.vb new file mode 100644 index 0000000..08567af --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleFinalize.My.MySettings + Get + Return Global.SimpleFinalize.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleFinalize/My Project/Settings.settings b/Code/Chapter 8/SimpleFinalize/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 8/SimpleFinalize/MyResourceWrapper.vb b/Code/Chapter 8/SimpleFinalize/MyResourceWrapper.vb new file mode 100644 index 0000000..68a3d53 --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/MyResourceWrapper.vb @@ -0,0 +1,13 @@ +Class MyResourceWrapper + ' Override System.Object.Finalize() + Protected Overrides Sub Finalize() + Try + ' Clean up any unmanaged resources here! + + ' Beep when destroyed (testing purposes only!) + Console.Beep() + Finally + MyBase.Finalize() + End Try + End Sub +End Class diff --git a/Code/Chapter 8/SimpleFinalize/Program.vb b/Code/Chapter 8/SimpleFinalize/Program.vb new file mode 100644 index 0000000..bb6ac15 --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/Program.vb @@ -0,0 +1,12 @@ +Module Program + + Sub Main() + Console.WriteLine("***** Fun with Finalizers *****") + Console.WriteLine("Hit the return key to shut down this app") + Console.WriteLine("and force the GC to invoke Finalize()") + Console.WriteLine("for finalizable objects created in this AppDomain.") + Console.ReadLine() + Dim rw As New MyResourceWrapper() + End Sub + +End Module diff --git a/Code/Chapter 8/SimpleFinalize/SimpleFinalize.sln b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.sln new file mode 100644 index 0000000..21df6e8 --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleFinalize", "SimpleFinalize.vbproj", "{A8DDC511-D074-4148-B91E-0E75BE355326}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8DDC511-D074-4148-B91E-0E75BE355326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8DDC511-D074-4148-B91E-0E75BE355326}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8DDC511-D074-4148-B91E-0E75BE355326}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8DDC511-D074-4148-B91E-0E75BE355326}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 8/SimpleFinalize/SimpleFinalize.suo b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.suo new file mode 100644 index 0000000000000000000000000000000000000000..66151d120291598a8c8d9eb1ef6ada4515250dfb GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj new file mode 100644 index 0000000..3d9378a --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A8DDC511-D074-4148-B91E-0E75BE355326} + Exe + SimpleFinalize.Program + SimpleFinalize + SimpleFinalize + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + SimpleFinalize.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleFinalize.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj.user b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 8/SimpleFinalize/SimpleFinalize.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleGC/Car.vb b/Code/Chapter 8/SimpleGC/Car.vb new file mode 100644 index 0000000..0622703 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/Car.vb @@ -0,0 +1,16 @@ +Public Class Car + Private currSpeed As Integer + Private petName As String + + Public Sub New() + End Sub + + Public Sub New(ByVal name As String, ByVal speed As Integer) + petName = name + currSpeed = speed + End Sub + + Public Overrides Function ToString() As String + Return String.Format("{0} is going {1} MPH", petName, currSpeed) + End Function +End Class diff --git a/Code/Chapter 8/SimpleGC/My Project/Application.Designer.vb b/Code/Chapter 8/SimpleGC/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 8/SimpleGC/My Project/Application.myapp b/Code/Chapter 8/SimpleGC/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 8/SimpleGC/My Project/AssemblyInfo.vb b/Code/Chapter 8/SimpleGC/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2554108 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 8/SimpleGC/My Project/Resources.Designer.vb b/Code/Chapter 8/SimpleGC/My Project/Resources.Designer.vb new file mode 100644 index 0000000..5d8db25 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("SimpleGC.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleGC/My Project/Resources.resx b/Code/Chapter 8/SimpleGC/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleGC/My Project/Settings.Designer.vb b/Code/Chapter 8/SimpleGC/My Project/Settings.Designer.vb new file mode 100644 index 0000000..1fc6039 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.SimpleGC.My.MySettings + Get + Return Global.SimpleGC.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 8/SimpleGC/My Project/Settings.settings b/Code/Chapter 8/SimpleGC/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 8/SimpleGC/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 8/SimpleGC/Program.vb b/Code/Chapter 8/SimpleGC/Program.vb new file mode 100644 index 0000000..4ca64f6 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/Program.vb @@ -0,0 +1,59 @@ +Module Program + Sub Main() + Console.WriteLine("***** Fun with System.GC *****") + + ' Print out estimated number of bytes on heap. + Console.WriteLine("Estimated bytes on heap: {0}", _ + GC.GetTotalMemory(False)) + + ' MaxGeneration is zero based. + Console.WriteLine("This OS has {0} object generations.", _ + (GC.MaxGeneration + 1)) + + Dim refToMyCar As New Car("Zippy", 100) + Console.WriteLine(refToMyCar.ToString()) + + ' Print out generation of refToMyCar. + Console.WriteLine("Generation of refToMyCar is: {0}", _ + GC.GetGeneration(refToMyCar)) + + ' Make a ton of objects for testing purposes. + Dim tonsOfObjects(5000) As Object + For i As Integer = 0 To UBound(tonsOfObjects) + tonsOfObjects(i) = New Object() + Next + + ' Collect only gen 0 objects. + GC.Collect(0) + GC.WaitForPendingFinalizers() + + ' Print out generation of refToMyCar. + Console.WriteLine("Generation of refToMyCar is: {0}", _ + GC.GetGeneration(refToMyCar)) + + ' See if tonsOfObjects(4000) is still alive. + If (tonsOfObjects(4000) IsNot Nothing) Then + Console.WriteLine("Generation of tonsOfObjects(4000) is: {0}", _ + GC.GetGeneration(tonsOfObjects(4000))) + Else + Console.WriteLine("tonsOfObjects(4000) is no longer alive.") + End If + + ' Print out how many times a generation has been swept. + Console.WriteLine("Gen 0 has been swept {0} times", _ + GC.CollectionCount(0)) + Console.WriteLine("Gen 1 has been swept {0} times", _ + GC.CollectionCount(1)) + Console.WriteLine("Gen 2 has been swept {0} times", _ + GC.CollectionCount(2)) + Console.ReadLine() + End Sub + + Sub MakeACar() + ' If myCar is the only reference to the Car object, + ' it may be destroyed when the method returns. + Dim myCar As New Car() + myCar = Nothing + End Sub + +End Module diff --git a/Code/Chapter 8/SimpleGC/SimpleGC.sln b/Code/Chapter 8/SimpleGC/SimpleGC.sln new file mode 100644 index 0000000..dfd888f --- /dev/null +++ b/Code/Chapter 8/SimpleGC/SimpleGC.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SimpleGC", "SimpleGC.vbproj", "{03ECF294-E536-4A0F-A9E1-CBBCFF75325B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {03ECF294-E536-4A0F-A9E1-CBBCFF75325B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03ECF294-E536-4A0F-A9E1-CBBCFF75325B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03ECF294-E536-4A0F-A9E1-CBBCFF75325B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03ECF294-E536-4A0F-A9E1-CBBCFF75325B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 8/SimpleGC/SimpleGC.suo b/Code/Chapter 8/SimpleGC/SimpleGC.suo new file mode 100644 index 0000000000000000000000000000000000000000..161e86f6327d649c124537675538e1a1a05a96be GIT binary patch literal 16384 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 YG(3zrD`oV-`YWHPv947Z-tO!Fe@1|lApigX literal 0 HcmV?d00001 diff --git a/Code/Chapter 8/SimpleGC/SimpleGC.vbproj b/Code/Chapter 8/SimpleGC/SimpleGC.vbproj new file mode 100644 index 0000000..580319b --- /dev/null +++ b/Code/Chapter 8/SimpleGC/SimpleGC.vbproj @@ -0,0 +1,135 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {03ECF294-E536-4A0F-A9E1-CBBCFF75325B} + Exe + SimpleGC.Program + SimpleGC + SimpleGC + Console + + + 2.0 + + + v3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + SimpleGC.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + SimpleGC.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 8/SimpleGC/SimpleGC.vbproj.user b/Code/Chapter 8/SimpleGC/SimpleGC.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 8/SimpleGC/SimpleGC.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 9/CloneablePoint/CloneablePoint.sln b/Code/Chapter 9/CloneablePoint/CloneablePoint.sln new file mode 100644 index 0000000..59919bd --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/CloneablePoint.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CloneablePoint", "CloneablePoint.vbproj", "{A2506E27-E207-4B4E-AD32-3CB3740369BB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A2506E27-E207-4B4E-AD32-3CB3740369BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2506E27-E207-4B4E-AD32-3CB3740369BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2506E27-E207-4B4E-AD32-3CB3740369BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2506E27-E207-4B4E-AD32-3CB3740369BB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/CloneablePoint/CloneablePoint.suo b/Code/Chapter 9/CloneablePoint/CloneablePoint.suo new file mode 100644 index 0000000000000000000000000000000000000000..320381f7233a45edd6e20768f65f78696c57026e GIT binary patch literal 24576 zcmeHP?Qa}M86P(#>T630zb>O0%18{2Vxj?)i^!uoE{K6`y@ z?Vgidp%VN7h%cxuACTIrl~5%R1%%3*1eHKVLMk7sBJlwgJ|a;02O9JH&FtLno%iI3rGp6v}RV4uHQ>q8HcQxaz^*5U#FPdpV8X zt_Tvmw)04F@P9Bxn{k?Ua8+Xg6|I@A4Mjf97B#H|J|s^HhNL^ zdDo{=onj)$%S z(^3aoVix5MAR8%PLoaf;YL~z`=q2k?;$~sf%t_93#1&~@e|3F`Xsh)lcvS*?Xi;w{uGC-R&svpN8f5dT+I* zuL)RYd}`r2vEBd|S|}&+U9EbS-9sv)o=RaYX&jBylGjXV!FEc>Y95qUnnOPgIVP?O zd&e0W$8`=*Y<#mZZu(9$xaVTMI2Q@5T^ZMT+_UlREZ&(xyIJ`bN8{q{97-X+b&Dy| zSFkXGf~2SE>hGIHU-jztkDq*%!+daU$dP_(v|_dM*XVsul>Fv!wUK*lDDL~7!Je1I z_lrO75<3A0tE(695M3j$5NRRfJHCDP>%XRjpp$>y7=J3@8(Kt`ekrtU1^QZMidHnN2*Ehu= z0w1Rl?l^-<>4gJ*QkLEFiXoCy_r0%nD%MGG#4ngj;UKGQkzHGI~Na0oos zi2t-NI3!y%WE=G#$rkuOfkw36rkz7X);zA{tN>n`!(HlM{iL3<`cC;L-_xdx%l{9e z?yTqkTmr@|fP<;)>t%dKMv%hk>bvy+81E)+CVfAud>juMBVwZ6!nJgz4Pk

    wBT< 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 Wn8T&|f{Z7s|Kh3RJv + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {A2506E27-E207-4B4E-AD32-3CB3740369BB} + Exe + CloneablePoint.Program + CloneablePoint + CloneablePoint + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CloneablePoint.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CloneablePoint.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/CloneablePoint/CloneablePoint.vbproj.user b/Code/Chapter 9/CloneablePoint/CloneablePoint.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/CloneablePoint.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/CloneablePoint/My Project/Application.Designer.vb b/Code/Chapter 9/CloneablePoint/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/CloneablePoint/My Project/Application.myapp b/Code/Chapter 9/CloneablePoint/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/CloneablePoint/My Project/AssemblyInfo.vb b/Code/Chapter 9/CloneablePoint/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..2ae37cb --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/CloneablePoint/My Project/Resources.Designer.vb b/Code/Chapter 9/CloneablePoint/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f8f11b0 --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + '''

    + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CloneablePoint.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CloneablePoint/My Project/Resources.resx b/Code/Chapter 9/CloneablePoint/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/CloneablePoint/My Project/Settings.Designer.vb b/Code/Chapter 9/CloneablePoint/My Project/Settings.Designer.vb new file mode 100644 index 0000000..f3c3df2 --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CloneablePoint.My.MySettings + Get + Return Global.CloneablePoint.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CloneablePoint/My Project/Settings.settings b/Code/Chapter 9/CloneablePoint/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/CloneablePoint/Point.vb b/Code/Chapter 9/CloneablePoint/Point.vb new file mode 100644 index 0000000..59b5ff9 --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/Point.vb @@ -0,0 +1,47 @@ +#Region "The Cloneable Point type" +Public Class Point + Implements ICloneable + Public xPos, yPos As Integer + + ' Point ‘has-a’ PointDescription. + Public desc As New PointDescription() + + Sub New() + End Sub + Sub New(ByVal x As Integer, ByVal y As Integer) + xPos = x : yPos = y + End Sub + Sub New(ByVal x As Integer, ByVal y As Integer, ByVal name As String) + xPos = x : yPos = y + desc.petName = name + End Sub + + Public Overrides Function ToString() As String + Return String.Format("X = {0} ; Y = {1} ; Name = {2} : ID = {3}", _ + xPos, yPos, desc.petName, desc.pointID) + End Function + + ' Now we need to adjust for the PointDescription member. + Public Function Clone() As Object Implements System.ICloneable.Clone + Dim newPoint As Point = CType(Me.MemberwiseClone(), Point) + Dim currentDesc As PointDescription = New PointDescription() + currentDesc.petName = Me.desc.petName + currentDesc.pointID = Me.desc.pointID + newPoint.desc = currentDesc + Return newPoint + End Function +End Class +#End Region + +#Region "Class that maintains Point data" +' This class represents data about +' a given Point. +Public Class PointDescription + Public petName As String + Public pointID As Guid + Public Sub New() + Me.petName = "No-name" + pointID = Guid.NewGuid + End Sub +End Class +#End Region \ No newline at end of file diff --git a/Code/Chapter 9/CloneablePoint/Program.vb b/Code/Chapter 9/CloneablePoint/Program.vb new file mode 100644 index 0000000..a5251be --- /dev/null +++ b/Code/Chapter 9/CloneablePoint/Program.vb @@ -0,0 +1,24 @@ +' This example illustrates how to implement ICloneable +' to build types that support 'deep copies' + +Module Program + Sub Main() + Console.WriteLine("***** Fun with ICloneable *****") + Dim p1 As New Point(50, 50, "Brad") + Dim p2 As Point = CType(p1.Clone(), Point) + + Console.WriteLine("Before modification:") + Console.WriteLine("p1: {0} ", p1) + Console.WriteLine("p2: {0} ", p2) + + p2.desc.petName = "This is my second point" + p2.xPos = 9 + Console.WriteLine("Changed p2.desc.petName and p2.x") + + Console.WriteLine("After modification:") + Console.WriteLine("p1: {0} ", p1) + Console.WriteLine("p2: {0} ", p2) + Console.ReadLine() + End Sub +End Module + diff --git a/Code/Chapter 9/CollectionTypes/Car.vb b/Code/Chapter 9/CollectionTypes/Car.vb new file mode 100644 index 0000000..994e489 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/Car.vb @@ -0,0 +1,129 @@ +Public Class Car + Implements IComparable + +#Region "Nested comparer type" + Public Class PetNameComparer + Implements IComparer + + Public Sub New() + End Sub + Public Function Compare(ByVal x As Object, ByVal y As Object) _ + As Integer Implements System.Collections.IComparer.Compare + Dim t1 As Car = CType(x, Car) + Dim t2 As Car = CType(y, Car) + Return String.Compare(t1.Name, t2.Name) + End Function + End Class +#End Region + + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + Private carID As Integer + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As Radio = New Radio() + + ' Property to return the pet name comparer. + Public Shared ReadOnly Property SortByPetName() As IComparer + Get + Return CType(New PetNameComparer(), IComparer) + End Get + End Property + +#Region "Properties for field data" + Public Property ID() As Integer + Get + Return carID + End Get + Set(ByVal value As Integer) + carID = value + End Set + End Property + Public Property Name() As String + Get + Return petName + End Get + Set(ByVal value As String) + petName = value + End Set + End Property + Public Property Speed() As Integer + Get + Return currSpeed + End Get + Set(ByVal value As Integer) + currSpeed = value + End Set + End Property +#End Region + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, _ + ByVal currSp As Integer, ByVal id As Integer) + currSpeed = currSp + petName = name + carID = id + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If delta < 0 Then + Throw New ArgumentOutOfRangeException() + End If + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New CarIsDeadException(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +#Region "Implementation of IComparable" + ' The iteration of the Car can be ordered + ' based on the carID. + Public Function CompareTo(ByVal obj As Object) As Integer _ + Implements System.IComparable.CompareTo + Dim temp As Car = CType(obj, Car) + If Me.carID > temp.carID Then + Return 1 + End If + If Me.carID < temp.carID Then + Return -1 + Else + Return 0 + End If + End Function +#End Region + +End Class diff --git a/Code/Chapter 9/CollectionTypes/CarIsDeadException.vb b/Code/Chapter 9/CollectionTypes/CarIsDeadException.vb new file mode 100644 index 0000000..867d727 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/CarIsDeadException.vb @@ -0,0 +1,55 @@ + +#Region "CarIsDeadException take one" +'Public Class CarIsDeadException +' Inherits ApplicationException + +' Private messageDetails As String + +'#Region "Ctors" +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' messageDetails = msg +' End Sub +'#End Region + +' ' Override the Exception.Message property. +' Public Overrides ReadOnly Property Message() As String +' Get +' Return String.Format("Car Error Message: {0}", messageDetails) +' End Get +' End Property +'End Class +#End Region + +#Region "CarIsDeadException take two" +'Public Class CarIsDeadException +' Inherits ApplicationException +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' MyBase.New(msg) +' End Sub +'End Class +#End Region + +#Region "CarIsDeadException take three" + _ +Public Class CarIsDeadException + Inherits ApplicationException + Public Sub New() + End Sub + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + Public Sub New(ByVal message As String, ByVal inner As System.Exception) + MyBase.New(message, inner) + End Sub + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, _ + ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + End Sub +End Class +#End Region + + diff --git a/Code/Chapter 9/CollectionTypes/CollectionTypes.sln b/Code/Chapter 9/CollectionTypes/CollectionTypes.sln new file mode 100644 index 0000000..6b7370e --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/CollectionTypes.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CollectionTypes", "CollectionTypes.vbproj", "{025F92E3-139C-4208-95F4-ABB1D140D9B1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {025F92E3-139C-4208-95F4-ABB1D140D9B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {025F92E3-139C-4208-95F4-ABB1D140D9B1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {025F92E3-139C-4208-95F4-ABB1D140D9B1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {025F92E3-139C-4208-95F4-ABB1D140D9B1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/CollectionTypes/CollectionTypes.suo b/Code/Chapter 9/CollectionTypes/CollectionTypes.suo new file mode 100644 index 0000000000000000000000000000000000000000..bd64430bb38fbbd52a16c369e2a603bbb949a746 GIT binary patch literal 25088 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 + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {025F92E3-139C-4208-95F4-ABB1D140D9B1} + Exe + CollectionTypes.Program + CollectionTypes + CollectionTypes + Console + + + true + full + true + true + bin\Debug\ + CollectionTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CollectionTypes.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/CollectionTypes/My Project/Application.Designer.vb b/Code/Chapter 9/CollectionTypes/My Project/Application.Designer.vb new file mode 100644 index 0000000..441e810 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.312 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/CollectionTypes/My Project/Application.myapp b/Code/Chapter 9/CollectionTypes/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/CollectionTypes/My Project/AssemblyInfo.vb b/Code/Chapter 9/CollectionTypes/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..4ecf7ae --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/CollectionTypes/My Project/Resources.Designer.vb b/Code/Chapter 9/CollectionTypes/My Project/Resources.Designer.vb new file mode 100644 index 0000000..6093083 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.312 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ' + ' A strongly-typed resource class, for looking up localized strings, etc. + ' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ' + ' Returns the cached ResourceManager instance used by this class. + ' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CollectionTypes.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ' + ' Overrides the current thread's CurrentUICulture property for all + ' resource lookups using this strongly typed resource class. + ' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As Global.System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CollectionTypes/My Project/Resources.resx b/Code/Chapter 9/CollectionTypes/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/CollectionTypes/My Project/Settings.Designer.vb b/Code/Chapter 9/CollectionTypes/My Project/Settings.Designer.vb new file mode 100644 index 0000000..57f0daa --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.312 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CollectionTypes.My.MySettings + Get + Return Global.CollectionTypes.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CollectionTypes/My Project/Settings.settings b/Code/Chapter 9/CollectionTypes/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/CollectionTypes/Program.vb b/Code/Chapter 9/CollectionTypes/Program.vb new file mode 100644 index 0000000..da53db4 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/Program.vb @@ -0,0 +1,100 @@ +' This example illustrates working with non-generic collection +' types in the System.Collections namespace. +' Uncomment / comment out function calls to test. + +Module Program + + Sub Main() + Console.WriteLine("***** Fun with non-generic collections *****") + ' ArrayListTest() + ' QueueTest() + StackTest() + Console.ReadLine() + End Sub + +#Region "ArrayList test" + Sub ArrayListTest() + ' Make ArrayList and add a range of Cars. + Dim carArList As ArrayList = New ArrayList + carArList.AddRange(New Car() {New Car("Fred", 90, 10), _ + New Car("Mary", 100, 50), New Car("MB", 190, 11)}) + Console.WriteLine("Items in carArList: {0}", carArList.Count) + + ' Iterate over contents. + For Each c As Car In carArList + Console.WriteLine("Car pet name: {0}", c.Name) + Next + + ' Insert new car. + Console.WriteLine("->Inserting new Car.") + carArList.Insert(2, New Car("TheNewCar", 0, 12)) + Console.WriteLine("Items in carArList: {0}", carArList.Count) + + ' Get the subobjects as an array. + Dim arrayOfCars As Object() = carArList.ToArray() + Dim i As Integer = 0 + + ' Now iterate over array + While i < arrayOfCars.Length + Console.WriteLine("Car pet name: {0}", CType(arrayOfCars(i), Car).Name) + i = i + 1 + End While + Console.WriteLine() + End Sub +#End Region + +#Region "Queue Test" + Public Sub WashCar(ByVal c As Car) + Console.WriteLine("Cleaning {0}", c.Name) + End Sub + + Sub QueueTest() + ' Make a Q with three items. + Dim carWashQ As New Queue() + carWashQ.Enqueue(New Car("FirstCar", 0, 1)) + carWashQ.Enqueue(New Car("SecondCar", 0, 2)) + carWashQ.Enqueue(New Car("ThirdCar", 0, 3)) + + ' Peek at first car in Q. + Console.WriteLine("First in Q is {0}", _ + CType(carWashQ.Peek(), Car).Name) + + ' Remove each item from Q. + WashCar(CType(carWashQ.Dequeue(), Car)) + WashCar(CType(carWashQ.Dequeue(), Car)) + WashCar(CType(carWashQ.Dequeue(), Car)) + + ' Try to de-Q again? + Try + WashCar(CType(carWashQ.Dequeue(), Car)) + Catch ex As Exception + Console.WriteLine("Error!! {0}", ex.Message) + End Try + End Sub +#End Region + +#Region "Stack Test" + Sub StackTest() + Dim stringStack As New Stack() + stringStack.Push("One") + stringStack.Push("Two") + stringStack.Push("Three") + + ' Now look at the top item, pop it, and look again. + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + Console.WriteLine("Top item is: {0}", stringStack.Peek()) + Console.WriteLine("Popped off {0}", stringStack.Pop()) + + Try + Console.WriteLine("Top item is: {0} ", stringStack.Peek()) + Console.WriteLine("Popped off {0} ", stringStack.Pop()) + Catch ex As Exception + Console.WriteLine("Error!! {0} ", ex.Message) + End Try + End Sub + +#End Region +End Module diff --git a/Code/Chapter 9/CollectionTypes/Radio.vb b/Code/Chapter 9/CollectionTypes/Radio.vb new file mode 100644 index 0000000..592c800 --- /dev/null +++ b/Code/Chapter 9/CollectionTypes/Radio.vb @@ -0,0 +1,9 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class diff --git a/Code/Chapter 9/ComparableCar/Car.vb b/Code/Chapter 9/ComparableCar/Car.vb new file mode 100644 index 0000000..361d520 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/Car.vb @@ -0,0 +1,129 @@ +Public Class Car + Implements IComparable + +#Region "Nested comparer type" + Public Class PetNameComparer + Implements IComparer + + Public Sub New() + End Sub + Public Function Compare(ByVal x As Object, ByVal y As Object) _ + As Integer Implements System.Collections.IComparer.Compare + Dim t1 As Car = CType(x, Car) + Dim t2 As Car = CType(y, Car) + Return String.Compare(t1.Name, t2.Name) + End Function + End Class +#End Region + + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + Private carID As Integer + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As Radio = New Radio() + + ' Property to return the pet name comparer. + Public Shared ReadOnly Property SortByPetName() As IComparer + Get + Return New PetNameComparer() + End Get + End Property + +#Region "Properties for field data" + Public Property ID() As Integer + Get + Return carID + End Get + Set(ByVal value As Integer) + carID = value + End Set + End Property + Public Property Name() As String + Get + Return petName + End Get + Set(ByVal value As String) + petName = value + End Set + End Property + Public Property Speed() As Integer + Get + Return currSpeed + End Get + Set(ByVal value As Integer) + currSpeed = value + End Set + End Property +#End Region + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, _ + ByVal currSp As Integer, ByVal id As Integer) + currSpeed = currSp + petName = name + carID = id + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If delta < 0 Then + Throw New ArgumentOutOfRangeException() + End If + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New CarIsDeadException(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +#Region "Implementation of IComparable" + ' The iteration of the Car can be ordered + ' based on the carID. + Public Function CompareTo(ByVal obj As Object) As Integer _ + Implements System.IComparable.CompareTo + Dim temp As Car = CType(obj, Car) + If Me.carID > temp.carID Then + Return 1 + End If + If Me.carID < temp.carID Then + Return -1 + Else + Return 0 + End If + End Function +#End Region + +End Class diff --git a/Code/Chapter 9/ComparableCar/CarIsDeadException.vb b/Code/Chapter 9/ComparableCar/CarIsDeadException.vb new file mode 100644 index 0000000..66c0acd --- /dev/null +++ b/Code/Chapter 9/ComparableCar/CarIsDeadException.vb @@ -0,0 +1,55 @@ + +#Region "CarIsDeadException take one" +'Public Class CarIsDeadException +' Inherits ApplicationException + +' Private messageDetails As String + +'#Region "Ctors" +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' messageDetails = msg +' End Sub +'#End Region + +' ' Override the Exception.Message property. +' Public Overrides ReadOnly Property Message() As String +' Get +' Return String.Format("Car Error Message: {0}", messageDetails) +' End Get +' End Property +'End Class +#End Region + +#Region "CarIsDeadException take two" +'Public Class CarIsDeadException +' Inherits ApplicationException +' Public Sub New() +' End Sub +' Public Sub New(ByVal msg As String) +' MyBase.New(msg) +' End Sub +'End Class +#End Region + +#Region "CarIsDeadException take three" + _ +Public Class CarIsDeadException + Inherits ApplicationException + Public Sub New() + End Sub + Public Sub New(ByVal message As String) + MyBase.New(message) + End Sub + Public Sub New(ByVal message As String, ByVal inner As System.Exception) + MyBase.New(message, inner) + End Sub + Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, _ + ByVal context As System.Runtime.Serialization.StreamingContext) + MyBase.New(info, context) + End Sub +End Class +#End Region + + diff --git a/Code/Chapter 9/ComparableCar/ComparableCar.sln b/Code/Chapter 9/ComparableCar/ComparableCar.sln new file mode 100644 index 0000000..f1b7dbc --- /dev/null +++ b/Code/Chapter 9/ComparableCar/ComparableCar.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ComparableCar", "ComparableCar.vbproj", "{6E74012B-3C55-4A1E-86B8-65BAE27DF32C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6E74012B-3C55-4A1E-86B8-65BAE27DF32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E74012B-3C55-4A1E-86B8-65BAE27DF32C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E74012B-3C55-4A1E-86B8-65BAE27DF32C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E74012B-3C55-4A1E-86B8-65BAE27DF32C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/ComparableCar/ComparableCar.suo b/Code/Chapter 9/ComparableCar/ComparableCar.suo new file mode 100644 index 0000000000000000000000000000000000000000..b5093408b149f34ed1e397cd6a7da6d8913b0f34 GIT binary patch literal 27136 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 A(*OVf literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/ComparableCar/ComparableCar.vbproj b/Code/Chapter 9/ComparableCar/ComparableCar.vbproj new file mode 100644 index 0000000..a8652e9 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/ComparableCar.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {6E74012B-3C55-4A1E-86B8-65BAE27DF32C} + Exe + ComparableCar.Program + ComparableCar + ComparableCar + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + ComparableCar.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + ComparableCar.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/ComparableCar/ComparableCar.vbproj.user b/Code/Chapter 9/ComparableCar/ComparableCar.vbproj.user new file mode 100644 index 0000000..6a34e7d --- /dev/null +++ b/Code/Chapter 9/ComparableCar/ComparableCar.vbproj.user @@ -0,0 +1,5 @@ + + + ShowAllFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/ComparableCar/My Project/Application.Designer.vb b/Code/Chapter 9/ComparableCar/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/ComparableCar/My Project/Application.myapp b/Code/Chapter 9/ComparableCar/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/ComparableCar/My Project/AssemblyInfo.vb b/Code/Chapter 9/ComparableCar/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..192f1cf --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/ComparableCar/My Project/Resources.Designer.vb b/Code/Chapter 9/ComparableCar/My Project/Resources.Designer.vb new file mode 100644 index 0000000..ffc8ce4 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ComparableCar.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/ComparableCar/My Project/Resources.resx b/Code/Chapter 9/ComparableCar/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/ComparableCar/My Project/Settings.Designer.vb b/Code/Chapter 9/ComparableCar/My Project/Settings.Designer.vb new file mode 100644 index 0000000..4c8c085 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ComparableCar.My.MySettings + Get + Return Global.ComparableCar.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/ComparableCar/My Project/Settings.settings b/Code/Chapter 9/ComparableCar/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/ComparableCar/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/ComparableCar/PetNameComparer.vb b/Code/Chapter 9/ComparableCar/PetNameComparer.vb new file mode 100644 index 0000000..225e11a --- /dev/null +++ b/Code/Chapter 9/ComparableCar/PetNameComparer.vb @@ -0,0 +1,16 @@ +' This type is now nested in the Car! + +' This helper class is used to sort an array of Cars by pet name. + +'Public Class PetNameComparer +' Implements IComparer + +' Public Sub New() +' End Sub +' Public Function Compare(ByVal x As Object, ByVal y As Object) _ +' As Integer Implements System.Collections.IComparer.Compare +' Dim t1 As Car = CType(x, Car) +' Dim t2 As Car = CType(y, Car) +' Return String.Compare(t1.Name, t2.Name) +' End Function +'End Class diff --git a/Code/Chapter 9/ComparableCar/Program.vb b/Code/Chapter 9/ComparableCar/Program.vb new file mode 100644 index 0000000..8a2a72d --- /dev/null +++ b/Code/Chapter 9/ComparableCar/Program.vb @@ -0,0 +1,38 @@ +' This example illustrates how to build objects +' which can be sorted in various manners. + +Module Program + Sub Main() + Console.WriteLine("***** Fun with IComparable *****") + + ' Make an array of Car types. + Dim myAutos(4) As Car + myAutos(0) = New Car("Rusty", 80, 1) + myAutos(1) = New Car("Mary", 40, 234) + myAutos(2) = New Car("Viper", 40, 34) + myAutos(3) = New Car("Mel", 40, 4) + myAutos(4) = New Car("Chucky", 40, 5) + + Console.WriteLine("-> Before Sorting:") + For Each c As Car In myAutos + Console.WriteLine("Car {0} is named {1}.", c.ID, c.Name) + Next + Console.WriteLine() + + ' Sort my cars? + Array.Sort(myAutos) + Console.WriteLine("-> After Sorting:") + For Each c As Car In myAutos + Console.WriteLine("Car {0} is named {1}.", c.ID, c.Name) + Next + Console.WriteLine() + + ' Now sort by pet name. + Array.Sort(myAutos, Car.SortByPetName) + Console.WriteLine("-> Ordering by pet name:") + For Each c As Car In myAutos + Console.WriteLine("{0} has the ID of {1}.", c.Name, c.ID) + Next + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 9/ComparableCar/Radio.vb b/Code/Chapter 9/ComparableCar/Radio.vb new file mode 100644 index 0000000..cdd0154 --- /dev/null +++ b/Code/Chapter 9/ComparableCar/Radio.vb @@ -0,0 +1,9 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class diff --git a/Code/Chapter 9/CustomEnumerator/Car.vb b/Code/Chapter 9/CustomEnumerator/Car.vb new file mode 100644 index 0000000..c32f13d --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/Car.vb @@ -0,0 +1,74 @@ +Public Class Car + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + ' Internal state data. + Private currSpeed As Integer + Private petName As String + + ' Is the car still operational? + Private carIsDead As Boolean + + ' A car has a radio. + Private theMusicBox As Radio = New Radio() + +#Region "Properties" + Public Property Name() As String + Get + Return petName + End Get + Set(ByVal value As String) + petName = value + End Set + End Property + Public Property Speed() As Integer + Get + Return currSpeed + End Get + Set(ByVal value As Integer) + currSpeed = value + End Set + End Property +#End Region + +#Region "Constructors." + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub +#End Region + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + +#Region "Accelerate method" + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + If carIsDead Then + Console.WriteLine("{0} is out of order...", petName) + Else + currSpeed += delta + If currSpeed >= maxSpeed Then + carIsDead = True + currSpeed = 0 + + ' We need to call the HelpLink property, thus we need to + ' create a local variable before throwing the Exception object. + Dim ex As New Exception(String.Format("{0} has overheated!", petName)) + ex.HelpLink = "http://www.CarsRUs.com" + ' Stuff in custom data regarding the error. + ex.Data.Add("TimeStamp", _ + String.Format("The car exploded at {0}", DateTime.Now)) + ex.Data.Add("Cause", "You have a lead foot.") + Throw ex + Else + Console.WriteLine("=> CurrSpeed = {0}", currSpeed) + End If + End If + End Sub +#End Region + +End Class diff --git a/Code/Chapter 9/CustomEnumerator/CustomEnumerator.sln b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.sln new file mode 100644 index 0000000..2a26065 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomEnumerator", "CustomEnumerator.vbproj", "{8950402A-B417-41DE-B7C4-860673EF027B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8950402A-B417-41DE-B7C4-860673EF027B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8950402A-B417-41DE-B7C4-860673EF027B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8950402A-B417-41DE-B7C4-860673EF027B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8950402A-B417-41DE-B7C4-860673EF027B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/CustomEnumerator/CustomEnumerator.suo b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.suo new file mode 100644 index 0000000000000000000000000000000000000000..daa70b4c93cf7c8cd511d75845b6600b7b39d5d1 GIT binary patch literal 26112 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 VTbs)&XBeiH7t7@OS~^nYM%{@wrp literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj new file mode 100644 index 0000000..6b4775d --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj @@ -0,0 +1,100 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {8950402A-B417-41DE-B7C4-860673EF027B} + Exe + CustomEnumerator.Program + CustomEnumerator + CustomEnumerator + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CustomEnumerator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomEnumerator.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj.user b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/CustomEnumerator.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomEnumerator/Garage.vb b/Code/Chapter 9/CustomEnumerator/Garage.vb new file mode 100644 index 0000000..27e6582 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/Garage.vb @@ -0,0 +1,19 @@ +Public Class Garage + Implements System.Collections.IEnumerable + + Private myCars() As Car = New Car(3) {} + + Public Sub New() + myCars(0) = New Car("Fred", 40) + myCars(1) = New Car("Zippy", 60) + myCars(2) = New Car("Mabel", 0) + myCars(3) = New Car("Max", 80) + End Sub + + Public Function GetEnumerator() As System.Collections.IEnumerator _ + Implements System.Collections.IEnumerable.GetEnumerator + Return myCars.GetEnumerator() + End Function +End Class + + diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Application.Designer.vb b/Code/Chapter 9/CustomEnumerator/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Application.myapp b/Code/Chapter 9/CustomEnumerator/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/CustomEnumerator/My Project/AssemblyInfo.vb b/Code/Chapter 9/CustomEnumerator/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..fb55159 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Resources.Designer.vb b/Code/Chapter 9/CustomEnumerator/My Project/Resources.Designer.vb new file mode 100644 index 0000000..426cf65 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomEnumerator.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Resources.resx b/Code/Chapter 9/CustomEnumerator/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Settings.Designer.vb b/Code/Chapter 9/CustomEnumerator/My Project/Settings.Designer.vb new file mode 100644 index 0000000..3e10ec8 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomEnumerator.My.MySettings + Get + Return Global.CustomEnumerator.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CustomEnumerator/My Project/Settings.settings b/Code/Chapter 9/CustomEnumerator/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/CustomEnumerator/Program.vb b/Code/Chapter 9/CustomEnumerator/Program.vb new file mode 100644 index 0000000..f7f5e19 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/Program.vb @@ -0,0 +1,22 @@ +' This seems reasonable... +Module Program + Sub Main() + Console.WriteLine("***** Info about my Cars *****") + Dim myCars As New Garage + ' Hand over each car in the collection? + For Each c As Car In myCars + Console.WriteLine("{0} is going {1} MPH", _ + c.Name, c.Speed) + Next + + ' Get IEnumerable directly. + Dim iEnum As IEnumerator + iEnum = myCars.GetEnumerator() + iEnum.Reset() + iEnum.MoveNext() + + Dim firstCar As Car = CType(iEnum.Current, Car) + Console.WriteLine("First car in collection is: {0}", firstCar.Name) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 9/CustomEnumerator/Radio.vb b/Code/Chapter 9/CustomEnumerator/Radio.vb new file mode 100644 index 0000000..592c800 --- /dev/null +++ b/Code/Chapter 9/CustomEnumerator/Radio.vb @@ -0,0 +1,9 @@ +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class diff --git a/Code/Chapter 9/CustomInterface/CustomInterface.sln b/Code/Chapter 9/CustomInterface/CustomInterface.sln new file mode 100644 index 0000000..dc32e14 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/CustomInterface.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomInterface", "CustomInterface.vbproj", "{B35D1076-37D3-441D-A79C-D6763B478E4A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B35D1076-37D3-441D-A79C-D6763B478E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B35D1076-37D3-441D-A79C-D6763B478E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B35D1076-37D3-441D-A79C-D6763B478E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B35D1076-37D3-441D-A79C-D6763B478E4A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/CustomInterface/CustomInterface.suo b/Code/Chapter 9/CustomInterface/CustomInterface.suo new file mode 100644 index 0000000000000000000000000000000000000000..937cb5474e406645b137def1af1f4df2d3490b8f GIT binary patch literal 23040 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 A^8f$< literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/CustomInterface/CustomInterface.vbproj b/Code/Chapter 9/CustomInterface/CustomInterface.vbproj new file mode 100644 index 0000000..e8b7d2e --- /dev/null +++ b/Code/Chapter 9/CustomInterface/CustomInterface.vbproj @@ -0,0 +1,103 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {B35D1076-37D3-441D-A79C-D6763B478E4A} + Exe + CustomInterface.Program + CustomInterface + CustomInterface + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + CustomInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + CustomInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/CustomInterface.vbproj.user b/Code/Chapter 9/CustomInterface/CustomInterface.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 9/CustomInterface/CustomInterface.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/IPointy.vb b/Code/Chapter 9/CustomInterface/IPointy.vb new file mode 100644 index 0000000..898b265 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/IPointy.vb @@ -0,0 +1,9 @@ +' The pointy behavior as a read-only property. +Public Interface IPointy + ReadOnly Property Points() As Byte +End Interface + +' Models the ability to render a type in stunning 3D. +Public Interface IDraw3D + Sub Draw3D() +End Interface diff --git a/Code/Chapter 9/CustomInterface/My Project/Application.Designer.vb b/Code/Chapter 9/CustomInterface/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/CustomInterface/My Project/Application.myapp b/Code/Chapter 9/CustomInterface/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/CustomInterface/My Project/AssemblyInfo.vb b/Code/Chapter 9/CustomInterface/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..0a2f8e8 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/CustomInterface/My Project/Resources.Designer.vb b/Code/Chapter 9/CustomInterface/My Project/Resources.Designer.vb new file mode 100644 index 0000000..f970fc8 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CustomInterface.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CustomInterface/My Project/Resources.resx b/Code/Chapter 9/CustomInterface/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/My Project/Settings.Designer.vb b/Code/Chapter 9/CustomInterface/My Project/Settings.Designer.vb new file mode 100644 index 0000000..9d9b59d --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.CustomInterface.My.MySettings + Get + Return Global.CustomInterface.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/CustomInterface/My Project/Settings.settings b/Code/Chapter 9/CustomInterface/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/CustomInterface/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/CustomInterface/MyShapes.cd b/Code/Chapter 9/CustomInterface/MyShapes.cd new file mode 100644 index 0000000..a499bed --- /dev/null +++ b/Code/Chapter 9/CustomInterface/MyShapes.cd @@ -0,0 +1,70 @@ + + + + + + + MyShapes.vb + AAAAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAAAAAAAAAA= + + + + + + + MyShapes.vb + AAAAAAAAAAAAggAAAAAAAAAEAAAAAAAAAAAAAAAAAAA= + + + + + + + MyShapes.vb + AAAAAAAAAAAAAgAAAAAAAAAAAAABAAAAAAAAAAAAAAA= + + + + + + Shape.vb + AAAAIAAAAAAAAgAAAAAAAAAAAAABAAAAAAAAAAAAAAA= + + + + + + Triangle.vb + AAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + OtherPointyItems.vb + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + OtherPointyItems.vb + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + OtherPointyItems.vb + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + + + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/MyShapes.vb b/Code/Chapter 9/CustomInterface/MyShapes.vb new file mode 100644 index 0000000..12cefb9 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/MyShapes.vb @@ -0,0 +1,63 @@ +#Region "Circle Class" +' If we did not implement the MustOverride Draw() method, Circle would also be +' considered abstract, and would have to be marked MustInherit! +Public Class Circle + Inherits Shape + Implements IDraw3D + + Public Sub New() + End Sub + Public Sub New(ByVal name As String) + MyBase.New(name) + End Sub + Public Overrides Sub Draw() + Console.WriteLine("Drawing {0} the Circle", shapeName) + End Sub + + Public Sub Draw3D() Implements IDraw3D.Draw3D + Console.WriteLine("Drawing circle in 3D!") + End Sub +End Class +#End Region + +#Region "Hexagon Class" +' Hexagon DOES override Draw(). +Public Class Hexagon + Inherits Shape + Implements IPointy, IDraw3D + + Public Sub New() + End Sub + Public Sub New(ByVal name As String) + MyBase.New(name) + End Sub + Public Overrides Sub Draw() + Console.WriteLine("Drawing {0} the Hexagon", shapeName) + End Sub + + Public ReadOnly Property Points() As Byte Implements IPointy.Points + Get + Return 6 + End Get + End Property + + Public Sub Draw3D() Implements IDraw3D.Draw3D + Console.WriteLine("Drawing Hexagon in 3D!") + End Sub +End Class +#End Region + +#Region "ThreeDCircle Class" +' This class extends Circle and hides the inherited Draw() method. +Public Class ThreeDCircle + Inherits Circle + + ' Hide the shapeName field above me. + Protected Shadows shapeName As String + + ' Hide any Draw() implementation above me. + Public Shadows Sub Draw() + Console.WriteLine("Drawing a 3D Circle") + End Sub +End Class +#End Region \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/OtherPointyItems.vb b/Code/Chapter 9/CustomInterface/OtherPointyItems.vb new file mode 100644 index 0000000..2e73790 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/OtherPointyItems.vb @@ -0,0 +1,32 @@ +' These types are just for testing purposes. +' They illustrate how the same interface can be +' supported in unique heirarchies. + +Public Class PitchFork + Implements IPointy + Public ReadOnly Property Points() As Byte Implements IPointy.Points + Get + Return 3 + End Get + End Property +End Class + +Public Class Fork + Implements IPointy + + Public ReadOnly Property Points() As Byte Implements IPointy.Points + Get + Return 4 + End Get + End Property +End Class + +Public Class Knife + Implements IPointy + + Public ReadOnly Property Points() As Byte Implements IPointy.Points + Get + Return 1 + End Get + End Property +End Class \ No newline at end of file diff --git a/Code/Chapter 9/CustomInterface/Program.vb b/Code/Chapter 9/CustomInterface/Program.vb new file mode 100644 index 0000000..3e044ea --- /dev/null +++ b/Code/Chapter 9/CustomInterface/Program.vb @@ -0,0 +1,65 @@ +' This example illustrates how to define and work with .NET interface +' types. + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Interfaces *****") + ' Make an array of Shape-compatible types. + Dim myShapes() As Shape = {New Hexagon("Fred"), New Circle("Angie"), _ + New ThreeDCircle(), New Triangle("Adam")} + + ' Now figure out which ones support IPointy. + Dim itfPointy As IPointy + For Each s As Shape In myShapes + If TypeOf s Is IPointy Then + itfPointy = CType(s, IPointy) + Console.WriteLine("{0} has {1} points.", s.PetName, itfPointy.Points) + Else + Console.WriteLine("{0} does not implement IPointy!", s) + End If + ' Is this item IDraw3D aware? + If TypeOf s Is IDraw3D Then + DrawIn3D(CType(s, IDraw3D)) + End If + Next + + ' Can we extract IPointy from an Array of Integers? + Dim myInts() As Integer = {10, 20, 30} + Dim i As IPointy = ExtractPointyness(myInts) + + ' Nope! + If i Is Nothing Then + Console.WriteLine("Sorry, this object was not IPointy compatible") + End If + + ' This array can only contain types that + ' implement the IPointy interface. + Dim pointyThings() As IPointy = {New Hexagon(), New Knife(), _ + New Triangle(), New Fork(), New PitchFork()} + Console.WriteLine("Here are some more pointy things:") + For Each p As IPointy In pointyThings + Console.WriteLine("Object has {0} points.", p.Points) + Next + + Console.ReadLine() + End Sub + +#Region "Helper methods" + ' This method can receive anything implementing IDraw3D. + Sub DrawIn3D(ByVal itf3d As IDraw3D) + Console.WriteLine("-> Drawing IDraw3D compatible type") + itf3d.Draw3D() + End Sub + + ' This method tests for IPointy-compatibility and, + ' if able, returns an interface reference. + Function ExtractPointyness(ByVal o As Object) As IPointy + If TypeOf o Is IPointy Then + Return CType(o, IPointy) + Else + Return Nothing + End If + End Function +#End Region + +End Module diff --git a/Code/Chapter 9/CustomInterface/Shape.vb b/Code/Chapter 9/CustomInterface/Shape.vb new file mode 100644 index 0000000..bfa12ae --- /dev/null +++ b/Code/Chapter 9/CustomInterface/Shape.vb @@ -0,0 +1,22 @@ +' The abstract base class of the hierarchy. +Public MustInherit Class Shape + Protected shapeName As String + + Public Sub New() + shapeName = "NoName" + End Sub + Public Sub New(ByVal s As String) + shapeName = s + End Sub + + Public MustOverride Sub Draw() + + Public Property PetName() As String + Get + Return shapeName + End Get + Set(ByVal value As String) + shapeName = value + End Set + End Property +End Class diff --git a/Code/Chapter 9/CustomInterface/Triangle.vb b/Code/Chapter 9/CustomInterface/Triangle.vb new file mode 100644 index 0000000..3ea9373 --- /dev/null +++ b/Code/Chapter 9/CustomInterface/Triangle.vb @@ -0,0 +1,20 @@ +Public Class Triangle + Inherits Shape + Implements IPointy + + Public Sub New() + End Sub + Public Sub New(ByVal name As String) + MyBase.New(name) + End Sub + + Public Overrides Sub Draw() + Console.WriteLine("Drawing {0} the Triangle", shapeName) + End Sub + + Public ReadOnly Property Points() As Byte Implements IPointy.Points + Get + Return 3 + End Get + End Property +End Class diff --git a/Code/Chapter 9/EventInterface/Car.vb b/Code/Chapter 9/EventInterface/Car.vb new file mode 100644 index 0000000..e24413e --- /dev/null +++ b/Code/Chapter 9/EventInterface/Car.vb @@ -0,0 +1,64 @@ +Option Explicit On +Option Strict On + +Public Class Car + ' The set of connected client. + Private clientSinks As New ArrayList() + + ' The client calls these methods to connect + ' to, or detatch from, the event notification. + Public Sub Connect(ByVal sink As IEngineEvents) + clientSinks.Add(sink) + End Sub + Public Sub Disconnect(ByVal sink As IEngineEvents) + clientSinks.Remove(sink) + End Sub + + ' Constant for maximum speed. + Public Const maxSpeed As Integer = 100 + + 'Internal state data. + Private currSpeed As Integer + Private petName As String + + 'Is the car still operational? + Private carIsDead As Boolean + + 'A car has a radio. + Private theMusicBox As Radio = New Radio + + ' Constructors. + Public Sub New() + End Sub + Public Sub New(ByVal name As String, ByVal currSp As Integer) + currSpeed = currSp + petName = name + End Sub + + Public Sub CrankTunes(ByVal state As Boolean) + theMusicBox.TurnOn(state) + End Sub + + ' See if Car has overheated. + Public Sub Accelerate(ByVal delta As Integer) + ' If the car is doomed, sent out event to + ' each connected client. + If carIsDead Then + For Each i As IEngineEvents In clientSinks + i.Exploded("Sorry! This car is toast!") + Next + Else + currSpeed += delta + If (maxSpeed - currSpeed) = 10 Then + For Each i As IEngineEvents In clientSinks + i.AboutToBlow("Careful! About to blow!") + Next + End If + If currSpeed >= maxSpeed Then + carIsDead = True + Else + Console.WriteLine("=> CurrSpeed = {0} ", currSpeed) + End If + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 9/EventInterface/CarEventSink.vb b/Code/Chapter 9/EventInterface/CarEventSink.vb new file mode 100644 index 0000000..1e2c6d0 --- /dev/null +++ b/Code/Chapter 9/EventInterface/CarEventSink.vb @@ -0,0 +1,18 @@ +' Car event sink. +Public Class CarEventSink + Implements IEngineEvents + Private name As String + + Public Sub New(ByVal sinkName As String) + name = sinkName + End Sub + + Public Sub AboutToBlow(ByVal msg As String) _ + Implements IEngineEvents.AboutToBlow + Console.WriteLine("{0} reporting: {1}", name, msg) + End Sub + Public Sub Exploded(ByVal msg As String) _ + Implements IEngineEvents.Exploded + Console.WriteLine("{0} reporting: {1}", name, msg) + End Sub +End Class diff --git a/Code/Chapter 9/EventInterface/EventInterface.sln b/Code/Chapter 9/EventInterface/EventInterface.sln new file mode 100644 index 0000000..b785a88 --- /dev/null +++ b/Code/Chapter 9/EventInterface/EventInterface.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EventInterface", "EventInterface.vbproj", "{D7E0188D-43F2-479D-9151-AC26D0D25DF5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D7E0188D-43F2-479D-9151-AC26D0D25DF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7E0188D-43F2-479D-9151-AC26D0D25DF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7E0188D-43F2-479D-9151-AC26D0D25DF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7E0188D-43F2-479D-9151-AC26D0D25DF5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/EventInterface/EventInterface.suo b/Code/Chapter 9/EventInterface/EventInterface.suo new file mode 100644 index 0000000000000000000000000000000000000000..ee0a2b6ccb550d7ec513f61ebcdd1733c1eb70f4 GIT binary patch literal 20992 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 literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/EventInterface/EventInterface.vbproj b/Code/Chapter 9/EventInterface/EventInterface.vbproj new file mode 100644 index 0000000..6956981 --- /dev/null +++ b/Code/Chapter 9/EventInterface/EventInterface.vbproj @@ -0,0 +1,133 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D7E0188D-43F2-479D-9151-AC26D0D25DF5} + Exe + EventInterface.Program + EventInterface + EventInterface + Console + + + 2.0 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + true + true + bin\Debug\ + EventInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + EventInterface.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + False + .NET Framework 2.0 %28x86%29 + true + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/EventInterface/EventInterface.vbproj.user b/Code/Chapter 9/EventInterface/EventInterface.vbproj.user new file mode 100644 index 0000000..97e11c3 --- /dev/null +++ b/Code/Chapter 9/EventInterface/EventInterface.vbproj.user @@ -0,0 +1,17 @@ + + + ProjectFiles + + + + + + + + + + + en-US + false + + \ No newline at end of file diff --git a/Code/Chapter 9/EventInterface/Interfaces.vb b/Code/Chapter 9/EventInterface/Interfaces.vb new file mode 100644 index 0000000..05298d9 --- /dev/null +++ b/Code/Chapter 9/EventInterface/Interfaces.vb @@ -0,0 +1,5 @@ +' The callback interface. +Public Interface IEngineEvents + Sub AboutToBlow(ByVal msg As String) + Sub Exploded(ByVal msg As String) +End Interface diff --git a/Code/Chapter 9/EventInterface/My Project/Application.Designer.vb b/Code/Chapter 9/EventInterface/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/EventInterface/My Project/Application.myapp b/Code/Chapter 9/EventInterface/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/EventInterface/My Project/AssemblyInfo.vb b/Code/Chapter 9/EventInterface/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b686469 --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/EventInterface/My Project/Resources.Designer.vb b/Code/Chapter 9/EventInterface/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2640e41 --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("EventInterface.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/EventInterface/My Project/Resources.resx b/Code/Chapter 9/EventInterface/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/EventInterface/My Project/Settings.Designer.vb b/Code/Chapter 9/EventInterface/My Project/Settings.Designer.vb new file mode 100644 index 0000000..b6febdb --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.EventInterface.My.MySettings + Get + Return Global.EventInterface.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/EventInterface/My Project/Settings.settings b/Code/Chapter 9/EventInterface/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/EventInterface/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/EventInterface/Program.vb b/Code/Chapter 9/EventInterface/Program.vb new file mode 100644 index 0000000..aa06575 --- /dev/null +++ b/Code/Chapter 9/EventInterface/Program.vb @@ -0,0 +1,32 @@ +Module Program + Sub Main() + Console.WriteLine("***** Interfaces as event enablers *****") + Dim myCar As New Car("SlugBug", 10) + + ' Make sink object. + Console.WriteLine("***** Creating Sinks! *****") + Dim sink As New CarEventSink("First Sink") + Dim otherSink As New CarEventSink("Second Sink") + + ' Pass both sinks to car. + myCar.Connect(sink) + myCar.Connect(otherSink) + + ' Speed up (this will trigger the events). + For i As Integer = 0 To 5 + myCar.Accelerate(20) + Next + + ' Detach from first sink. + myCar.Disconnect(sink) + + ' Speed up again (only otherSink will be called). + For i As Integer = 0 To 5 + myCar.Accelerate(20) + Next + + ' Detach from other sink. + myCar.Disconnect(otherSink) + Console.ReadLine() + End Sub +End Module diff --git a/Code/Chapter 9/EventInterface/Radio.vb b/Code/Chapter 9/EventInterface/Radio.vb new file mode 100644 index 0000000..09e9ab4 --- /dev/null +++ b/Code/Chapter 9/EventInterface/Radio.vb @@ -0,0 +1,12 @@ +Option Explicit On +Option Strict On + +Public Class Radio + Public Sub TurnOn(ByVal state As Boolean) + If state = True Then + Console.WriteLine("Jamming...") + Else + Console.WriteLine("Quiet time...") + End If + End Sub +End Class \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.sln b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.sln new file mode 100644 index 0000000..dd82106 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InterfaceHierarchy", "InterfaceHierarchy.vbproj", "{593EB49B-DD75-48E5-AEB7-6181A7AE40DF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {593EB49B-DD75-48E5-AEB7-6181A7AE40DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {593EB49B-DD75-48E5-AEB7-6181A7AE40DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {593EB49B-DD75-48E5-AEB7-6181A7AE40DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {593EB49B-DD75-48E5-AEB7-6181A7AE40DF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.suo b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.suo new file mode 100644 index 0000000000000000000000000000000000000000..61dc164fc8ecd0c940a835395c6437f189f91241 GIT binary patch literal 21504 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 AxBvhE literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj new file mode 100644 index 0000000..2244fe3 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {593EB49B-DD75-48E5-AEB7-6181A7AE40DF} + Exe + InterfaceHierarchy.Program + InterfaceHierarchy + InterfaceHierarchy + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + InterfaceHierarchy.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + InterfaceHierarchy.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj.user b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/InterfaceHierarchy.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Application.Designer.vb b/Code/Chapter 9/InterfaceHierarchy/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Application.myapp b/Code/Chapter 9/InterfaceHierarchy/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/AssemblyInfo.vb b/Code/Chapter 9/InterfaceHierarchy/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..1b7aabe --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.Designer.vb b/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.Designer.vb new file mode 100644 index 0000000..2fee0eb --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("InterfaceHierarchy.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.resx b/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.Designer.vb b/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.Designer.vb new file mode 100644 index 0000000..e514709 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.InterfaceHierarchy.My.MySettings + Get + Return Global.InterfaceHierarchy.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.settings b/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/InterfaceHierarchy/MyInterfaces.vb b/Code/Chapter 9/InterfaceHierarchy/MyInterfaces.vb new file mode 100644 index 0000000..ae4761d --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/MyInterfaces.vb @@ -0,0 +1,13 @@ +Public Interface IDrawable + Sub Draw() +End Interface + +Public Interface IPrintable + Inherits IDrawable + Sub Print() +End Interface + +Public Interface IRenderToMemory + Inherits IPrintable + Sub Render() +End Interface diff --git a/Code/Chapter 9/InterfaceHierarchy/Program.vb b/Code/Chapter 9/InterfaceHierarchy/Program.vb new file mode 100644 index 0000000..d7ac219 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/Program.vb @@ -0,0 +1,19 @@ +' This example illustrates building heirarchies +' of interfaces. + +Module Program + Sub Main() + Console.WriteLine("***** The SuperShape *****") + + ' Call from object level. + Dim myShape As New SuperShape + myShape.Draw() + + ' Get IPrintable explicitly. + ' (and IDrawable implicitly!) + Dim iPrint As IPrintable + iPrint = CType(myShape, IPrintable) + iPrint.Draw() + iPrint.Print() + End Sub +End Module diff --git a/Code/Chapter 9/InterfaceHierarchy/SuperShape.vb b/Code/Chapter 9/InterfaceHierarchy/SuperShape.vb new file mode 100644 index 0000000..3ac66f8 --- /dev/null +++ b/Code/Chapter 9/InterfaceHierarchy/SuperShape.vb @@ -0,0 +1,14 @@ +Public Class SuperShape + Implements IRenderToMemory + Public Sub Draw() Implements IDrawable.Draw + Console.WriteLine("Drawing...") + End Sub + + Public Sub Print() Implements IPrintable.Print + Console.WriteLine("Printing...") + End Sub + + Public Sub Render() Implements IRenderToMemory.Render + Console.WriteLine("Rendering...") + End Sub +End Class diff --git a/Code/Chapter 9/InterfaceNameClash/BlackAndWhiteBitmap.vb b/Code/Chapter 9/InterfaceNameClash/BlackAndWhiteBitmap.vb new file mode 100644 index 0000000..58d47e4 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/BlackAndWhiteBitmap.vb @@ -0,0 +1,17 @@ +' Notice each class method has been defined as Private +' and has been given very a nondescript name. +Public Class BlackAndWhiteBitmap + Implements IDrawToForm, IDrawToMemory, IDrawToPrinter + + Private Sub X() Implements IDrawToForm.Draw + ' Insert interesting code... + End Sub + + Private Sub Y() Implements IDrawToMemory.Draw + ' Insert interesting code... + End Sub + + Private Sub Z() Implements IDrawToPrinter.Draw + ' Insert interesting code... + End Sub +End Class diff --git a/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.sln b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.sln new file mode 100644 index 0000000..1620e37 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "InterfaceNameClash", "InterfaceNameClash.vbproj", "{3B8C68B8-32ED-4E34-96BF-D960523EDF7E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3B8C68B8-32ED-4E34-96BF-D960523EDF7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B8C68B8-32ED-4E34-96BF-D960523EDF7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B8C68B8-32ED-4E34-96BF-D960523EDF7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B8C68B8-32ED-4E34-96BF-D960523EDF7E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.suo b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.suo new file mode 100644 index 0000000000000000000000000000000000000000..ca9eaafb8f3b008aeb72e32bb0cbb3da5abcd7d8 GIT binary patch literal 23040 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 L{iXUFOZ()1VOG~t literal 0 HcmV?d00001 diff --git a/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj new file mode 100644 index 0000000..5ee1305 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {3B8C68B8-32ED-4E34-96BF-D960523EDF7E} + Exe + InterfaceNameClash.Program + InterfaceNameClash + InterfaceNameClash + Console + + + 2.0 + + + + + true + full + true + true + bin\Debug\ + InterfaceNameClash.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + pdbonly + false + true + true + bin\Release\ + InterfaceNameClash.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 + + + + + + + + + + + + + + + + + + + + + + + + True + Application.myapp + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + Designer + + + + + MyApplicationCodeGenerator + Application.Designer.vb + + + SettingsSingleFileGenerator + My + Settings.Designer.vb + + + + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj.user b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj.user new file mode 100644 index 0000000..a1d742b --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/InterfaceNameClash.vbproj.user @@ -0,0 +1,5 @@ + + + ProjectFiles + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceNameClash/Line.vb b/Code/Chapter 9/InterfaceNameClash/Line.vb new file mode 100644 index 0000000..3ecf4bf --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/Line.vb @@ -0,0 +1,10 @@ +Public Class Line + Implements IDrawToForm, IDrawToMemory, IDrawToPrinter + + ' This single class method defines an implementation for + ' each interface method. + Public Sub Draw() Implements IDrawToForm.Draw, _ + IDrawToMemory.Draw, IDrawToPrinter.Draw + ' Common rendering logic… + End Sub +End Class diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Application.Designer.vb b/Code/Chapter 9/InterfaceNameClash/My Project/Application.Designer.vb new file mode 100644 index 0000000..40fce7c --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Application.Designer.vb @@ -0,0 +1,13 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Application.myapp b/Code/Chapter 9/InterfaceNameClash/My Project/Application.myapp new file mode 100644 index 0000000..e62f1a5 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Application.myapp @@ -0,0 +1,10 @@ + + + false + false + 0 + true + 0 + 2 + true + diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/AssemblyInfo.vb b/Code/Chapter 9/InterfaceNameClash/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..f9134f3 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Resources.Designer.vb b/Code/Chapter 9/InterfaceNameClash/My Project/Resources.Designer.vb new file mode 100644 index 0000000..8b233d0 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("InterfaceNameClash.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Resources.resx b/Code/Chapter 9/InterfaceNameClash/My Project/Resources.resx new file mode 100644 index 0000000..25a6121 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Settings.Designer.vb b/Code/Chapter 9/InterfaceNameClash/My Project/Settings.Designer.vb new file mode 100644 index 0000000..a5fdd9f --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Settings.Designer.vb @@ -0,0 +1,73 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.1433 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + +Namespace My + + _ + Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property + End Class +End Namespace + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.InterfaceNameClash.My.MySettings + Get + Return Global.InterfaceNameClash.My.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/Code/Chapter 9/InterfaceNameClash/My Project/Settings.settings b/Code/Chapter 9/InterfaceNameClash/My Project/Settings.settings new file mode 100644 index 0000000..85b890b --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Code/Chapter 9/InterfaceNameClash/MyInterfaces.vb b/Code/Chapter 9/InterfaceNameClash/MyInterfaces.vb new file mode 100644 index 0000000..5436681 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/MyInterfaces.vb @@ -0,0 +1,14 @@ +' Draw image to a Form. +Public Interface IDrawToForm + Sub Draw() +End Interface + +' Draw to buffer in memory. +Public Interface IDrawToMemory + Sub Draw() +End Interface + +' Render to the printer +Public Interface IDrawToPrinter + Sub Draw() +End Interface \ No newline at end of file diff --git a/Code/Chapter 9/InterfaceNameClash/Octagon.vb b/Code/Chapter 9/InterfaceNameClash/Octagon.vb new file mode 100644 index 0000000..2e1c5f6 --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/Octagon.vb @@ -0,0 +1,15 @@ +Public Class Octagon + Implements IDrawToForm, IDrawToMemory, IDrawToPrinter + + Public Sub Draw() Implements IDrawToForm.Draw + Console.WriteLine("Drawing to the screen") + End Sub + + Public Sub RenderToMemory() Implements IDrawToMemory.Draw + Console.WriteLine("Drawing to off screen memory") + End Sub + + Public Sub Print() Implements IDrawToPrinter.Draw + Console.WriteLine("Printing to printer") + End Sub +End Class diff --git a/Code/Chapter 9/InterfaceNameClash/Program.vb b/Code/Chapter 9/InterfaceNameClash/Program.vb new file mode 100644 index 0000000..b7592fe --- /dev/null +++ b/Code/Chapter 9/InterfaceNameClash/Program.vb @@ -0,0 +1,34 @@ +' This example illustrates how to leverage the Implements +' keyword to resolve name clashes as well as a way to define +' a common shared implemention for interface members. + +Module Program + Sub Main() + Console.WriteLine("***** Fun with Interface Name Clashes *****") + Dim o As New Octagon + + ' Call IDrawToMemory.Draw() + Dim iMem As IDrawToMemory + iMem = CType(o, IDrawToMemory) + iMem.Draw() + + ' Call IDrawToPrinter.Draw() + Dim iPrint As IDrawToPrinter + iPrint = CType(o, IDrawToPrinter) + iPrint.Draw() + + ' Call IDrawToForm.Draw() + Dim iForm As IDrawToForm + iForm = CType(o, IDrawToForm) + iForm.Draw() + + ' BlackAndWhiteBitmap's interface methods + ' are private! + Dim bmp As New BlackAndWhiteBitmap + Dim i As IDrawToForm + i = CType(bmp, IDrawToForm) + i.Draw() + + Console.ReadLine() + End Sub +End Module diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..264a951 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,27 @@ +Freeware License, some rights reserved + +Copyright (c) 2008 Andrew Troelsen + +Permission is hereby granted, free of charge, to anyone obtaining a copy +of this software and associated documentation files (the "Software"), +to work with the Software within the limits of freeware distribution and fair use. +This includes the rights to use, copy, and modify the Software for personal use. +Users are also allowed and encouraged to submit corrections and modifications +to the Software for the benefit of other users. + +It is not allowed to reuse, modify, or redistribute the Software for +commercial use in any way, or for a user’s educational materials such as books +or blog articles without prior permission from the copyright holder. + +The above copyright notice and this permission notice need to be included +in all copies or substantial portions of the software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..95d248d --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +#Apress Source Code + +This repository accompanies [*Pro VB 2008 and the .NET 3.5 Platform*](http://www.apress.com/9781590598221) by Andrew Troelsen (Apress, 2008). + +![Cover image](9781590598221.jpg) + +Download the files as a zip using the green button, or clone the repository to your machine using Git. + +##Releases + +Release v1.0 corresponds to the code in the published book, without corrections or updates. + +##Contributions + +See the file Contributing.md for more information on how you can contribute to this repository. diff --git a/contributing.md b/contributing.md new file mode 100644 index 0000000..f6005ad --- /dev/null +++ b/contributing.md @@ -0,0 +1,14 @@ +# Contributing to Apress Source Code + +Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers. + +## How to Contribute + +1. Make sure you have a GitHub account. +2. Fork the repository for the relevant book. +3. Create a new branch on which to make your change, e.g. +`git checkout -b my_code_contribution` +4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted. +5. Submit a pull request. + +Thank you for your contribution! \ No newline at end of file