Ответы пользователя по тегу C#
  • Как сменить источник данных dataGridView через код WinForms C#?

    @rPman
    visual studio генерирует весь код, который ты накликал в дизайнере форм, практически ничего за кадром не остается, смотри в файлах проекта они в инспекторе есть
    смотри как там прописывается источник данных, и делай так же

    p.s. вообще то вопрос что такое сменить источник данных
    Источник данных это DataSource, если все создается в дизайнере форм то данные туда заливаются из базы по запросу (а у тебя таблица эксель через adodb подключается как таблица), ну так меняй подключение или запрос, если тот же файл, на событие onchange комбобокса

    загрузив новые данные datagrid все подхватит сам
    Ответ написан
    Комментировать
  • Можно ли упростить данный код для подключения к базе данный MySQl на C#?

    @rPman
    если используется Visual Studio, то для работы с базой данных можно использовать его инструменты, практически весь код будет генерироваться средой, а ты мышкой щелкать по окнам интерфейса, настройка подключения базы данных, создание DataSource, в которое автоматически будут залиты выбранные таблицы (или прямо по запросам) со структурой из базы данных,... если продолжать дальше то с помощью DataBinding данные можно связать с элементами интерфейса так что выбирай к примеру записи в одном списке, связанные данные из другой таблицы будут отображаться в другом.

    Первое что нагуглил это для VB# но разницы нет никакой
    Ответ написан
  • Можно ли сделать чтение лога медленных запросов mysql в десктопном приложении?

    @rPman
    шлешь в бесконечном цикле паузу и запрос
    SHOW FULL PROCESSLIST;
    сохраняешь список идентификаторов для проверки а следующем шаге, проверка - если какой то id остался с прошлой проверки - считать этот запрос медленным, интервал (длина пауза) между запросами - пороговый интервал для определения что такое 'медленный'

    upd. можешь добавить к идентификатору содержимое info, как то поможет, чтобы хоть немного обойти замечание акина
    Ответ написан
    2 комментария
  • Мое приложение весит больше 150 мб, и я не могу выставить его на всеобщее обозрение в Play Market, что мне делать?

    @rPman
    еще есть AAB, не решает основную проблему но позволяет раскидать ресурсы, рассчитывающие на различные устройства (например разрешение экрана) по отдельным файлам а гугл сам будет решать какой грузить, это откладывает проблему немного на потом

    upd. попробуй APK Expansion Files, гугл хостит файлы до 2Гб, их можно прикладывать к приложению и они будут загружены сразу после установки
    Ответ написан
    1 комментарий
  • Зациклить код в сишарпе?

    @rPman
    'зациклить' - это способ решения задачи, а вопрос должен быть о самой задаче, иначе совершенно непонятно что тебе нужно.

    потелепатствую - у тебя на форме есть типа браузерные компоненты и для первого попавшегося, в котором адрес будет совпадать с указанным условием нужно вернуть html тело страницы?

    p.s. запускай указанный код без sleep в методе компоненты Timer, настроив его на интервал опроса
    Ответ написан
    2 комментария
  • Запуск своей программы вместо графической оболочки в Linux?

    @rPman
    Например
    1. отключаешь display manager - lightdm (или что у тебя там для меню авторизации и выбора DE)
    2. минимум что необходимо для работы графического режима - это xserver, для его запуска достаточно запустить утилиту X (кстати кажется до сих пор требует root), будет запущен графический сервер без Desktop Environment, но нужно понимать что DE отвечает за управление окнами, а точнее управление их размерами, положением на экране и вообще сокрытие/минимизация. Т.е. без этого, если твое приложение ожидает что пользователь будет перемещать его окна (а это к примеру диалоговое окно открытия/сохранения файлов) то он уже это сделать не сможет, все окна будут без заголовков и бордюра для изменения их размеров.
    И кстати, чтобы графическое приложение запустилось и отображалось на X нужно устанавливать переменную окружения DISPLAY, значение смотреть либо в конфиге X либо в логах (скорее всего будет что то типа :0, это имя сервера и номер xserver, запущенного на нем, напоминаю, что linux из коробки умеет multiseat)
    3. чтобы появился хоть какой то интерфейс взаимодействия, нужно установить DE, из минималистичных, идеальных для kiosk mode - я бы рекомендовал awesome, в нем к примеру можно настроить чтобы все открываемые окна сразу разворачивались на весь экран.

    Кстати со всеми xserver обычно идет древний дефолтный twm, настолько примитивный что даже смешно, но если бы при открытии любого окна он не требовал от пользователя указать расположение и размер, им можно было бы пользоваться (не удивлюсь если это настраивается но никогда этим вопросом не задавался).

    Из минималистичных и вполне функциональных DE можно предложить еще какой-нибудь openbox, его можно настроить так чтобы вообще никаких 'пуск' и списка задач не было, а только иконки и приложение на весь экран. Но пользователь сможет добраться до редактирования меню и запустить любое приложение, т.е. это не для kiosk mode

    Чтобы запустить xserver с DE автоматически можно либо настроить автозагрузку в lightdm (это правильно) либо просто запускать утилиту startx, которая смотрит в пользовательском каталоге .xinitrc и запускает DE от туда.

    На самом деле процесс запуска DE стал очень замудреный, его запутали несколько поколений разработчиков и выпутывать не желают, но обычно все это критично для тяжелых DE типа KDE, а что то простое и легкое с приложениями на gtk работает и так

    Собственно как запускать приложения автоматически при включении компьютера тоже вопрос очень интересный, способов много, минимум три могу предложить
    * правильный - настроить службу и прописать ей зависимости и автозапуск,
    * так же до сих пор есть устаревший способ настройки службы без зависимостей sysvinit - /etc/init.d
    * ну еще есть /etc/rc.local
    Ответ написан
    1 комментарий
  • Как вернуть переменную?

    @rPman
    Ниже сказанное, не относится конкретно к unity, но для всех любых других способах реализации этой задачи.

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

    Логичнее и красивее для реализации, в классе, описывающем персонажа (а наверное лучше базового объекта живых существ в игре, ведь теми же свойствами могут обладать и монстры) определить состояние - ходьба, бег (а в будущем можно будет добавить к примеру - красться) и отдельно переменная - скорость в процентах либо boolean переменная - движение. Для каждого состояния класс должен описывать (виртуальные методы. возвращающие значение) скорость, с которой персонаж может двигаться соответственно ему текущему состоянию. И главное, текущая скорость это не переменная, а метод, который будет проверять состояние и возвращать вычисленную скорость.

    Да, это очень не эффективно, каждый раз, при запросе скорости, ее заново вычислять, но если все изменения состояний и переменных, участвующих в вычислении этой скорости, менять так же методами (или геттером/сеттером), то в этих методах можно вызывать метод вычисления скорости а основной метод пусть возвращает сохраненное значение (читай кешировать вычисление скорости и отслеживать ее изменение)
    Ответ написан
    Комментировать
  • Как сделать запуск нескольких браузеров одновременно?

    @rPman
    попробуй добавить в командную строку браузера --profile-directory="Profile 1", где "profile 1" имя профиля, а точнее подкаталога где он будет сохраняться

    на каждый браузер создавай свой IWebDriver
    Ответ написан
  • Unity как рассчитать угол отскока мяча от стены?

    @rPman
    если относительное положение стенок паралельно осям координат (т.е. либо препятствие вертикальное либо горизонтальное) то при ударе о горизонтальную стенку, скорость по Y меняется на противоположную (меняется знак) а по X не меняется, ну а при горизонтальной стенке наоборот, по Y не меняется а по X меняется знак на противоположный (умножить на -1)

    если препятствия произвольный угол имеют то... формулы можешь посмотреть тут
    Ответ написан
    1 комментарий
  • Как создать бота для windows?

    @rPman
    c# в данном случае не самый лучший выбор (правильно использовать c++ или c или лучше готовый фреймворк и язык - autoit но он в стагнации уже давно), в .net нет необходимого api и все придется импортировать из win32
    вот обсуждают простейший пример симуляции движения мышкой, там же смотри как импортировать библиотеку

    чтобы получить базовую информацию о графической структуре окон требуемых приложений (а все они так или иначе будут использовать хотя бы одно win32 окно), используй штатную утилиту, идущую в поставке с visual studio - microsoft spy++ (даже если нет ярлыков, утилита spyxx.exe лежит в каталоге visual studio... tools)
    Ответ написан
    3 комментария
  • Как скачать видео с YouTube?

    @rPman
    почему youtube замаскирован звездочками? это стало ругательством?

    по теме, лучший способ не бороться с мельницами (гугл периодически меняет структуру страницы и устаревший код быстро становится нерабочим) - использовать проект youtube-dl (питон), вызывая его утилиту как внешнюю

    точно знаю были врапперы для c# (гугл выдает старый код, может заработает) если надо именно библиотеку
    Ответ написан
    Комментировать
  • Как обработать 10гб текстовый файл?

    @rPman
    2 варианта
    правильный сложный - гуглить: stream xml parser c#
    первый же результат

    второй простой и тупой - если тег organization это один из элементов огромного списка и файл отформатирован (а это можно сделать другими средствами потоково, например консольным редактором регуляркой sed, вставив переводы на новую строку после закрытия тега organisation или же в своей программе) то можно быстрыми средствами поиском подстроки или построчной загрузкой файла грузить каждую organization в свою строку и анализировать уже привычными не потоковыми парсерами
    Ответ написан
    Комментировать
  • [c#] Как переписать многопоточное приложение в асинхронное?

    @rPman
    не понятна цель перевода универсального кода на основе потоков к асинхронному коду, чья нормальная работа допускается с кучей оговорок.
    может лучше оставить как есть?

    По коду видно что в внутри потока реализован свой event loop, это хорошо, значит работа уже разделена на кусочки
    таким образом тебе осталось эти кусочки важной работы раскидать на события (т.е. к примеру вызов каждого нового кусочка - новое событие, значит нужно сформулировать условие создание следующего события, например если это просто 'вычисления' то по очереди создаешь события для куска работы от каждого потока, чтобы они по очереди выполнялись)
    Ответ написан
  • Как с помощью return вернуть две переменные?

    @rPman
    дополню отвечающих
    можно добавить аргументов в функцию, определив как ссылочные (ключевое слово ref или out), соответственно одно или все возвращаемые значения можно разместить там
    Ответ написан
    Комментировать
  • Как исправить ошибку "To run this application, you must install .NET Core"?

    @rPman
    Разрабатывать приложение с более старой версией .net
    Например 3яя есть даже на win7 по умолчанию, а в 10-ке - 4.6 версия, вот список ревизий ос и версий встроенных в них .net

    p.s. машины, на которых почему то не установлен последний .net это что то странное, сейчас некоторые даже инсталяторы пишут на .net, т.е. на такой машине без .net тупо ничего не запустится

    Машины должен кто то администрировать, пусть он и настраивает как надо
    а если там linux будет стоять, будете прикладывать к своему exe-шнику инсталятор windows?
    Ответ написан
  • Как подключить готовую БД SQLite к проекту на C# WinForms?

    @rPman
    скачиваешь sqlite драйвер

    дальше либо сам создаешь ado.net подключение, либо пользуешься встроенным генератором всех нужных классов в студию (создаешь подключение, там кликами создаешь DataSet в нем добавляешь таблицы из базы, затем с помощью DataBinding прямо в интерфейсе связываешь компоненты форм с данными)
    Ответ написан
  • Как сохранять результаты работы приложения не в БД, а в файл?

    @rPman
    Когда то давно давно, Когда писал на visual studio c# winform проект, пользовался классами dataset, являющимися по сути таблицами в оперативной памяти, интерфейс чють ли не мышкой пишется весь, при необходимости сохранить данные на диск всему dataset WriteXml а при старте ReadXml, и все сохранялось и загружалось... Я даже никогда внутрь не заглядывал, Когда пишешь крохотное приложение, о котором через пол года даже не вспомнишь за не надобностью, зачем заморачиваться ещё и про базы данных.

    Я к тому, что если сериализация в файл, в любом формате, решит твою проблему и не добавит новых, то почему нет.

    Этот простой подход позволяет сэкономить время на разработку за счёт очень не эффективного способа хранения данных

    Но есть опасность что форматы хранения от разных версий .net framework будут не совместимы.
    Ответ написан
    Комментировать
  • .net это библиотека C#?

    @rPman
    .net это framework, который включает в себя библиотеки, утилиты, компиляторы, виртуальную машину clr и целую философию microsoft, которая объединяется средой разработки visual studio

    у .net есть opensource часть, которая поддерживается даже майкрософт (но скорее всего только ради послаблений антимонопольного комитета) например gnome в linux активно использует mono project, инструментарий, позволяющий запускать clr приложения (а при наличии библиотек от майкрософт даже собранные для windows) кроссплатформенно.
    Ответ написан
  • Как спрятать пароль?

    @rPman
    Что и главное от кого защищаешься? от этого зависит ответ и он будет сильно разный.

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

    Этот вариант подходит только для запущенных служб/приложений а не http rest на основе cgi или модулей веб сервера (для них понадобится запустить свою службу, запросы к которой уже будут уязвимы). Метод не даст абсолютной гарантии, так как имея доступ к файлам кода бакэнда провайдер может их проанализировать и вычислить и подменить методику на менее защищенную, в особо запущенных случаях провайдер может и в оперативной памяти машины покопаться, но это особо сложный и дорогой способ, а значит маловероятен.

    В момент запуска приложение запрашивает у стороннего сервиса пароль, сторонний сервис его передает, например после ручного подтверждения оператором/владельцем.
    Советы
    - не использовать типовые технологии и предлагаемые провайдером инструменты, иначе встает вопрос от кого тогда защищаешься то?
    - обязательно реализовать ручное подтверждение оператором, администратор знает когда перезапускается веб сервер и если к нему приедет запрос на отсылку пароля в другое время - повод забеспокоиться
    - не делать это вопрос ответной системой (типа бакэнд по rpc обращается к удаленному сервису и тот сразу возвращает пароль), так как ее легко вычислить в коде и симулировать вызов, бакэнд запрашивает, но работа сервиса начнется только после того как к нему приедет соответствующий запрос

    p.s. пример простой реализации если нужно защитить данные от приглашенного администратора (вариант с заражением им трояном пока опустим, то другими способами фиксится) - все конфиги в открытом виде хранятся в определенном каталоге, по умолчанию там тестовые данные, для проверки работоспособности проекта, а на боевом сервисе или в режиме 'in production' в этот каталог складываются правильные конфиги, например монтированием из encfs, эту операцию делает специальный человек в момент перезапуска сервера вручную.

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

    Разделяй и властвуй - не держи все в одном месте, разделяй сервис на несколько, чтобы критичная информация могла быть размещена отдельно от основной логики в виде простого и дубового модуля, требующего минимального и редкого обслуживания
    Ответ написан
    Комментировать
  • Как получить всю БД в виде csv?

    @rPman
    Формат csv для данной задачи наиболее неподходящий, теряется информация о структуре, особенно когда на очередной строчке количество колонок меняется и еще страшнее - если не меняется, что там лежит, что в какой колонке - не известно, машина не прочтет а человек обматерит изобретателя этого бреда.

    Вторая проблема - денормализация, вот это объединение записей. Причина простая - реляционные базы данных по определению не хранят достаточно информации для понимания, чем является данные. В некоторых случаях можно что то вытащить из типа индексов (fk и pk) и ограничений constraints но в общем нет. Как понимать связь М-1-М? какую таблицу брать за базовую а какую второстепенной, т.е. что выбирать left join, right join или inner join? Да, для простых справочников, когда таблица является лепестком в графе связей 1-М можно 'смело' связывать такую таблицу, дублируя данные справочника по foreign key индексам, но опять - зачем? ведь при чтении уже не будет видно что использовался справочник.

    p.s. Я могу предположить что конечная цель у автора - работа со случайными данными (много мелких проектов, написанных разными людьми с сильно оотличающимися подходами к разработке и способам хранения данных) и извлечение из них осмысленных, к примеру в заранее определенном формате
    Когда то давно у меня в дипломной или рядом была проект, в котором в качестве доп инструмента была простая самописная утилита, ее натравливаешь на очередную базу с неизвестной структурой, она проводила простенький анализ структуры и выдавала в интерфейсе таблицы поля и показывала короткий брифинг по каждому выбранному полю (тип связи и пример данных там хранящихся), цель утилиты - указать таблицы и поля, из которых дальше будет извлекаться данные (т.е. дать интерпретацию этим данным). Без этой утилиты работа по определению какое поле чем является достаточно муторная, в имеющихся приложениях по работе с бд нужно много кликать, запускать хоть и заранее написанные запросы и т.п. Может вам лучше это состряпать? Я искал и не нашел, готовые универсальные решения слишком сложны (а смысл в простоте интерфейса).

    в c# есть унифицированный инструмент по подключению к базам данных - ado.net (вся возня - в построителе connection string, плюс таскать с собой по больше драйверов от разных бд), плюс есть системный odbc (уже устарел но для старых баз данных это иногда единственный способ подключения) для которого есть поддержка ado.net
    Ответ написан
    1 комментарий