Использование системных оконных форм не работает

Обновлено: 21.11.2024

Оставшийся проект не позволит мне ссылаться на System.WindowsForms.

Существует две версии System.WindowsForms, я обычно использую 2.4 (надеюсь, это то, что мне следует делать).

Я попробовал их обоих в хлопотной процедуре.

Происходит следующее: я выбираю Project/Add COM Reference, а затем проверяю System.WindowsForms.

Закройте диалоговое окно, откройте его снова и убедитесь, что флажок снят.

Я сделал это, потому что проверка не повлияла на ошибку, которую я пытался исправить.

Я использую System.Windows.Forms.StatusBarPanel. Может ли это быть проблемой в Net5?


Кстати. Я также пытался включить:


В этом случае я также проверил System.WindowsForms (я не уверен, что он будет отмечен флажком), но он не был проверен.

ДжонХ

Класс StatusBarPanel (System.Windows.Forms)

ДжонХ

Класс StatusBarPanel (System.Windows.Forms)

ДжонХ

Оставшийся проект не позволит мне ссылаться на System.WindowsForms.

Существует две версии System.WindowsForms, я обычно использую 2.4 (надеюсь, это то, что мне следует делать).

Я попробовал их обоих в хлопотной процедуре.

Происходит следующее: я выбираю Project/Add COM Reference, а затем проверяю System.WindowsForms.

ДжонХ

Импорт включений в файл проекта предназначен для импорта пространств имен (на уровне проекта) для существующих сборок, на которые имеются ссылки.

ПротекНикз

Известный участник

Это должно быть просто "Импортировать System.Windows.Forms" без кавычек и с учетом "." период(ы).

джмцилхинни

Это должно быть просто "Импортировать System.Windows.Forms" без кавычек и с учетом "." период(ы).

Нет. Это просто импорт пространства имен на уровне файла. Это лишь косвенно связано со ссылкой на сборку.

ПротекНикз

Известный участник

Нет. Это просто импорт пространства имен на уровне файла. Это лишь косвенно связано со ссылкой на сборку.

Ну, в своем первом сообщении он/она заявил, что:

Существует две версии System.WindowsForms, я обычно использую 2.4 (надеюсь, это то, что мне следует делать).

и я только что увидел, что они пропустили точку, так что спасибо, что поправили меня.

Известный участник

Microsoft.Common.CurrentVersion.targets(2701,5): предупреждение MSB3290: не удалось создать сборку оболочки для библиотеки типов "<215d64d2-031c-33c7-96e3-61794cd1ee61>". Библиотека типов System_Windows_Forms была экспортирована из сборки CLR и не может быть повторно импортирована как сборка CLR.

Спасибо за вышеизложенное. Я привык смотреть на зависимости!

Если я правильно понимаю, что вы мне сказали, у меня есть дубликаты записей WindowsForms в приведенном ниже коде.

Я думаю, что это связано с windowsforms (где есть список таких Guids?)

И я думаю, что это там, потому что я добавил ссылку, чтобы удалить сообщение об ошибке.

Если я сейчас удалю его, я снова получу много сообщений об ошибках WindowsForms.

Например: MessageBox не объявлен.

Я буду признателен за любые предложения, связанные с исправлением ниже.

Кстати. Он работает как есть, но я хочу серьезно отнестись к вашему ответу.

Я все еще работаю над чужими ответами!

ДжонХ

У вас отсутствует импорт пространств имен на уровне проекта. (импорт включен)

Этот форум перенесен в раздел вопросов и ответов Майкрософт. Посетите Microsoft Q&A, чтобы публиковать новые вопросы.

Отвечает:

Вопрос

$fd = Новый объект system.windows.forms.openfiledialog

с помощью System.Windows.Forms; // «Формы» подчеркнуты красным цветом в Visual Studio 2017

Имя типа или пространства имен «Forms» не существует в пространстве имен «System.Windows» (вам не хватает ссылки на сборку?)

Есть ли у меня проблемы с версией и как их исправить?

Вот "О" для Visual Studio

Установленная версия: сообщество

Инструменты Application Insights для пакета Visual Studio 8.14.11009.1
Инструменты Application Insights для Visual Studio

Инструменты службы приложений Azure версии 3.0.0 15.9.03024.0
Инструменты службы приложений Azure версии 3.0.0

Функции Azure и инструменты веб-задания 15.9.02046.0
Функции Azure и инструменты веб-задания

Общие инструменты Azure 1.10
Предоставляет общие службы для использования мобильными службами Azure и инструментами Microsoft Azure.

Языковая служба JavaScript 2.0
Языковая служба JavaScript

Инструменты Microsoft Azure 2.9
Инструменты Microsoft Azure для Microsoft Visual Studio 2017 — версия 2.9.10730.2

Инструменты непрерывной доставки Microsoft для Visual Studio 0.4
Упрощение настройки конвейеров Azure DevOps из Visual Studio IDE.

Microsoft JVM Debugger 1.0
Поддерживает подключение отладчика Visual Studio к JDWP-совместимым виртуальным машинам Java

