VS2008 and Updating controls ? [modified]
-
PROBLEM: The problem I am having is, given the layout of the Microsoft template for developing a Windows App, I need to know what is the best way of implementing a method to make modifications to a control on my main form (Form1). NECESSARY BACKGROUND: A basic Windows program comes up with a Form1.cs and a Program.cs (I have renamed Program.cs to FileOrganizer.cs). In FileOrganizer.cs there is a Main method. Within this Main method is "Application.Run(new Form1());". What I want to do (within another method of the FileOrganizer class) is to update a control programmatically. The fact that Form1 is "run" the way it is (i.e., using "Application.Run"), makes it so there is no reference to an object. Because there is no way to reference the Form1 object I don't know of a way to modify one of the controls on Form1. If I create a global reference to Form1 and then create a "new" instance of Form1 (within Main) I receive an error ("Error 4 An object reference is required for the non-static field, method, or property 'FileOrganizer.FileOrganizer.mainForm'"). My implementation is as follows:
namespace FileOrganizer { public class FileOrganizer { private Form1 mainForm; /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); mainForm = new Form1(); Application.Run(mainForm);
I understand that this error occurs because the Main method is static although I don't understand why. One way of making this work is by doing the following:public class FileOrganizer { private Form1 mainForm; /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FileOrganizer fg = new FileOrganizer(); } public FileOrganizer() { mainForm = new Form1(); mainForm.Visible = true;
But I am not sure if this is the proper way to do what I need to do (i.e., provide a way to modify a control on Form1 in another method of the FileOrganizer class).Do not get it. Can you clarify the question again and tell us what you were trying to do in a sentence?
LuckyBoy
-
Do not get it. Can you clarify the question again and tell us what you were trying to do in a sentence?
LuckyBoy
This sentence was copied from my previous post: "What I want to do (within another method of the FileOrganizer class) is to update a control programmatically." For example, I want to add some nodes to a TreeView control. So, this is what I want to do; however, you will not be able to respond with an appropriate answer unless you read through my previous post entirely.
-
This sentence was copied from my previous post: "What I want to do (within another method of the FileOrganizer class) is to update a control programmatically." For example, I want to add some nodes to a TreeView control. So, this is what I want to do; however, you will not be able to respond with an appropriate answer unless you read through my previous post entirely.
Mike Bluett wrote:
For example, I want to add some nodes to a TreeView control.
If you want to do this, why donot you put the update control method in the mainform constructor? Maybe I misunderstood you question. However, this is not common to initialize the control in this way for windows form app.
LuckyBoy
-
Mike Bluett wrote:
For example, I want to add some nodes to a TreeView control.
If you want to do this, why donot you put the update control method in the mainform constructor? Maybe I misunderstood you question. However, this is not common to initialize the control in this way for windows form app.
LuckyBoy
Maybe I wasn't clear enough. This is not about initialization. This is about modifying controls after initialization. Controls should be able to be modified anywhere within the program and at any time while the program is running.
-
Mike Bluett wrote:
update a control programmatically.
What do you mean? What are trying to accomplish? Typically you would create a method in the form class to call and manipulate the control from there.
only two letters away from being an asset
I have updated my original posting in order to try and make it more clear. Hope this helps.
-
Maybe I wasn't clear enough. This is not about initialization. This is about modifying controls after initialization. Controls should be able to be modified anywhere within the program and at any time while the program is running.
Yes, however, you cannot update a control from a thread other than the main UI thread. A well documented fact of Windows UI work. There are plenty of examples, here and elsewhere, about adding nodes to a treeview, I suggest you do a little research.
only two letters away from being an asset
-
I have updated my original posting in order to try and make it more clear. Hope this helps.
As I said before, the typically you would expose a method on the form to update and manipulate the control. This is an advanced topic that seems to be above your level of skill, I suggest you do more research and learn more about forms and controls before you continue.
only two letters away from being an asset
-
As I said before, the typically you would expose a method on the form to update and manipulate the control. This is an advanced topic that seems to be above your level of skill, I suggest you do more research and learn more about forms and controls before you continue.
only two letters away from being an asset
It should not be an advanced topic!! This is something ANY programmer would want to do with almost ANY program. Besides before posting here I have done extensive reading in all kinds of C# books and resources and cannot find an answer to my problem. Basically, I am trying to understand why Microsoft would create such a complicated approach to doing what should be incredibly simple. What I want to do is simply use a GLOBAL reference to Form1 so that I can setup an object reference to Form1 so that it can be accessed from another method within the Program class (or in my case the FileOrganizer class). I am forced to use the "Application.Run" method; otherwise, the application will quit after it finishes executing my code. The Microsoft template places the "Run" call within Main. Because Main must be static, it will not let me create a GLOBAL reference to "Form1". I can create an object reference to Form1 within Main; however, it is not GLOBAL and I cannot access it from another method in the FileOrganizer class. I am sure that Microsoft, in their infinite wisdom, provided a mechanism to accomplish this in a simple fashion; however, it is not obvious to me. I had previously written another program (which I started in SharpDevelop). In this program, all of the modifications to the main form are done through events. However, in my current program, there are no events that get fired (i.e., mouse clicks). What I am doing is reading some data from a database trying to use that data to populate a TreeView (which resides on the main form). If I could create a GLOBAL variable, this would be incredibly simple to implement. Because I can't this becomes a major complication. Why it has to be this complicated is beyond me; however, I am willing to spend the time to understand it. If you know of some code I can reference in some book or some web reference that can help me to understand this I would be very grateful.
-
It should not be an advanced topic!! This is something ANY programmer would want to do with almost ANY program. Besides before posting here I have done extensive reading in all kinds of C# books and resources and cannot find an answer to my problem. Basically, I am trying to understand why Microsoft would create such a complicated approach to doing what should be incredibly simple. What I want to do is simply use a GLOBAL reference to Form1 so that I can setup an object reference to Form1 so that it can be accessed from another method within the Program class (or in my case the FileOrganizer class). I am forced to use the "Application.Run" method; otherwise, the application will quit after it finishes executing my code. The Microsoft template places the "Run" call within Main. Because Main must be static, it will not let me create a GLOBAL reference to "Form1". I can create an object reference to Form1 within Main; however, it is not GLOBAL and I cannot access it from another method in the FileOrganizer class. I am sure that Microsoft, in their infinite wisdom, provided a mechanism to accomplish this in a simple fashion; however, it is not obvious to me. I had previously written another program (which I started in SharpDevelop). In this program, all of the modifications to the main form are done through events. However, in my current program, there are no events that get fired (i.e., mouse clicks). What I am doing is reading some data from a database trying to use that data to populate a TreeView (which resides on the main form). If I could create a GLOBAL variable, this would be incredibly simple to implement. Because I can't this becomes a major complication. Why it has to be this complicated is beyond me; however, I am willing to spend the time to understand it. If you know of some code I can reference in some book or some web reference that can help me to understand this I would be very grateful.
Mike Bluett wrote:
I have done extensive reading in all kinds of C# books and resources
It is quite obvious your research has been lacking. It is also quite apparent you don't have sufficient understanding of Windows programming to tackle this task. It is relatively easy to do and you have been given the answers, pay attention.
Mike Bluett wrote:
I am forced to use the "Application.Run" method
Correct, this is the way a Windows app is started. If you had the knowledge of this environment you would understand that. Form1 (or whatever you name it) is the application, not Program!
Mike Bluett wrote:
Why it has to be this complicated is beyond me
Yes it is. Hire someone to do it for you.
Mike Bluett wrote:
If you know of some code I can reference
Have your looked here[^] Since its Christmas Eve here, maybe you can hope Santa will bring you a clue, or at least a fully functional app all wrapped up in a pretty bow for you. Otherwise, I would suggest you stop complaining and actually learn the subject.
only two letters away from being an asset
-
Mike Bluett wrote:
I have done extensive reading in all kinds of C# books and resources
It is quite obvious your research has been lacking. It is also quite apparent you don't have sufficient understanding of Windows programming to tackle this task. It is relatively easy to do and you have been given the answers, pay attention.
Mike Bluett wrote:
I am forced to use the "Application.Run" method
Correct, this is the way a Windows app is started. If you had the knowledge of this environment you would understand that. Form1 (or whatever you name it) is the application, not Program!
Mike Bluett wrote:
Why it has to be this complicated is beyond me
Yes it is. Hire someone to do it for you.
Mike Bluett wrote:
If you know of some code I can reference
Have your looked here[^] Since its Christmas Eve here, maybe you can hope Santa will bring you a clue, or at least a fully functional app all wrapped up in a pretty bow for you. Otherwise, I would suggest you stop complaining and actually learn the subject.
only two letters away from being an asset
Since it is Christmas I would think you would be a little more civil than you have been!!! My research maybe lacking and that is why I came to this forum to get me on the right track, but all I have been greeted with is ARROGANCE!!! I think you should take a couple of long breaths and relax a little. It might help your composure. Merry Xmas!!
-
PROBLEM: The problem I am having is, given the layout of the Microsoft template for developing a Windows App, I need to know what is the best way of implementing a method to make modifications to a control on my main form (Form1). NECESSARY BACKGROUND: A basic Windows program comes up with a Form1.cs and a Program.cs (I have renamed Program.cs to FileOrganizer.cs). In FileOrganizer.cs there is a Main method. Within this Main method is "Application.Run(new Form1());". What I want to do (within another method of the FileOrganizer class) is to update a control programmatically. The fact that Form1 is "run" the way it is (i.e., using "Application.Run"), makes it so there is no reference to an object. Because there is no way to reference the Form1 object I don't know of a way to modify one of the controls on Form1. If I create a global reference to Form1 and then create a "new" instance of Form1 (within Main) I receive an error ("Error 4 An object reference is required for the non-static field, method, or property 'FileOrganizer.FileOrganizer.mainForm'"). My implementation is as follows:
namespace FileOrganizer { public class FileOrganizer { private Form1 mainForm; /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); mainForm = new Form1(); Application.Run(mainForm);
I understand that this error occurs because the Main method is static although I don't understand why. One way of making this work is by doing the following:public class FileOrganizer { private Form1 mainForm; /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); FileOrganizer fg = new FileOrganizer(); } public FileOrganizer() { mainForm = new Form1(); mainForm.Visible = true;
But I am not sure if this is the proper way to do what I need to do (i.e., provide a way to modify a control on Form1 in another method of the FileOrganizer class).I found the answer on another forum. All I needed to do was to make the GLOBAL definition static due to the fact that the the method it is called from is static. Very simple as I expected it might be. Code as follows:
public class FileOrganizer { private **static** Form1 mainForm; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); mainForm = new Form1(); Application.Run(mainForm); }
It's amazing how much of a run-around I was given on this forum.