How to change a console application to a windows form application? - c#

I had been developing a console application, until our project needed a fancy UI to go with it, so we decided to change the project type to windows form application. We tried putting the code below in our entry point:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new UI());
It kind of works, but the original console window is still there.
I've googled out some useful infos like this one, but what all they do is essentially killing the window after it has been created, not tackling the root of the problem. So is there any more elegant way to do this?

Right click your project in the solution explorer and select properties.
Then, under the "Application" tab change the "Output type" of your project from “Console Application” to “Windows Application.”

The project type needs to be set to Winexe (depending on the IDE, also called Windows application) instead of Exe (depending on the IDE, also called Console application) in the project properties.

Related

Caption in Windows taskbar right-click menu

How can I change at runtime the caption in the right-click context menu for the taskbar button for my program? I mean the text circled in red here.
The caption appears to be taken from the assembly title. I need to alter the caption dynamically at runtime from code. I have one EXE which the users "see" as a number of different apps - it reads data files at runtime and then customizes its appearance massively, including the window caption. I need to also customize the caption in this right-click menu. There's no single caption that covers everything. I'm willing to consider P/Invoke calls to the Windows API if necessary.
This is a WinForms .Net 4.5.2 program, screenshot is Windows 7.
I have a solution for you, but not sure it will work for you
I will make some assumptions to drive home my solution
It is a winforms project built using visual studio
You haven't modified your original Program.cs file
All your assembly attributes are in AssembyInfo.cs
Program.cs typically looks like this
using System;
using System.Windows.Forms;
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
One way to deal with it is to build your app as a Class Library sans the Program.cs, let's call it App.dll. Then merge your code from Program.cs and AssemblyInfo.cs (only relevant portions) into a single file and let's call it App.cs. You should auto-generate App.cs either with a separate script or via App.cs itself
Now build App.cs referencing App.dll generating App.exe. This App.exe should work exactly like your current executable.
Once all this is established, you can already see where we are going with this.
Now, when your App.exe start's up and reads the config to make changes, you should auto-generate App.cs with a different AssemblyTitle like below
[assembly: AssemblyTitle("MyAssembly")]
and generate App-Flavor1.exe, and spawn that process and exit out of App.exe
Long time ago but...
You can modify it in the "Registry Editor".
Open the "Registry Editor" (in windows 10, click on START > type reg and you will have it on the search results).
Click on the "Edit" menu > "Find". A dialog box will be opened.
Type the name of the executable file of your program (e.g. "MyAppName.exe") > "Find Next".
Now you should see property which name ends with "FriendlyAppName" and the value is the current caption name. Right click on it and then click on "Modify".
Type your desired caption name in the "Value" textbox. > OK.
If you have several copies of this app in your PC then go over all of them using the "Edit > Find Next" menu item and modify them all.
Be careful not to modify any other values in the Registry Editor, it may harm your PC well being.

A project with an Output Type of Class Library cannot be started directly

