Ответы пользователя по тегу Windows Forms
  • Как сделать 500 кадров в сек в Form C#?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    А вы какую задачу-то решаете? Если смотреть на задачу с общей точки зрения практичности и применимости, то фраза "ну нахер" описывает решение крайне точно. Если вам надо именно чисто в самих формах и именно в шарпе - чисто теоретически на мощной машине с банкой вазелина и другими нецензурными вещами вполне можно достичь такого показателя. Опять же - я говорю не про пустое окно в один пиксель, а про реальное приложение с кучей кнопок, элементов управления и всего остального на 4к экране. Проблема форм в том, что там используется легаси код GDI+ и в современных виндах там еще поверх чего-то накрутили, плюс еще всякое накручено в формах и дотнете и как результат - можно получить лаги на банальных дропбоксах в сотню элементов. Если же вам нужно получить именно результат - окно с требуемым фрейм-рейтом, то тут уже есть более практичные варианты: делаем стандартное окно и выводим в него нужное на сях или плюсах прямо в пиксели или через OpenGL для использования ресурсов видеоадаптера).
    Ответ написан
    Комментировать
  • Почему форма имеет такой некрасивый стиль?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Это стандартный вид стандартных окон ОС Windows. Не нравится стиль - всегда можно нарисовать свой. WinForms использует древнее легаси API GDI+. Есть еще WPF, MAUI - там уже более новое. У вас какой именно вариант? Там немножко по-разному стили задаются. При желании можно нарисовать все что угодно. Ко всему есть подробнейшие мануалы в сети.
    Ответ написан
    Комментировать
  • Почему не открывается после сборки?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Скорее всего что-то не было установлено - дотнет, библиотеки, пакеты и другие зависимости. Сделайте отладочную сборку с выводом всех ошибок и запустите её на целевой машине и смотрите, что оно требует. Аналогично с дистрибутивом - убедитесь, что все зависимости включены в дистрибутив и устанавливаются как и куда надо. Тоже сделайте отладочную сборку и проведите отладку дистрибутива.
    Ответ написан
    Комментировать
  • Как добавить новое свойство (property) к объекту DataGridViewCell в WinForms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    • Полностью скопировать исходный код DataGridView с изменением типа ячеек.
    • Добавить к целевому классу свой список своих элементов с нужными свойствами и проксированием части функционала оригинальных ячеек, а элементы в этом списке уже связать с оригинальными ячейками. И работать соответственно со своим списком.
    • Использовать шаблон типа MVC/MVVM с моделями данных и прочее.
    Ответ написан
    Комментировать
  • Что правильно использовать для создания меню и тд в visual studio?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    На самом деле именно так и делается - одни элементы скрываются, другие показываются по мере необходимости. Элементы группируются и скрываются пачкой. Для упрощения обычно группы дочерних окон просто размещают в окне-контейнере и скрывают этот контейнер целиком, а все его дочерние окна скроет сама ось. И второй вариант - создавать/уничтожать окна по мере необходимости. Но вот когда окон много - это увеличивает расход памяти и нагрузку на систему, а на медленных ПК большие и сложные интерфейсы могли даже тормозить. Это 20-25 лет назад все это было важно, а сегодня даже плюс-минус гигабайт никто на заморачивается.
    Ответ написан
    2 комментария
  • Как выполнить на winforms фильтр для чтения, который отрисовывается поверх всех окон на экране?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Имеет смысл посмотреть в исходниках вот этого приложения: https://github.com/Tyrrrz/LightBulb
    Ответ написан
    Комментировать
  • Как создать фабрику картинок в windorms c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Есть такая штука, называется "Декомпозиция задачи": вот это вам и надо сделать. Разбить свою задачу на несколько подзадач меньшего размера, а потом эти задачи разбить на подзадачи еще меньше и так далее, пока не станет все понятно. Затем следует объединить задачи в какие-то модули и логические блоки. И по шагам реализовывать нужный функционал. (И в очередной раз напоминаю, как вам уже неоднократно сказали: в вашем случае следует сделать карту игрового поля и основываясь на этой карте рисовать игровое поле - вы её сделали?)
    Ответ написан
    Комментировать
  • Можно ли просто передать exe или передать папку Release wiforms c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Можно один исполняемый файл при условии отсутствия дополнительных зависимостей. Обычно студия зависимости кладет рядом в тот же каталог (release/debug), но в некоторых случаях не все зависимости копируются и тогда их надо ручками добавлять в конфиги. Для распространения приложения используется такая штука, как "дистрибутив" или установщик: все требуемые файлы упаковываются в один исполняемый и далее один этот файл распространяется. При запуске установщик распаковывает все файлы в указанный в его конфиге каталог и делает разные дополнительные действия типа создания ярлыков и прочее.
    Ответ написан
  • Почему выходит ошибка при передаче пользователю программу winforms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Конечно надо. Все используемые медиа файлы надо либо упаковывать в ресурсы либо вместе с приложением передавать в отдельном каталоге, например.
    Ответ написан
    Комментировать
  • Как сделать вызов функции при изменении значения переменной типа enum c# winform?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Например использовать свойства:
    class Foo {
        private BarEnum _bar;
        public BarEnum bar {
            get { ... }
            set { ... }
        }
    }

    И, соответственно при изменении значения переменной во время записи выполнить нужный код. Можно даже использовать события.
    Ответ написан
    Комментировать
  • Почему видно прогрузку приложения?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    WindowsForms использует очень древний и устаревший GDI+ - сегодня его использовать имеет смысл только если нужна поддержка Windows XP (либо еще каких-то окаменелостей). Во всех остальных случая лучше использовать WPF или MAUI - там нет лагов и тормозов. Если же хочется ускорить формы, то ищите по теме "speedup/boostup gdi windowsforms" - там надо добавить несколько дополнительных флагов при создании окна и, ЕМНИМ, включить двойную буферизацию. На SO есть все решения. Но, некоторые тормоза все же будут. Если хочется красиво запустить приложение, то при запуске надо создавать окно в скрытом виде, затем ждать пока инициализируются остальные компоненты и только потом уже показывать само окно. Если нужна производительная сложная анимация - то про формы лучше забыть и сразу перекатываться в WPF/MAUI. В крайнем случае можно создать компонент на WPF и использовать его в формах: я так делал или наоборот, когда надо было использовать древнее легаси WinAPI, но в современной красивой обертке с нужными фичами. На счет интеграции MAUI и форм не подскажу.
    Ответ написан
    Комментировать
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Нет, оно там просто не нужно - достаточно просто правильно структурировать приложение. В WF вполне достаточно просто разделить логику приложения и логику самого интерфейса. Нужен нестандартный контрол со своим поведением? Отпочковываем класс от Control и вперед. Логика самого интерфейса вполне нормально живет в самих классах элементов управления (в терминах MVVM это два в одном View + ViewModel). Например, реальный случай из практики: запилил WF приложение по выданному дизайну - его потестили и почти сразу дизайнер нарисовал полностью новый дизайн; ввиду увеличения фишечек, рюшечек и всего остального (а так же тормозов древнего легаси наследия WF, конечно же) - я просто перенес файлы с логикой из WF проекта в WPF проект в модели и запилил новый GUI на WPF.
    Ответ написан
    Комментировать
  • Как исправить данную ошибку в VS windows forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    https://dev.mysql.com/doc/connector-net/en/connect...
    ---------------------------↓↓↓
    "server=127.0.0.1;uid=root;pwd=12345;database=test"
    Ответ написан
    1 комментарий
  • Не запускается приложение Windows Forms после его сборки. Что делать?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    C 95% вероятностью отсутствующие библиотеки, конфиги, зависимости или сам .Net на другой машине, а в коде приложения нет проверок/обработки ошибок загрузки библиотек/конфигов/зависимостей. Проверить список зависимостей приложение и их присутствие на целевой машине, добавить обработку не обработанных исключений и логирование запуска приложения на разных этапах для понимания в какой момент происходит ошибка/падение.
    Ответ написан
    Комментировать
  • Как отобразить несколько контролов одновременно?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Просто используйте WPF - там нет таких проблем с производительностью. У WinForms проблема с производительностью связана с использованием древнего GDI API. И, если хочется решить эту проблему - то в таком случае надо вручную писать рендеры для контролов. В данном случае это будет так: создать кастомный контрол и написать к нему кастомный рендер, который будет брать картинки и копировать их всех в один канвас/буфер, так же в самом этом контроле обрабатывать события пользовательского ввода. Плюс потребуется найти и применить дополнительные хаки для повышения производительности, такие как добавление специальных флагов стилей к окну, переписывание дополнительных методов в контролах и прочее. Проверено на личном опыте.
    Ответ написан
    2 комментария
  • Как в WinForms прикрепить код отдельной программы, написанной на С++?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Например, что бы какая то программа или код на С++ вызывались по щелчку кнопки на форме WinForms.

    • Просто вызвать эту программу используя соответствующие API.
    • Конвертировать эту программу в динамическую библиотеку и вызывать функции этой библиотеки в своем приложения используя системные API.

    И как это все собрать в одно рабочее приложение.

    Enigma VirtualBox

    Т.е. все заголовки, библиотеки WinForms и заголовки и библиотеки С++?

    А заголовки C++ с нужными данными переписать на ЯП вашего приложения и инклюдить стандартными методами.
    Стандартные библо
    Ответ написан
    Комментировать
  • Как реализовать лучше взаимодействие C# Forms приложение с браузером CefSharp и сайтом в нем?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Лучше всего использовать NWJS для таких задач.
    Ответ написан
    Комментировать
  • Изменение стиля ComboBox WinForm C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если нужна глубокая кастомизация элементов управления — используйте WPF. Он и быстрее и гибче (требования к ОЗУ вырастут не сильно, по сравнению с формами).
    Ответ написан
    4 комментария
  • Как сделать плавающий тулбар в winforms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Положить этот тулбар на панель (на панели у элемента нет фиксированного положения и там его можно свободно двигать) или просто присоединить к основному окну, поднять повыше в z-index и задать ему логику парковки. Типа "при приближении к краю окна установить установить координаты такие-то".
    Ответ написан
    Комментировать
  • Как хранить текстовые данные в приложении на C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Например:
    class MyClass
    {
        ...
        static class Strings
        {
            public static string str1 = "string 1";
        }
    }

    Или просто вынести в отдельный файл.
    Ответ написан
    Комментировать