Ответы пользователя по тегу .NET
  • Как разделить UI и логику десктоп приложения C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Использовать стандартные паттерны типа MVC и MVVM. Для большинства приложений этого достаточно. Если приложение более сложное, то оно делится на компоненты в виде, опять же, стандартных библиотек и приложения/приложений.
    Ответ написан
    Комментировать
  • Как убрать ненужное пространство между кнопками c++ Windows forms CLI?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Смотрите свойства Margin и Padding у самих контролов и их контейнеров.
    почему писать GUI на C++/CLI не самая лучшая идея?

    Потому что на шарпе c WPF/MAUI проще.
    Ответ написан
    Комментировать
  • Какой дистрибутив Linux выбрать для FullStack .NET Develop?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Любой. Лично мне нравится Debian за свою стабильность и надежность. Еще CentOS тоже нравится, да. Кстати, отказываться от связки венда + студия совсем необязательно, ибо если линукс стоит на машине как хостовая ОСь - то можно поставить виртуалбокс, а в него венду и спокойно пользоваться любимым и привычным инструментом. А в линуксе просто прогонять тестирование, что оно там работает. :D
    Ответ написан
    Комментировать
  • Как параметризировать адрес сервера, к которому обращается десктопное приложение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    #if DEBUG
            server = "test";
    #else
            server = "prod";
    #endif
    Ответ написан
    Комментировать
  • Почему видно прогрузку приложения?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    IEnumerable - интерфейс, а List - класс, реализующий данный интерфейс. Любой класс может реализовывать несколько интерфейсов. Правильнее объявлять как есть - т.е. List, а там где, где нужен конкретный интерфейс/класс - просто делать каст. Обычно не требуется, т.к. IDE/компилятор еще стадии написания/компиляции кода проверяет наличие нужного интерфейса в передаваемом объекте. Соответственно, если ваш конструктор просит IEnumerable, но не разрешает List - проверяйте точнее, что именно нужно конструктору, т.к. если все правильно делать - то List он должен принимать.
    Ответ написан
    3 комментария
  • Имеет ли смысл использовать паттерн MVVM в приложении Winforms?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если памяти хватает - создать массив нужного размера и далее его сохранять в нужный формат в файл. Имеет смысл поискать либы для работы с большими файлами. Либо писать самостоятельно. Про GDI вам уже сказали, что он не поддерживает большие файлы - там просто древний легаси код. Если памяти не хватает - работать с пикселями в потоковом режиме или с небольшими блоками, зависит от того, что надо делать с изображением.
    Ответ написан
    Комментировать
  • Зачем надо делегаты?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Например: https://qna.habr.com/q/1201718#answer_2227658
    Вот еще из доки: https://learn.microsoft.com/en-us/dotnet/api/syste... https://learn.microsoft.com/en-us/dotnet/api/syste...
    Еще, например, делегаты нужны для событий, для лямбда функций и многих разных полезных вещей.
    Ответ написан
    Комментировать
  • Не запускается приложение Windows Forms после его сборки. Что делать?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Конечно — браузер называется. В WPF есть WebView. Еще есть всякие NWJS и Electron.
    Ответ написан
    Комментировать
  • Как рендерить HTML/CSS в .net/C# для desktop?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    NWJS еще есть.
    Ответ написан
    Комментировать
  • Как хранить текстовые данные в приложении на C#?

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

    Или просто вынести в отдельный файл.
    Ответ написан
    Комментировать
  • Как получить все запросы в WebBrowser в Windows Forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Самый простой способ — сделать обычный прокси для перехватов запросов. Чуть посложнее — использовать готовые библиотеки для перехвата запросов.
    Ответ написан
    Комментировать
  • Как сделать приложение готовым к передаче клиенту на Visual Studio?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Упакуйте приложение в дистрибутив/установщик и передавайте его клиенту, если это конечно входит в ТЗ. Например NSIS или NSIS + ModernUI или InnoSetup и еще куча всего. Если в ТЗ нет пункта о дистриубтиве — то просто передавайте файлы клиенту в архиве.
    Ответ написан
    Комментировать
  • Как отловить место в программе, которое приводит к загрузке dll?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    А как эта библиотека подключена? В ссылках или вручную? Если вручную - то оттуда же сразу можно перейти на все места, где оно используется. Если в ссылках - то смотреть, где используется и добавить там мониторинг. Самый простой способ - начать с мониторинга доступа к файловой системе.
    https://docs.microsoft.com/en-us/sysinternals/down... - добавляете фильтры на: процесс - ваше приложение, тип события - файловая система, содержит - название dll файла.
    Ответ написан
  • Как понизить версию (winforms project) у инсталлятора .Net framework с 4.5 на 4.0?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Вероятно где-то в этом самом инсталляторе используется код или зависимости от версии 4.5. Лучше всего создать новый проект в нужной версии, далее перенести все настройки, зависимости и файлы исходного кода и пытаться собрать проект. Вероятно придется внести изменения в исходный код, зависимости или настройки. Еще как вариант можно использовать независимый сборщик дистрибутива — например NSIS.
    Ответ написан
    Комментировать
  • C# Desktop программист, куда податься?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    1. Найти окно по его классу.
    2. Найти окно по процессу.
    3. Передать название окна из второго приложения в первое любым удобным способом (файл, пайп, сокет, etc.)
    Ответ написан
    2 комментария
  • Как быстро въехать в 2D рисование с помощью OpenGL+OpenTK?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Ну, тут алгоритм на самом деле очень простой:
    Встретилось непонятное слово/термин -> Загуглил -> Разобрался с его применением / сделал пару упражнений на применение -> Читаем дальше.
    Ответ написан
    Комментировать