I've manually set a label to a 'static', when I run the code it works fine but the next time I run the code it gives me a build error, this is because the 'static' got removed automatically.
I edited this in the formMain.Designer.cs file.
I looked on google and in Visual Studio itself but didn't find anything.
Here is a link to Paste-bin as the code would take to much space:
https://pastebin.com/LkPwrJhY
public static System.Windows.Forms.ToolStripStatusLabel lblSerialStatus;
The label I changed is on the last line of code, 'lblSerialStatus', at line 180.
I'm changing this label because I want to change it from an other form.
Thank you in advanced!
This is because formMain.Designer.cs file is auto-generated. Meaning every time you change something in the visual designer this file gets re-generated over writing any manual changes done to the file
If you really want the label somewhere else you'll need to pass it as a parameter to some method. Also, static UI elements make no sense, because the UI will not always be there or be accessible
Changing Designer.cs file is not recommended. The file is automatically generated and it will be generated again whenever you change the corresponding forms file.
look before InitializeComponent() its also mentions in your generated designer Code
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
If you want then you can create another file which contains a partial class where you can put all such logic or function
Related
I made my toolstrip too narrow. I went into the Form1.Designer.cs and tried to fix it. I found:
this.toolStrip1.Size = new System.Drawing.Size(284, 25);
and changed 25 to 55. When I run visual studio again it tells me that the code changed, and asks me if I want to run it. But it seems like the graphical design tool somehow overrides my changes, because the with stays the same when I run the application again.
I found this interesting bit of code in the Form1.Designer.cs
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
Is there something I can do there to make the graphical design tool not able to change my code?
Yeah I also tried the most obvious solution by trying to change the layout in the graphical tool itself, but I can't re-size the toolstrip there
set AutoSize property to false
this.toolStrip1.AutoSize = false;
this.toolStrip1.Size = new System.Drawing.Size(284, 55);
I am getting this error when i open the design of a Winform.
Message 1244 The designer cannot process the code at line 108:
this.cancelButton.DialogResult = DialogResult.Cancel;
The code within the method 'InitializeComponent' is generated by the designer and should not be manually modified. Please remove any changes and try opening the designer again.
But when either i remove this piece of code from the designer.cs or change it to
this.cancelButton.DialogResult = System.windows.Forms.DialogResult.Cancel;
it works. My problem is i have this problem at almost all the winforms over a solution at many places. How can i resolve this issue to all places? Any way?
Advice from #zespri and #bansi are some good pieces, but you are suggested to do all customized construct time design in your constructor, after InitializeComponent().
When I attach a event on a control in my Windows Form I've got the problem that, after a few time, it detaches from it automatically. Let me explain, For example if I've got this line of code:
this.btnMainMove.MouseMove += btnMainMove_MouseMove;
And then I'll write the method btnMainMove_MouseMove in the form code, it works well for a few times but then in the designer file the line written above automatically deletes and I remain only with the method in the form code file.
This thing doesn't happen for the Click event but only for the methods that I create like MouseMove, MoseOver, KeyDown.
I'd like to know why this happens and how I could prevent this.
Thank you all!
Designer files are generally well marked with a message like so:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
The message is pretty clear. Changes can and will be lost.
These kinds of files, for instance, often have a tool that can be executed manually (using context menu options) but are most often executed automatically, after saving the accompanying *.cs files, compiling, etc.
Attach your events in the constructor, on load, or using the visual designer (which will track requirements based on layout files and other such things, but out of your concern).
I don't know what's the problem but i can suggest you use lambda expressions and not the designer
this.btnMainMove.MouseMove += (sender,event) =>
{
//your event logic here
};
but do this without clicking the event in the GUI of Visual Studio so you don't use the designer.
Are you editing *.designer.cs file manualy?
It is good to avoid it, but you can subscribe to this event in constructor, right after InitializeComponent() method.
The designer makes changes only in *.Designer.cs files...
If you add the Handlers in the Constructor or the Load-Event of the form the designer won't delete your code.
I was wondering is it possible to prevent Visual Studio from updating specific lines that are changed by me?
For example i have separate resource only project (images, sounds, etc). I change some lines in Form.Designer.cs and make so all images are loaded from resource dll. But once i update Form it self everything goes back to default and all resources that were used by form gets copied to Form.resx file.
How could i solve this?
Nope.
As stated in the begining of the file, the *.Designer.* is an auto generated file. It's rebuilt every time that the file it depends upon is saved, so you should never change any code there that you don't want to be messed.
It is preferable to separate the code that the form designer generates from the code that you want to have some control over. The order in which you need to address this code can then be handled within the constructor of the form. Example:
namespace FormTest
{
public partial class Form1 : Form
{
private Label PostAddedLabel;
public Form1()
{
InitializeComponent();
PostInitializeComponents();
}
private void PostInitializeComponents()
{
if (!this.DesignMode)
{
PostAddedLabel = new Label();
PostAddedLabel.Left = 100;
PostAddedLabel.Top = 30;
PostAddedLabel.Text = "The Post-added Label";
this.Controls.Add(PostAddedLabel);
}
}
}
}
We can simply design the form within the designer, after a successful design phase we then can MOVE the declaration, assignments and related code that we want to separate to the PostInitializeComponents method.
By using the !this.DesignMode decision, the form will show the separated controls in Runtime mode. When in designer-mode these controls will not be shown, assuring that the system will not affect these controls when designing the form.
In case you want to use this methodology also in usercontrols, try to embed the "IsDesignerHosted" method over "DesignMode" from the following article: DesignMode with Controls
Hope this answers the question?
No. Visual Studio does not "update" the Designer file, it deletes it and writes an all new copy. No possible way to do what you want.
You should add your code to your code behind. It's the same class.
I wrote a bunch of code in the .cs file in c# for a winforms application. The application runs fine, and everything is in it's place.
Something like this:
using..
namespace Temp
{
public class Temp : Form
{
Button b1;
TextBox t1;
Temp()
{
b1.Text = "Some Text";
b1.Size = new Size(50,20);
...
}
void function1()
{
// stuff
}
static void Main()
{
Application.Run(new Temp());
}
}
}
How can I modify my code (or fix it somehow) so that the design view displays the elements in their correct positions and view so that I can visually edit them instead of having to trial/error everything.
Edit for Clarification
My application runs fine. The problem is, that I didn't use designer to create the application and so in the designer view, the app is empty. But not empty when I run it, since everything is positioned programmatically in the .cs file. My question is, how can I fix this, so that the designer shows the objects correctly.
There is no quick fix other than to redesign everything?
So to get this shown within the designer you have to know how the designer works.
For every MyForm.cs there will automatically be a file called MyForm.Designer.cs be created. Within this Designer file there will be only one function called InitializeComponents(). This function will be called within the constructor of your MyForm.cs file.
The design viewer itself is responsible for the Designer file, so any change to this file while the design view is open would normally be discarded. Also if you put some code into the designer file that is not needed be the designer will be truncated.
So the next question is, when will this truncation happen? When you freshly open the design viewer of a form, it will read in everything from the Designer.cs file without making any changes. If you make any changes onto the form by the designer the complete file will be rewritten with all the settings already read in including your latest changes.
This behaviour can be monitored if you open the designer file also as source code view, make some little changes in design mode and afterwards take a close look at the left of the source file. There will be the changes marked with a yellow or a green marker.
Now after all this stuff of informations, you can try the following procedure to get your code into the designer:
Open the design view and put some simple control onto your form (e.g. TextBox)
Save and close the design view and open the Designer.cs file as source file
Copy all your variables name of your controls at the end of the file, right below the textBox1 line
Copy all your control property settings within the InitializeComponent() function right below the property settings of the TextBox
Copy all your control constructors to the top of the file, right below the constructor of the TextBox
Save the file and open your form in design view
Select the dummy TextBox on the design view and delete it
This change within the DesignView leads to a complete rewrite of the designer.cs file, ordering all your manually added stuff the right way.
So this is the way to go. Last but not least another little trick:
Every programmer uses the using-statement to not write the whole path to every class (like System.Windows.Forms.TextBox), but the designer writes always the whole path. To make it a little easier for your copy and paste session you can also add a using statement at the top of the file. After saving and changing something in Design View all this stuff will be re-written automatically. So you don't need to add all this paths manually while your adding your stuff to the Designer.cs file.
Your best option is probably to use the properties panel in the designer to set the positions etc (or maybe just drag them?).
You could go digging around in the designer file for the form (something.Designer.cs), but this isn't a fantastic idea because it can be pretty sensitive to changing things in ways the designer doesn't expect. Having said that, it looks like you're not actually using the designer to make your form (the class would be partial, for one thing), in which case you're SOL.
In that case, you need to copy the designer code from CS to designer.cs. So that you can use designer. I think this is the simplest approach.
Looks like this file was hacked from a class file instead of being generated by the system when you create a new winform.
You need at least an InitializeComponent(); call in your constructor. However you are missing a lot of other code that is generated for you when you create the file such as Dispose().
Best bet would be to right click your project in the solution explorer and click Add Windows Form then start over.