'Formulare' sind im Namespace system.windows nicht vorhanden

71

Ich habe gerade angefangen, an c # zu arbeiten, und habe an einem Codebeispiel herumgespielt, das ich von einem Forum bekommen habe.

Dieser Code verwendet einen Namespace, using system.windows.formsfür den eine Fehlermeldung angezeigt wird:

Formulare sind im Namespace system.windows nicht vorhanden.

Auch bekomme ich einige Fehler zu undefinierten für sie relevanten senddownund sendupdie ich glaube , in der seinen FormsNamensraum.

Ich benutze Visual Studio 10 (mit .net Frame Work 4.0). Irgendeine Idee, wie man diesen Fehler behebt?

John Smith
quelle
16
Fügen Sie einen Verweis aufSystem.Windows.Forms
ta.speot.is
3
Klingt so, als hätten Sie ein WPF-Projekt anstelle eines Windows Forms-Projekts erstellt
shf301
3
@todda, danke, das hat funktioniert :) @ shf301, Ja, es war ein WPF-Projekt, aber das Hinzufügen der genannten Referenz hat funktioniert.
John Smith
2
Wenn Sie später eine SO-Frage stellen
2
@sara Welche Antwort suchst du hier in Bezug auf dein Kopfgeld? Welche "offiziellen Quellen" benötigen Sie? Die Frage wurde eindeutig beantwortet: Sie können keine Elemente aus Namespaces verwenden, zu denen Sie keine Verweise hinzugefügt haben. Suchen Sie ein Zitat aus dem Sprachstandard, das den gleichen Punkt macht?
Cody Gray

Antworten:

135

Erweitern Sie das Projekt in Lösung Baum, right clickauf References, Add Referencewählen Sie System.Windows.Formsauf FrameworkRegisterkarte.

Manchmal müssen Sie Verweise auf einige nicht standardmäßige Assemblys hinzufügen.

VMAtm
quelle
2
ok das hat funktioniert Ich hatte den Eindruck, dass ich es bereits hinzugefügt habe. Ich habe es einfach noch einmal überprüft und wie erwartet fehlte es. Danke :)
John Smith
1
Klicken Sie mit der rechten Maustaste auf den Knoten Referenzen unter dem Projekt.
NaXa
@naXa Die Dinge haben sich seit dieser Zeit geändert, ja
VMAtm
@naXa Oh, Sie meinten "Projekt> Referenz hinzufügen" im Menü, nicht in den Fenstern des Projektmappen-Explorers ... Außerdem wird es nur angezeigt, wenn Sie in den Fenstern des Projektmappen-Explorers zuerst "Referenzen> Analysatoren" auswählen.
Jeromej
29

Falls jemand auf diesen Fehler stößt, wenn er versucht, auf Windows Forms-Komponenten in einer .NET Core 3+ WPF-App zu verweisen (was eigentlich nicht ungewöhnlich ist). Die Lösung besteht darin, in die .csproj-Datei zu gehen (doppelklicken Sie in VS2019 darauf) und sie dem Eigenschaftsgruppenknoten hinzuzufügen, der die Zielframeworks enthält. So was:

<PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UseWPF>true</UseWPF>
    <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
Jool
quelle
3
Dies ist genau die Lösung, die für mich funktioniert hat. Viele der vorgeschlagenen Lösungen schlugen vor, einen Verweis auf "System.Window.Forms" hinzuzufügen, aber dieser Vorschlag funktionierte nie für mich. Ich konnte diese Referenz hinzufügen und meine fehlende Forms-Klasse auflösen, aber durch Hinzufügen dieser Referenz wurde "System.Window"
Tom Rutchik
11

Wenn Sie Windows Forms- Code in a schreiben .Net Core- App , ist es sehr wahrscheinlich, dass dieser Fehler auftritt:

Fehler CS0234 Der Typ- oder Namespace-Name 'Forms' ist im Namespace 'System.Windows' nicht vorhanden (fehlt Ihnen eine Assemblyreferenz?)

Wenn Sie die Projektdatei im Sdk-Stil verwenden (was empfohlen wird), sollte Ihre * .csproj-Datei folgendermaßen aussehen:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <OutputType>WinExe</OutputType>
    <UseWindowsForms>true</UseWindowsForms>
    <RootNamespace>MyAppNamespace</RootNamespace>
    <AssemblyName>MyAppName</AssemblyName>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="3.0.0" />
  </ItemGroup>
</Project>

Achten Sie besonders auf diese Zeilen:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<OutputType>WinExe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
<PackageReference Include="Microsoft.Windows.Compatibility" Version="3.0.0" />

Beachten Sie, dass Sie, wenn Sie WPF verwenden, während Sie auf einige WinForms-Bibliotheken verweisen, ebenfalls hinzufügen sollten <UseWPF>true</UseWPF>.

Bizhan
quelle
0

Dieses Problem kann auftreten, wenn sich mehrere Projekte in einer Lösung befinden und sich eines davon physisch im Lösungsordner befindet. Ich habe dies gelöst, indem ich mit der rechten Maustaste auf diesen Ordner im Lösungsbaum geklickt habe -> und dann auf "Aus Projekt ausschließen" geklickt habe.

Ordner ausschließen

Skeptik
quelle