Microsoft Library Manager 1.0
Простая установка клиентских библиотек в любой веб-проект

Microsoft MI-Based Debugger 1.0
Поддерживает подключение Visual Studio к отладчикам, совместимым с MI

ProjectServicesPackage Extension 1.0
Подробная информация о расширении ProjectServicesPackage Visual Studio

Расширение ResourcePackage 1.0
Подробная информация о расширении ResourcePackage Visual Studio

Расширение ResourcePackage 1.0
Подробная информация о расширении ResourcePackage Visual Studio

Инструменты данных SQL Server 15.1.61810.11040
Инструменты данных Microsoft SQL Server

Инструменты TypeScript 15.9.20918.2001
Инструменты TypeScript для Microsoft Visual Studio

Visual Basic Tools 2.10.0-beta2-63501-03+b9fb1610c87cccc8ceb74a770dba261a58e39c4a
Компоненты Visual Basic, используемые в среде IDE. В зависимости от типа и настроек вашего проекта может использоваться другая версия компилятора.

Пакет узла адаптера отладки кода Visual Studio 1.0
Уровень взаимодействия для размещения адаптеров отладки кода Visual Studio в Visual Studio

Инструменты Visual Studio для контейнеров 1.0
Инструменты Visual Studio для контейнеров

Здравствуйте, я не могу добавить System.Windows в свои ссылки на сборки и, следовательно, не могу поддерживать IntelliPrompt для MessageBox и т. д.

Мой код загрузки:

После того, как я запустил приведенный выше блок кода, мой список AssemblyReferences содержит только 4 элемента CorLib, System, Core и XML.

Комментарии (8)

Убедитесь, что в Visual Studio настроено прерывание работы при всех исключениях. Вы, вероятно, увидите что-то вроде:

System.IO.FileNotFoundException: «Не удалось загрузить файл или сборку System.Windows или одну из ее зависимостей. Системе не удается найти указанный файл.'

Перегрузка метода Add, которую вы там используете, в конечном итоге вызывает Assembly.ReflectionOnlyLoad для попытки загрузки из GAC, но не находит его таким образом. Возможно, вам потребуется загрузить сборку другим способом, например, через путь к файлу.

Поддержка программного обеспечения Actipro

Хорошее замечание. Я исправил это, и до сих пор нет IntelliPrompt для чего-либо в библиотеке System.Windows, например. Окно сообщения. Хм

Позвольте мне рассказать подробнее, так как я думаю, что вы можете путать пространства имен и сборки. Например, если вам нужен IntelliPrompt, связанный с платформой WPF, вам следует использовать эти ссылки на сборки платформы WPF в дополнение к обычным ссылкам MSCorLib, System и т. д.:

Поддержка программного обеспечения Actipro

Именно этим я и занимаюсь. И компилируется нормально, только без IntelliPrompt :-)

// calcCustomAuto1
используя System;
используя CIC.Framework.CustomAutomation;
используя CIC.Framework.CustomAutomation.Framework;
используя System.Windows;
с помощью System.Windows.Forms;
с помощью Newtonsoft.Json;

пространство имен Calculator.Calc
открытый класс Calccustomauto1 : IProcessor
открытый помощник CICHelper

public void Initialize(string eventName, string eventValue, string stepName, string applicationName, string projectName, string projectDir)
var x = 1;
MessageBox.Show("In Initialize");
>

[Изменено 2 года назад]

Когда я перехожу к нашей демонстрации DotNetAddonCSharpEditor, добавляю две приведенные выше строки ссылки на сборку в конце метода DotNetProjectAssemblyReferenceLoader, запускаю пример и добавляю "using System.Windows;" строка, я вижу MessageBox в списках завершения. Вы видите то же самое в этом образце?

Поддержка Windows Forms 2.0 завершена. На данный момент мы в основном просто исправляем ошибки и полируем наш код.

О системе.Windows.Forms

System.Windows.Forms (также известный как Managed.Windows.Forms, MWF, Winforms) — это один из множества инструментов GUI для использования с Mono, который совместим с Microsoft System.Windows.Forms. Поддержка Winforms 1.1 и 2.0 завершена и сейчас находится в состоянии обслуживания/исправления ошибок.

Что касается визуальной интеграции с рабочим столом, в настоящее время мы поставляем классическую тему Win32.

Содействие

В настоящее время все элементы управления практически завершены. Сейчас мы в основном исправляем ошибки в нашей реализации. См. Ошибки.

Если вы хотите внести свой вклад, вы можете:

  • Если вы обнаружите ошибку в одном из наших методов, вы можете сообщить об ошибке с помощью небольшого тестового примера.
  • Вы можете исправить ошибку одним из наших методов, найденным вами или на нашей странице ошибок.

Обратите внимание, что существует несколько правил участия в Winforms:

  • Общие правила участия, особенно специальные примечания внизу.
  • Элементы управления должны быть нарисованы с использованием кода System.Drawing.
  • Код рисования должен быть привязан к интерфейсу темы.
  • Если ваш метод можно протестировать с помощью автоматизированного теста NUnit, также включите тест.

