Refactoring A Module Into A Class: Changing Shared Fields To Instance Fields
Nov 14, 2011
I'm currently refactoring an old Visual Basic DLL (VB.Net), which stores all of its data in one module called Globaldefinitions as public fields. There are about 200 fields, referenced thousands of times all around the code:
Public Module Globaldefinitons
Public a As Short
...
Public zz10 As Double
[Code]...
I need to change the module into a class with non-shared fields. This means, each and every of these thousands of references needs to reference the instance of that class:
globalDefinitionsInstance.a = 5
How do I go about this efficiently?
Regular expressions operating on the source fall flat. Refactoring tools like Re-Sharper or CodeRush don't seem to offer this functionality. Visual Studio 2010 cannot do it automatically either.
I've got a BaseDataClass with shared fields and functions
CODE:
I have several classes that derive from this base class. The derived classes have all Shared functions that can be called directly from the BLL with no instantiation. The functions in these derived classes call the base Init(), call their specific stored procs, call the base CleanAll() and then return the results.
So if I have 5 derived classes with 10 functions each, totaling 50 possible function calls, since they are all Shared, the CLR only calls one at a time, right? All calls are queued to wait until each Shared function completes.
Is there a better design with having Shared functions in your DAL and still have base class functions? Or since I have a base class, is it better to move towards instance methods within the DAL?
Class Foo ReadOnly name As String Public Sub New(name As String, dependentUpon As Foo) Me.name = name
[code]....
The output of New Bar() is:
Dependent created. Dependent upon nothing. Independent created. Dependent upon nothing.
It seems fields are initialized in the same order as they appear in the source code, which (a) leads to an unexpected result, and (b) seems a little puzzling, given that one is normally not permitted to read from uninitialized variables in .NET, yet that seems to be working fine above.I would've expected VB.NET to be smart enough to initialize referenced fields first, and only then those that reference it; i.e. I'd have liked to see this output instead:
Independent created. Dependent upon nothing. Dependent created. Dependent upon Independent.
how to get VB.NET to behave like that instead, without simply having to swap the declaration order of dependent and independent inside class Bar?
I'm trying to create a table in Word using data from a table in Access. There are four fields in the access table that I need. 3 fields are text which I can populate the Word without any issues. However the fourth field is a memo with >255 characters.I'm struggling to come up with the proper code to allow me to populate the Word field with the memo data that has more than 255 characters. The code I have so far is listed below. But when it hits the memo field, it crashes on the line I marked with **. I know it's not text, but I've tried many different field types, but nothing has worked so far.[code]...
My intent is to have the code - on a button.click event - check the Username and Password fields and return an error depending on which is wrong. Or if both are wrong, return a different error message. I've set the username as parts and the password as parts (still learning how to use external authentication). [Code]
I have several sqldatasources for my gridview. All of the columns are autogenerated. However they all have some consistent fields and I'd like to make those fields template fields so I can modify the edit template for them such as adding a drop down menu. Is this possible?
I am building VS2008 app using Data Source Wizard. The Data connection is working. The Table Adapters are built. The DataSet is created and I can preview data through it. I used drag/drop from the DataSource/DataSet to put a DataGridView onto a form.I can view the records there. I can delete records there. But when I update or add records from there, all of the data is not getting changed. I am connected to ISeries DB2. If I add a new record the only field that get populated in the database is the key field (the first field in the file). If I update a record in the database, the only field that gets changed is the key field.
I have a series of text boxes in my form that can accept 6 digits. Upon entering the 6th digit I want the focus to move to the next text box. Is there a way to initiate a Tab command (just putting chr(9) didn't work...so that may be wrong) once the counter hits 6? I currently have the following code, using the .focus command but I am hoping to not have to create 25 subs to set focus to the next. My current
Private Sub txtEnter1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtEnter1.KeyDown
[Code]...
I can't just add txtEnter2.KeyDown (etc.) to the Handles of the sub declaration because then they would all set the focus to txtEnter2 instead of to the next text box. I'm sure it is something ridiculously easy but it is escaping my grasp.
I'm trying to obtain the values using the prospective GetValue(s) methods but I don't understand the syntax of the documentation. I'm sending the correct bindings (I believe) to filter the fields, and properties that i'm interested in usually
Re DataGridView Sorry don't really have any code - just a whole project. Basically I changed the underlying Access (accdb) Table by adding a new field, The new field shows up in the DataSources section of the Solution Explorer and in the "Edit DataSet with wizard" page but when I attach the binding source to a datagrid view, the new field is not there. I also created a new bindingsource but still not there.I just noticed I've another table where I changed the names to something more meaningful, and the old names are still there and the data for those fields doesn't display in the DataGridView
experience on how to create an engine using C# (VB.NET is okay too) that is generic enough to handle most cases of MS Word text fields I need to fill with data I'm getting from a database? In short, I'm about to embark on this little Office automation excursion and I'm hoping a little bit of feedback here.
Lets say we have an Access file in a well known path (i.e. "C:MyFolderMyFile.mdb"). That file does not have a primary key set on the table we are interested in . Is it possible to set one of the fields as a primary key (for example the "ID" field , which is also an AutoNumber data) ? And one more thing : I'd like to change the name of a field on that table . For example , lets say there is a field called "My Field 1" (note the space characters) and we want it to be renamed as "My_Field_1" . If it's possible , I'd like both these changes to be permanent in the data base file itself , not just in the imported DataSet ,
I have no idea what is going on here but it is strange to say the least.I created a new solution in VS2008Pro under windows 7 This solution has 2 projects one for the pc and one for a CE based device.There is one class module which is shared between the 2 projects.In VS2005 under xp this same basic project worked fine but here I am seeing error messages that appear out of no where.
Example the CE portion flags 3 lines initially 1 related to a file i.o function and 2 others related to socket methods. All three of these were supported in VS2005 using framework 2.0 which is the same framework I am using here. This is just the tip of the ice berg however.If I attempt to run the code it runs fine for the pc client and of course not for the CE device. If I make any kind of change, add a line, comment a line or just add a comment I get lots more errors with odd messages that are not even valid.
In one case after I saved it jumped from 3 errors to 30, in another case to 50 and yet another to 144 errors yet the only errors that were present were the original 3 that were flagged.The ide threw errors like Try Catch must end with matching End Try.Get no longer supported ' apparently referring to the binary file get but here it is used as the get portion of the property.Get must end with matching end get.It also started complaining about functions and data types.For example saying "an is not declared" pointing to the word Boolean Or telling me my functions are not declared point to only 1/2 of the function name.
I do not see any errors in the code and it reports no errors in VS2005 under XP.As a test I tryed adding a new property to the project after it was telling me there were 144 errors. I allowed the ide to do most of the work and when I hit enter the errors went back to 3. Then I saved the project and the errors went to 105 pointing first at the new property just created.
I have a class being populated from comma separated rows in a text file.I am trying to have the name property of each object appear in a listbox, then have the rest of the properties of a selected object show up in text boxes. How do I load the properties of the selected object to the correct textbox?
I have a table which contains a list of products for a company. They input data about how much stock they have and also the level at which they want to be reminded that they need to order new stock.
[Code]...
I want to list all the true results in a form which the user is then able to navigate through. What would be the best way to go about doing this?
And is this an good example of a member that should be shared? If so does both the Private and the Public need to be shared. I just started using Refactor Pro and it almost always is recommending that I make all members shared. Is there ever a good reason not to do so?
In VB6 I always wrote my apps using Sub Main as the starting point. I see in .NET I'm able to wrap it in a shared class (see [URL] for example). However, the downside is that I can't declare any class-level variables, because of course the class is never instantiated. Being shared, it limits what the code can do. So, any benefit to use a shared class and shared sub main which I'm missing here.
Otherwise it seems using a module (as in VB6) provides a lot more flexibility. Of course, I should also ask if "Application Framework" is really the way to go for real-world apps, or if it's only there for beginners and real-world coders turn it off and use Sub Main instead? If so, how are the events "UnhandledException" and "NetworkAvailabilityChanged" done if App Framework is turned off?
Im builtina an windows application based on 3 tiers model. I have BLL, DAL, and UI Class. IN DAL I have SQL code, In BLL I have proprietie and methods .Im trying to validate the input fields on BLL class and no problem,and im just do it after SET instruction. I also PUT a message to view error. But From BLL class I want to put the focus in textfield that return error. I cant acess form proprieties (the forms are on UI class).
In my first attempt to create a Class that contains something useful (if you will), I am a little lost what a sound way to proceed is. I am trying to make a table that has fields and records. Perhaps imagine a tiny spreadsheet. So, I create my Class. Properties might include the number of columns, the column titles, and the number of rows or records. I then think the thing to do is create a couple of structures to be used within the class. Thus far I have this:
Imports System.Console Public Class ConsoleTable Property NumberofCOlumns As Int32
[Code]....
Problems I am creating in my mind include:
1) In the Field Structure, could I make the FieldValue so that I can change the data type? Meaning sometimes I want an instance of a Field to hold a string,or an integer, or a decimal.
2) In the Record structure, for any given instance of one I don't know the number of fields it will hold until I create the new instance. I tried Public RecordFields(FieldCount) As Field in the Structure, but that's not allowed. I then used Public RecordFields() As Field, and then in my code used the ReDim method. Is there a better way?
3) With the Table Class, same problem. The number of records within any instance of the class needs to be dynamic.
I have a class (using a class rather than a structure only because I can set a default field value for the fields I declare in the class) and I'm using a web service that returns information (demographic information) in JSON. I am using LINQ to get the values of each "entry" from the returned list and in that, I have to parse through and pull out the actual data that I want.Here's how I have it doing right now (just a start, there are 44 of them total, thus my question which will follow the code):
Dim returnedStats = From ljo As Linq.JObject In returnedObject.SelectToken("results") ' ' For Each stat As Linq.JObject In returnedStats
End Class When I am writing code, and i want to use thesenew properties or fields, the intellisense shows me the new properties and fields mixed with those inherited. Is there a way to show them all grouped togheter separated from those inherited ( a part giving them a common prefix in the name)?
I am trying to implement transactions across multiple TableAdapters in VB.NET (using Visual Studio 2010) by extending the partial class as described in the following examples:
I have a solution made up of several projects. Everything is properly referenced, the solution builds and runs. Now, when "view class diagram" for this class, it doesn't show any fields. It shows "dmxProgram" as a property, but it doesn't show any of the non-property private fields. Therefore I can't add associations to my class diagram for those fields that do not appear.
What is the purpose of using shared methods that return an instance of a class, as opposed to a constructor?
ie: in VB.net, the system.drawing.color class has shared method "FromArgb(int, int, int) as color". This is different from java's implementation which simply is a constructor that takes three ints. Why the decision to do one or the other?
Let say I have a function inside a class which require 4 parameter (table name,field name,field value, return field) When I use this function my form, such as
myclass.Search("customers", <-- after pressing the "," a popup list will be displayed that contain all the fields in "customers" table.