c # Visual Studio - winforms не отображаются правильно во время выполнения

avatar
Cflux
9 августа 2021 в 05:05
299
0
1

Я создал простое приложение WinForms в Visual Studio и столкнулся с проблемой во время выполнения, мой Winforms меняет форму или что-то в этом роде?

При программировании в Visual Studio без запуска кода это выглядит так, к чему я привык:

enter image description here

Когда я запускаю свой код, форма выглядит так, что мне больше напоминает Windows 10, и я понятия не имею, почему.

enter image description here

Во время выполнения форма выглядит так, как будто минимальный размер был установлен неправильно (что и было), а также рамка вокруг формы выглядит по-другому.

Обе эти проблемы являются новыми для меня, хотя я уже более года создаю простые программы WinForms в качестве плагинов для другой программы. Возможно, другая программа как-то связана с этим. Я самоучка, так что терпите меня.

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

Пока,

  1. Я попытался удалить ссылку System.Windows.Forms, а затем снова добавить ее.

  2. Я пытался очистить и восстановить его.

  3. Я пробовал возиться с FormBorderStyle, но, похоже, это ничего не помогает с точки зрения внешнего вида.

  4. Я нашел этот пост, потому что он выглядел похожим, и я попытался поместить Application.EnableVisualStyles(); перед вызовом .ShowDialog(), а также попытался поместить его в функцию form.Load() просто от отчаяния, но не повезло.

Похоже, это может быть относительно простое решение, но я его просто не нахожу.

Обновление — 20210808-2222 PST

Контекст: Запуск Parallels Windows 10 через macbookpro.
Visual Studio — .NET Framework 4.7.2

Конец обновления

Обновление — 20210809-2735 PST

Из пришедших комментариев я попробовал следующее:

вставка Application.EnableVisualStyles(); в начале Main. но, кажется, ничего не изменилось, мои формы по-прежнему отображаются так же.

Я также пытался вставить Application.Application.SetHighDpiMode(), но это для .NET 5. Я использую .Net Framework 4.7.2

Пока я просматривал ссылки в комментариях. Некоторые из них упомянули файл .xml, но в моей форме есть только .Designer.cs и .resx.

Несмотря на то, что это элементарно, вот код для справки, если это поможет.

namespace ConsoleApp1
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);


            // select folder
            // todo: switch to commonOpenFileDialg https://coderhelper.com/questions/11624298/how-to-use-openfiledialog-to-select-a-folder
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            folderBrowserDialog.RootFolder = Environment.SpecialFolder.DesktopDirectory;
            folderBrowserDialog.Description = "Please select a folder that cones the files you would like rename";
            folderBrowserDialog.ShowDialog();


            // User picks a folder

            if (!folderBrowserDialog.SelectedPath.Equals(""))
            {
                Form1 form1 = new Form1();
                form1.ShowDialog(); // more stuff happens in the form.

 
            }
        }
    }
}



**Конец обновления

Любая помощь и/или направление приветствуется.

Источник
Jimi
9 августа 2021 в 05:09
2

Ваше приложение не является DpiAware. Вы не упомянули используемую версию .Net. Если .Net Framework, начните отсюда: Как настроить приложение для правильной работы на компьютере с высоким значением DPI, продолжайте читать здесь: Поддержка высокого разрешения в Windows Forms. Если это .Net 5+, это несколько отличается, вы должны определить режим DpiAwareness в Program.cs.

Flydog57
9 августа 2021 в 05:13
1

В документах говорится, что нужно ввести свой Main, прежде чем что-либо еще произойдет (docs.microsoft.com/en-us/dotnet/api/…).

Jimi
9 августа 2021 в 05:17
3

См. Application.SetHighDpiMode(). Все эти методы, включая Application.EnableVisualStyles(), должны быть вызваны перед созданием любой формы, поэтому в Main (Program.cs) перед Application.Run(). Если вы не пытаетесь создать эту форму в потоке, отличном от потока пользовательского интерфейса по умолчанию.

DiplomacyNotWar
9 августа 2021 в 05:52
1

Я боюсь, что ваша отметка времени обновления сбивает с толку, поскольку она не уточняет, с каким часовым поясом мы имеем дело. - Конец комментария 20210809-1452 JST

Cflux
9 августа 2021 в 15:37
0

@Llama, добавил для тебя часовой пояс.

Ashish Sinha
9 августа 2021 в 16:07
0

Application.EnableVisualStyles(); следует добавить перед Application.Run(new Form()); в основном методе.

Cflux
10 августа 2021 в 01:26
0

Все, я прочитал ссылки и все еще застрял. Вы можете увидеть обновление моих находок/исследований в посте. Спасибо всем за вашу помощь.

Cflux
10 августа 2021 в 01:50
0

@ Джими, оказывается, твой ответ был правильным. Мне пришлось добавить app.manifest и внести необходимые коррективы. Если вы хотите опубликовать как ответ, я отмечу это правильно.

Jimi
10 августа 2021 в 20:04
0

Я могу это сделать, если вы объясните, о чем это приложение. У вас там namespace ConsoleApp1. Это действительно консольное приложение? Или вы хотели вместо этого создать приложение WinForms (неправильный шаблон)? Если первое, хотите ли вы показать форму в своем консольном приложении, если пользователь выбирает папку из FolderBrowserDialog, в противном случае выполнить другой код или выйти? Если второе, то почему вы не использовали стандартный шаблон Windows Forms для создания приложения?

Cflux
12 августа 2021 в 04:05
0

@Jimi, это был последний из двух. Я полагаю, что мог бы перезапуститься, но у меня уже был свой код в consoleApp1, и я решил, что могу хотя бы попытаться заставить его работать. Ваше предложение сработало в обоих случаях.

Ответы (0)