Если вы работаете над крупной функцией, вы можете опубликовать свое намерение на GitHub, чтобы предотвратить дублирование усилий.

Драйверы

Существует системный драйвер для каждого окна, который выполняет следующие задачи:

  • Ввод с клавиатуры
  • Создание окна
  • Перевод событий

Реализация Mono в Windows.Forms преобразует собственные системные события, такие как X11, в сообщения Win32 WM_ и отправляет их с помощью механизма WndProc. Это позволяет приложениям, зависящим от переопределения WndProc, по-прежнему работать с некоторыми функциями, не предоставляемыми API.

Специальные возможности

В настоящее время Windows.Forms не поддерживает специальные возможности. Работа над этим ведется в рамках отдельного проекта, начатого в январе 2008 года. Подробнее о том, как это будет интегрироваться в систему, см. на странице специальных возможностей.

Пример кода

Примеры приложений для Windows.Forms от Mono доступны в winforms на github

Тематика

В этом разделе обсуждаются проблемы с темами в реализации Windows Forms в Mono, поскольку эти вопросы часто задают:

Почему бы не использовать нативные виджеты?

Вписаться

Хотя мы не можем использовать нативные виджеты, мы все же хотели бы приложить разумные усилия для достижения более естественного «внешнего вида» на разных платформах. Для этого мы создали тематический интерфейс с надеждой, что в будущем наши элементы управления будут выглядеть более естественно. Наличие отдельного класса темы с самого начала вынуждает тех, кто пишет элементы управления, разрабатывать код, в котором код рисования не интегрирован и не смешивается с кодом элемента управления.

Развитие интерфейса тем

В настоящее время у нас есть управляемая тема Win32 Classic по умолчанию и собственная тема Windows VisualStyles. Мы хотели бы иметь нативные темы для Linux и macOS.

Самый лучший вариант, который у нас есть на данный момент, — это тема VisualStyles. В Windows это вызывает собственный API Windows и позволяет ему рисовать для нас. К сожалению, пространство имен System.Windows.Forms.VisualStyles в настоящее время не реализовано в Linux или macOS. Лучшим способом продвижения вперед было бы реализовать это пространство имен на этих платформах. (В качестве альтернативы можно было бы портировать uxtheme.dll от Wine, и мы могли бы выпускать темы Clearlooks и Aqua, которые сделали люди.)

Пространство имен VisualStyles позволяет вам сосредоточиться просто на рисовании одного элемента, например «выбранной кнопки», вместо того, чтобы пытаться просеивать код темы, чтобы выяснить, как он рисует кнопку.

История

Предпринимались две предыдущие попытки реализовать System.Windows.Forms в Mono. Эти первоначальные попытки были предприняты поверх других наборов инструментов: сначала Gtk, затем Wine. У каждого была своя доля проблем, из-за чего от него отказались.

У Gtk были следующие проблемы:

  • Сопоставить семантику одного инструментария с другим было очень сложно.
  • Было бы очень обременительно сопоставлять все события с событиями WndProc, системой обмена сообщениями, лежащей в основе Windows.Forms.
  • Работы по разработке проводились в самом начале жизни Mono, из-за этих очень спорадических усилий по разработке код быстро устарел или немного сгнил.
  • Для использования этого на других системах требовалась установка Gtk+ в целевой системе (больше всего пострадали бы macOS и встроенные устройства).

Усилия Wine могли бы стать успешным подходом, однако возникло несколько технических препятствий:

  • Поддержка многопоточности. Wine имеет специальную настройку потока, которая не совместима с Mono. Хотя это было решаемо, для Wine потребовались бы более крупные исправления.
  • Зависимости. Для взаимодействия Mono и Wine требовалась связующая библиотека. Эта библиотека требовала знать, куда была установлена ​​Wine (у нас был патч для Wine, упрощающий это требование, но он не был принят в Wine).
  • Движущаяся цель. Ключевые функции в Wine менялись достаточно часто, поэтому с каждым выпуском Wine нам приходилось заново заставлять наш связующий код снова работать, иногда становясь несовместимым с предыдущими версиями Wine.
  • Взаимодействие Wine/Gdi+. Способ, которым System.Drawing нужно было сделать совместимым с Wine, был крайне неэффективным. Wine использует модель GDI (растровое рисование), а наша реализация System.Drawing, построенная поверх Cairo, использует модель GDI+ (модель компоновки). Заставлять их обоих разговаривать было крайне неэффективно, так как каждый переход от одной модели к другой требовал копирования растровых изображений.

Текущий подход заключается в том, чтобы полностью реализовать все элементы управления в управляемом коде и использовать абстрактный интерфейс темы для рисования виджетов. Интерфейс темы по умолчанию отображает виджеты с помощью System.Drawing.

Управление веб-браузером

Информацию об элементе управления WebBrowser можно найти на странице WebBrowser.

Читайте также: