Can't use System.Windows.Forms

C#WinformsVisual Studio

C# Problem Overview


I have tried making (my first) a C# program:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
    }
}

This goes well, but if I try using System.Windows.Forms:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("hello");
            System.MessageBox("hello");
            Console.ReadLine();
        }
    }
}

This is the error I get:

Error	1	The type or namespace name 'Windows' does not exist in the namespace     'System' (are you missing an assembly reference?)	C:\Users\Ramy\Documents\Visual Studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs	5	14	ConsoleApplication1

Some details:

  • I am using Visual Studio 2012;
  • I have installed the .NET Development Kit;
  • It is a Console Application.

Maybe it's because on a Console Application can't use System.Windows.Forms? If so, what program should be? I also have tried with a form, but I was only displaying a window and no code.

C# Solutions


Solution 1 - C#

A console application does not automatically add a reference to System.Windows.Forms.dll.

Right-click your project in Solution Explorer and select Add reference... and then find System.Windows.Forms and add it.

Solution 2 - C#

You have to add the reference of the namespace : System.Windows.Forms to your project, because for some reason it is not already added, so you can add New Reference from Visual Studio menu.

Right click on "Reference" ▶ "Add New Reference" ▶ "System.Windows.Forms"

Solution 3 - C#

Adding System.Windows.Forms reference requires .NET Framework project type:

I was using .NET Core project type. This project type doesn't allow us to add assemblies into its project references. I had to move to .NET Framework project type before adding System.Windows.Forms assembly to my references as described in Kendall Frey answer.

Note: There is reference System_Windows_Forms available under COM tab (for both .NET Core and .NET Framework). It is not the right one. It has to be System.Windows.Forms under Assemblies tab.

Solution 4 - C#

For Those using Visual Studio 2022 with .Net Core 6.0

Sorry to revive this thread, but I created an account just to do so, as none of the solutions I found searching google for days worked for me alone, and seemed to only bring up only outdated tutorials.

Not Working =(

What DID work for me
  1. Double click your project (opening the csproj editor window)

Add the following lines (replacing the existing TargetFramework line):

<TargetFramework>net6.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>

My window, for referrence, looks like:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
	  <UseWindowsForms>true</UseWindowsForms>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

3) Note Both lines! I read several solutions / videos that stopped simply after adding the "UseWindowsForms" tag, which did not solve the problem for me, even after unloading and reloading/closing and opening etc.

I stumbled on this solution after applying the "UseWindowsForms" tag, and then in desperation changing my NET framework in properties to 5.0, which caused it to work, and then noted when changing back to 6.0 it still worked.

If you forget the Framework tag in the future, you can reproduce the effect just by flipping your properties back and forth...

  1. Right click the project, and go to properties.

  2. Change the Target framework from .NET 6.0...to....NET 5.0

  3. Exit back to your code. Which after a few moments will show the System.Windows.Forms connecting properly.

  4. Open back up properties.

  5. Change the Target framework from .Net 5.0, back to .Net 6.0

Congratulations

You have (or at least I have) a .Net 6.0 project that is properly allowing me to use System.Windows.Forms (Including the Clipboard, which I suspect many here are looking for...).

I did due diligence on this, testing it multiple times across multiple projects, and it (at least for my setup) consistently works!

BTW. For those wondering. the [STAThread] Attribute tag seen in the pictures is needed to allow the Clipboard class to function. (this is also why I am not using top level statements in the example, but if you don't need that Class, the example works with top level statements (I needed it to show my Clipboard test....)

Solution 5 - C#

To add the reference to "System.Windows.Forms", it seems to be a little different for Visual Studio Community 2017.

  1. Go to solution explorer and select references

enter image description here

  1. Right-click and select Add references enter image description here

  2. In Assemblies, check System.Windows.Forms and press ok

enter image description here

  1. That's it.

Solution 6 - C#

Ensure Solution Explorer is visible In MS Studio 2008 Go to view and click Solution explorer

In Solution explorer go to Reference Right click on Reference and select Add Reference.. Select .NET tab Scroll down till you find System.Drawing -> select it -> click on OK button Do the same for System.Windows.Forms

When you run your form this will work

(eddie lives somewhere in time)

Solution 7 - C#

go to the side project panel, right click on references -> add reference and find System.Windows.Forms

Any time some error like this occurs (some namespace you added is missing that is obviously there) the solution is probably this - adding a reference.

This is needed because your default project does not include everything because you probably wont need it so it saves space. A good practice is to exclude things you're not using.

Solution 8 - C#

may be necesssary, unreference system.windows.forms and reference again.

Solution 9 - C#

just add reference to System.Windows.Forms.dll

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRamy Al ZuhouriView Question on Stackoverflow
Solution 1 - C#Kendall FreyView Answer on Stackoverflow
Solution 2 - C#alerootView Answer on Stackoverflow
Solution 3 - C#FenixView Answer on Stackoverflow
Solution 4 - C#SilentKnightView Answer on Stackoverflow
Solution 5 - C#jorgeView Answer on Stackoverflow
Solution 6 - C#eyesonlyView Answer on Stackoverflow
Solution 7 - C#Bojidar StanchevView Answer on Stackoverflow
Solution 8 - C#R.AlonsoView Answer on Stackoverflow
Solution 9 - C#Moayad MyroView Answer on Stackoverflow