Please can someone could explain why I get this error and what to do to fix it (or what I'm doing wrong!). The steps I have taken are
Download Source code from http://www.codeproject.com/Articles/16859/AForge-NET-open-source-framework
Opening in VS2010 shows the references cannot be found
Re-Add all 3 references from PlayingCardRecognition\bin\Release so no further warnings
When I try and build or Run I get the following message
To fix this issue, do these steps:
Right click the Project name in Solution Explorer of Visual Studio
Select Set as StartUp Project from the menu
Re-run your project
It should work!
If it did not work, be sure that you have set your start page. If your project is C# Windows Application or C# Console Application, try this:
Right click the Project name in Solution Explorer of Visual Studio
Select Properties
Select the Application tab
In the Output Type drop box
Select the correct application type of your project
Re-run your project and let me know if it won’t work.
The project type set as the Start-up project in that solution is of type ClassLibrary. DUe to that, the output is a dll not an executable and so, you cannot start it.
If this is an error then you can do this:
A quick and dirty fix for this, if that is the only csproj in the solution is to open the .csproj file in a text editor and change the value of the node <ProjectGuid> to the Guid corresponding to a WinForms C# project. (That you may obtain from a google search or by creating a new project and opening the .csproj file generated by Visual Studio to find out what the GUID for that type is). (Enjoy - not many people know about this sneaky trick)
BUT: the project might be a class library rightfully and then you should reference it in another project and use it that way.
.Exe's and .dll's are both assemblies. The key difference is that executeables define an entry point Main which can be invoked by the runtime. The error
"Class library cannot be started directly"
is due to the fact that said .dll's do not have a Main. To fix this issue, change the project type to a Windows application/Console application and define an entry point. Or, add a new project that is of type Windows application/Console application and reference said .dll.
The project is a class library. It cannot be run or debugged without an executable project (F5 doesn't work!!!). You can only build the project (Ctrl+Shift+B).
If you want to debug the code add a console application project (set it as the start up project) to the solution and add the reference to the library.
The project you downloaded is a class library. Which can't be started.
Add a new project which can be started (console app, win forms, what ever you want) and add a reference to the class library project to be able to "play with it".
And set this new project as "Startup project"
The project you've downloaded is a class library, not an executable assembly. This means you need to import that library into your own project instead of trying to run it directly.
Your project type is a class library one would suspect, add a ConsoleApplication or WindowsApplication and use that as your startup object. Reference this project and then access the code.
If you convert the WPF application to Class library for get the projects .dll file.After that convert the same project to the WPF application you get the following error.
Error:".exe does not contain a static main method suitable for an entry point".
Steps to troubleshoot:
1.Include the App.xaml file in the respective project.
2.Right Click on App.xaml file change the build action to Application Definition
3.Now Build your project
Goto the Solution properties -> on Build right side you see the startup project type. here you need to select the console appication/windows appication.
If you got this issue (got it in Visual Studio 2017 RC), and you don't get any of the things listed by Mak post from step 3 onward "4 In the Output Type drop box....", it is because you made a Class Library app when you want to create a cross platform app, so here is the solution :
1 Start a new project
2 select Visual C# and cross-platform app.
3 select cross-platform app (Xamarin and native app)
4 select blank form.
From then , right click, select as startup project and build as mentioned by Mak, and it should work.
If you can afford to start from scratch, it could do the trick as it did for me.
This could do the trick for the main issue as well, but must be adapted to your current version of Visual Studio ("Xamarin.forms portable" for visual studio 2015 for example).
Bye!
VS -> Debug -> Attach unity debugger -> double click project
Set your api project to a startup project:
Right click the api Project than choose Set as startup Project.
Just right click on the Project Solution A window pops up. Expand the common Properties. Select Start Up Project
In there on right hand side Select radio button with Single Startup Project Select your Project in there and apply.
That's it. Now save and build your project. Run the project to see the output.
_Sarath#F1
To fix this issue, do these steps:
Right click the Project name in Solution Explorer of Visual Studio
Select Set as StartUp Project from the menu
Re-run your project It should work!

Using a console application to reference a VB.net exe form function

I am very new to referencing dll's and .exe's. I have an application that sends reports to users on a daily basis. This is a manual process, and I have been tasked to automate that process. Now, I would like to create a console application, and reference that form that does the work on the .exe. I am so lost on how to do this. Can anyone provide me with a sample or tutorial on how to do this?
Add a reference to VB.net assembly (*.exe file) in your console application project, inspect it with object browser and call required method.
To add a reference, right click on reference folder of your project :)

Application Icon doesn't change correctly using c#

I changed my Application's icon for a new one, by going to: "Project/MyProject Properties/Icon and Manifiest", and load the new icon. Now, in my debug folder the icon of my .exe file appear with the new icon, which is ok, but when I execute the .exe, the application icon in the taskbar still showing the old one.
Please advice.
You have two place to change your icon.
First place
The first place is in the project.
Right click on the project
Select Property
Go in Application Tabs
Choose Icon and Manifest and select the icon you want
Second place
The second place is in the property of your Winform.
Open the Form
Click on the Form
Press F4 or go in the property of the Form
Go down in the property to find "Icon"
Select the icon you want.
The reason you have a different icon in the taskbar than your application (.exe) icon is that the taskbar use the current form icon to display in the taskbar.
After encountering the same problem, I resolved it by doing the following:
Just stop your explorer.exe from task manager and rerun the explorer.exe again.
As a commenter mentioned, you should set in the properties of the *.ico file: Copy to Output Dir: Copy if newer.
This property is not absolutely required. I developed a winform application and tested it without icon. Then I created and added the icon. The icon showed when running with the VS debugger. I copied the bin/debug directory to another pc and there it ran with showing the icon.
But the icon did not show on the development machine when the app started by clicking the *.exe file.
Logout/login windows did not cure this.
Change the Copy To Output Dir property on the icon file to Copy If Newer, and rebuild the application, did help. Now I can start the app by clicking the *.exe and the icon shows nicely.
Conclusion:
It is not always required to build the app with the icon file copied to the output directory, but with this measure you will increase your chances.
Make sure that your *.ico file contains an icon of the proper size (like 16x16 for small task bars).
Copy your new icon in Project Properties --> resources --> icons
In your Main_Load function add:
this.Icon = Properties.Resources.newIcon;
Check this out for icon information and sizes it supports. Assuming this is just a simple error that you are getting check if your ico's are as per what is specified here http://msdn.microsoft.com/en-us/library/ms997636.aspx
I had the same problem and none of the above solved it.
In my case, I had defined the icon different for two different langages (default language english and german). You can see this if there appear two resources files: FormX.resx and FormX.de.resx
With the accepted answer only default icon was changed. But when running the application on my pc the german icon was used.
So I had to change the icon for both resources. In Visual Studio you can change the current resource language by switching the language item (in the forms properties) from default to another language.
I had the same problem. The "first place" mentioned by Patrick is about the file icon, i.e. the .exe aspect. The "second place" is about the form (in the upper left corner).
Restarting windows file explorer seemed to be a satisfactory solution too. But all this didn't work today. I didn't restart the computer, by the way.
This is what really displayed the new icon in the task bar: I realized that there was an old shortcut of the .exe on the desktop. Deleting the shortcut did the job.

Cannot Place User Control on Form

I've created a C# WinForms application using VS2010. I'm new to creating user controls so I created a new user control (as part of the same project).
When I rebuild the project, the new control appears in the toolbox. And when I drag the control from the toolbox onto a form, I get the following error.
Failed to load toolbox item 'TagGroup'. It will be removed from the toolbox.
This happened the only other time I created a user control as well. I've searched the web but most answers I found seemed related to having the control in a separate assembly. (Note that I found plenty of questions with the same problem I'm having.)
Can anyone suggest where I should look next?
My application need to be 64-bit. In order to use custom user controls in the designer I just added a new project to my solution. This new project use the "AnyCPU" setting and contains all my user controls.
My solution contains the following projects:
MyApp which is my main project (Windows Form Application) compiled in 64-bit and referencing my second project
MyApp.UI.UserControls (class library) is compiled for "Any CPU" and contains all my user controls
Works like a charm and it's clean
By the way, there is a Microsoft support article about that issue.
Action: You attempt to use a 64-bit component within the Microsoft Visual Studio Integrated Development Environment (IDE).
Error cause: This behavior is by design. Visual Studio is a 32-bit process, and therefore can only execute 32-bit modules. While Visual Studio allows you to add a reference to a 64-bit assembly, it cannot actually JIT compile it to 64-bit and execute it in process.
Resolution:
Rebuild the assembly using the "AnyCPU" setting. This would allow
the component to run within a 32-bit process (such as Visual
Studio), or in a 64-bit process.
Add the assembly as a reference and load the control dynamically at
run-time. Although you still would be unable to use the
control within any designer inside Visual Studio, you can still
write the code needed to instantiate the control and set it's
properties accordingly.
Source: http://support.microsoft.com/kb/963017
I finally figured this one out.
The project I'm working with uses two class-library assemblies. Although these have nothing to do with the control I'm discussing, I looked and saw both libraries have Platform Target in the Properties|Build tab set to "Any CPU".
On the other hand, my application had this setting set to "x64". By changing my application's setting to "Any CPU", I can now place my user controls onto my forms.
Go figure...
I had this problem too, but the answer couldn't fit for me. My project has some issues it can only target x86 and x64 separately. In other words, I can't use AnyCPU configuration (that's because I reference different libraries for each configuration, since those libraries are not fit to AnyCPU).
The solution I came up with was: when I need to use the form designer, I change the setting to x86. Do the job, then set back to x64 and test. The problem occurs only with the designer, but the solution builds and runs fine.
I had this problem in VS2015 and the solution turned out to be simple.
I had created a user control by cutting and pasting a few existing controls from a form (with the aim of grouping them into the custom control). The custom control was okay (no compile errors), however the removal of the controls from the existing form meant that the application wouldn't compile. Of course not being able to add the new control meant that I couldn't update the code referencing the previous controls with code referencing the custom control.
All I did was hack and slash (commenting-out, creating temporary controls, etc.) so that the entire application would compile. After it compiled I found that I could drag the custom control onto the form (without the error that prompted this question). I then had to unhack and unslash so that the code properly referenced the new custom control.
Same problem here. I am guessing it is related to the fact that the VS2010 installed on x64 OS is still a 32bit program in the heart.
An alternative solution one might want to try is simply open TheFormThisUserControlIsSupposedToBeAddedTo.Designer.cs and use code to add the user control. Basically, you are doing the dirty work that the Designer is supposed to do.
It is not as difficult as it sounds, esp. considering that there are probably plenty of sample code in that file already (e.g. the buttons you added using Designer). The only difficult part is figuring out the right coordinates in the form to place the control.
The end result is that you can not see the user control in Desinger, but they are added on debugging/running.
I also experienced this problem but the cause was different. In my case a component (form) constructor or Load event invoked a method elsewhere that used reflection to find all classes that implemented a certain interface.
While that works fine at runtime, it generated the above mentioned exception at Design Time. (Type Initialization exception with a Type Load Exception as inner exception).
An hour of confused, weary troubleshooting at 3:36AM is again easily resolved with a fresh mind the next day!
I fixed a simple spelling mistake in the control's filename, so it now matched the UserControl name, cleaned and re-built and Bobs your weird uncle's cat. :]
GO project property then 'Build' tab and check 'Target Platform' was 'AnyCPU'.

Categories

Resources