Задать вопрос
  • Как правильно называть массивы?

    @cicatrix
    было бы большой ошибкой думать
    Для проекта принимается naming convention. Собственно, это условности, но в больших проектах это имеет значение.
    Видел, использование префиксов: aOrders, arrOrders; как суффикс: OrdersArray, но в целом, множественное число кажется гораздо логичнее.
    Вообще, надо ориентироваться на naming convention, принятый в стандартных библиотеках языка, на котором пишется код, то есть, посмотреть на стиль наименований, которые приняли разработчики языка (собственно, это касается не только наименований массивов - между лаконичностью питона и МногокилометровымиНазваниямиКлассовНаСиШарп всё-таки разница в стиле заметна).
    Ответ написан
    Комментировать
  • Работа с большим изобилием форм?

    @cicatrix
    было бы большой ошибкой думать
    Смотря сколько всего форм.
    Можно и не заморачиваться сильно. Достаточно Ссылку на первую (1), как я понял (Activation) хранить где-нибудь глобально, чтобы все формы видели (например, в классе Program.MainForm);
    В событии Activated просто делать Program.Form1.Hide(); а в событиях Closing или Closed делать Program.Form1.Show()

    Ну и да, если форм много, то тогда проще расширить класс Form -
    public abstract class MyForm : Form
    {
        protected override void OnActivated(EventArgs e)
        {
            base.OnActivated(e);
            // TODO: Убедиться, что MainForm != null
            // System.Diagnostics.Debug.Assert(null != Program.MainForm);
            Program.MainForm.Hide(); 
        } // OnActivate
    
        protected override void OnDeactivate(EventArgs e)
        {
            base.OnDeactivate(e);
            // TODO: Убедиться, что MainForm != null
            // System.Diagnostics.Debug.Assert(null != Program.MainForm);
            Program.MainForm.Show(); 
        } // OnDeactivate
    } // class MyForm


    В общем, потом достаточно прописать в своей форме наследование не от Form, а от MyForm и всё. Любая форма будет вести себя так.
    Если "MainForm" может изменяться от раза к разу, то её в конструктор новой формы надо будет передавать.
    Ответ написан
    Комментировать
  • Прорисовка объекта в C#?

    @cicatrix
    было бы большой ошибкой думать
    Вы должны рисовать на объекте Graphics, который вам предоставляет Form_Paint.
    При срабатывании события Paint в аргументе PaintEventArgs вам будет передан объект Graphics, при помощи которого и надо производить отрисовку.
    Ответ написан
    1 комментарий
  • Пропали все компоненты с формы, в чем причина?

    @cicatrix
    было бы большой ошибкой думать
    Посмотрите в файл formname.Designer.cs. Для всех компонент, которые вы добавляете на форму, в этом файле автогенерируется код по их добавлению.
    Проблема, видимо, в том, что что-то глючит. Попробуйте создать новую форму, и копипастом перенесите программный код из основного модуля (FormName.cs) и (обязательно!) из FormName.Designer.cs в новую форму.

    Можно просто в форме CTRL+A, CTRL+C
    В новой: CTRL-A, CTRL-V

    UPD: Забыл сказать - обязательно проверьте наличие вызова InitializeComponent() в Form_Load. Судя по симптомам, скорее всего, InitializeComponent не выполняется.
    Ответ написан
    Комментировать
  • Есть ли какие либо права на ПО у заказчика?

    @cicatrix
    было бы большой ошибкой думать
    1. Насколько юридически "неподкомпаемо" со стороны заказчика будет продажа исполнителем проекта третьим лицам?


    Если исходники у него, то это вам ещё надо будет доказать, что вы не верблюд, вернее, что вы - именно тот верблюд, который всё это разработал. На программном коде отпечатки пальцев не остаются.

    2. Из вопроса №1 вытекает вопрос - получит ли право заказчик требовать с исполнителя возврат выплат?


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

    3. Ну и, собственно, имеет ли какие либо права на это ПО заказчик?

    Он вполне может заявить, что это он является автором ПО, а вы всё украли. У нас презумпция невиновности, так что это вам надо будет доказывать то, что заказчик там себе что-то присвоил.
    Ответ написан
    Комментировать
  • Как отправить HTML/CSS письмо на электронную почту?

    @cicatrix
    было бы большой ошибкой думать
    А чем стандартный способ отправки через System.Net.Mail.SmtpClient не понравился?
    Ответ написан
  • Как сделать выполнение метода на контроллере 1 раз в сутки в определенное время?

    @cicatrix
    было бы большой ошибкой думать
    Лучше по cron пусть запускается хранимая процедура в базе.
    Веб сервер запускает ваше приложение только по требованию (когда клиент к нему обращается). Периодически (по умолчанию раз в 20 минут) ваше приложение будет перезапускаться.
    Где гарантия, что ваш код не будет выполнен дважды? Может и не страшно, но кто знает, что в этот код будет добавлено потом?
    Любые сервисные операции необходимо выполнять вне контекста веб-приложения. Веб приложение должно обслуживать клиентские запросы, не более.
    Ответ написан
    Комментировать
  • Как писать приложения с нестандартным интерфейсом WindowsForms?

    @cicatrix
    было бы большой ошибкой думать
    Даже на "голом" Windows Forms можно тупо "рисовать" любые элементы управления. Стандартную библиотеки придуманы просто для облегчения данного процесса программистам. В принципе, вам ничего не мешает отрисовывать в окне вообще всё. В целом, это даже не так сложно, как кажется.
    В конце концов, и Windows Forms, и WPF базируются на Win32API.
    Используя стандартные элементы управления (кнопки, текстбоксы, и пр.) даже при простой кастомизации свойств можно добиться весьма неплохих реультатов. Если кажется, что этого мало, возможно, вы просто ещё не всё попробовали. Если же действительно мало, то есть прямые вызовы функций Windows API. Тут вообще можно делать с окном что угодно.
    Ответ написан
    Комментировать
  • Почему ключи шифрования состоят только из цифр?

    @cicatrix
    было бы большой ошибкой думать
    Ключ шифрования это последовательность нулей и единиц (двоичное число). В каком виде их представлять пользователю, значения не имеет.
    Ответ написан
    8 комментариев
  • Как правильно вызвать одну форму из другой?

    @cicatrix
    было бы большой ошибкой думать
    Visual Basic учит вас плохому.
    Он позволяет создать класс формы без явного вызова конструктора. Уходите с него сн C#

    Всегда явно указывайте при помощи слова New:
    frm2 = New Form2
    frm2.Show()
    Ответ написан
    Комментировать
  • Как избежать выхода числового id за пределы диапазона?

    @cicatrix
    было бы большой ошибкой думать
    Если это про базу данных и поле id размерностью в tinyint, то проще вообще убрать identity и присваивать id самостоятельно явным образом.
    Ответ написан
    Комментировать
  • Возможно ли перенести exe программу с SQL базой на другой компьютер?

    @cicatrix
    было бы большой ошибкой думать
    Берёте IL spy, декомпилируете exe сборку, ищете, куда зашит пароль.
    Ответ написан
    Комментировать
  • Как получить Guid только добавленного элемента?

    @cicatrix
    было бы большой ошибкой думать
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        string sqlText = "INSERT INTO [Library] (Title, Tags, Body) OUTPUT INSERTED.[Id] VALUES(@Title, @Tags, @Body)";
        using (SqlCommand cmd = new SqlCommand(sqlText, conn))
        {
            cmd.Parameters.AddWithValue("Title", title);
            cmd.Parameters.AddWithValue("Tags", tags);
            cmd.Parameters.AddWithValue("Body", body);
                        
            try
            {
                conn.Open();
                Guid insertedGuid = (Guid)await cmd.ExecuteScalarAsync(); // <-- созданный GUID
            }
            finally
            {
                conn.Close();
            }                    
        } // using cmd
    } // using conn
    Ответ написан
    7 комментариев
  • Как реализовать строчную отладку кода в C#?

    @cicatrix
    было бы большой ошибкой думать
    Кирилл Серов, это одна из причин, по которой не стоит без абсолютно крайней необходимости заниматься метапрограммированием. Собственно, выходов у вас особо нет, либо нагромождать тестовый стенд, который в момент перехода к исполнению вашего сгенерированного текста остановит программу, скинет ваш код в файл, вы его загрузите в отладчик, проинициализируете все переменные и объекты, и отладите.
    Второе - раз уж вы интегрируетесь с экселем, рассмотрите VBA в качестве вашего скриптового языка.
    Третье - файловый ввод-вывод и пошаговое логирование в момент исполнения вашего кода со всей интересующей вас информацией.
    И повторюсь, рассмотрите возможность отказаться от генерации компилируемого кода, используйте хотя бы любой скриптовой язык (vbs, js, ps1, python, и т. д.).
    Ответ написан
    Комментировать
  • Как сделать метод для разных форм?

    @cicatrix
    было бы большой ошибкой думать
    Проще сделать отдельный класс (можно статический), в нём сделать метод, который бы принимал на вход в качестве параметра ссылку на ваш DataGridView, да и делал бы с ним, что нужно.

    internal static class Helper
    {
          internal static void SetUpGridView(DataGridView dgv)
         {
           // ... делайте всё здесь
         }
    } // class Helper

    Ну а в классе формы просто:
    Helper.SetUpGridView(this.DataGridView1);
    Ответ написан
    1 комментарий
  • Как на C# реализовать асинхронную очередь задач у объекта?

    @cicatrix
    было бы большой ошибкой думать
    using System;
    using System.Collections.Generic;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace TasksSample
    {
        public class Worker
        {
            private int id;
            public Worker(int id)
            {
                this.id = id;
            }
            public void DoHardWork()
            {
                Console.WriteLine($"Task {this.id} started.");
                Random rng = new Random();
                int delay = rng.Next(1000, 10000);
                Thread.Sleep(delay);
                Console.WriteLine($"Task {this.id} finished after {delay} ms.");
            } // DoHardWork
        } // class Worker
    
        class Program
        {
            static void Main(string[] args)
            {
                TaskFactory fact = new TaskFactory();
                int TaskCount = 10;
                List<Task> myTasks = new List<Task>();
                for (int id = 0; id < TaskCount; ++id)
                {
                    Worker w = new Worker(id);
                    myTasks.Add(fact.StartNew(() => w.DoHardWork()));
                }
                Task.WaitAll(myTasks.ToArray());
            } // void Main
        } // class Program
    } // namespace TasksSample
    Ответ написан
    2 комментария
  • Каким средством на базе ос windows можно открыть лог файлы посекундных действий пользователя вне зависимости выключен был пк или нет?

    @cicatrix
    было бы большой ошибкой думать
    С NTFS можно попробовать просканировать файловую систему, найти файлы, в которых атрибуты LastAccessTime и LastWriteTime относятся к интересующему вас периоду. Их вряд ли чистили.
    Ещё журналы винды, но они могут быть очищены. Вообще проанализировать log файлы, имеющиеся в системе (если есть). В целом, если заранее не были предусмотрены меры аудита, то, как говорится, поздно пить "Боржоми".
    Подобные проникновения в 99% случаев имеют 2 цели: а) похитить информацию (в этом случае, поезд уже ушёл); б) внедрить шпионское/вредоносное ПО на машину/в корпоративную сеть - здесь ещё можно предпринять какие-то меры по поиску и обезвреживанию.
    Ответ написан
    2 комментария
  • Создание собственного онлайн-редактора кода - с чего начать?

    @cicatrix
    было бы большой ошибкой думать
    Начать надо с парсера (ну или готовый взять), чтобы он мог токенизировать элементы, это самое сложное. Остальное уже тривиально.
    Ответ написан
    Комментировать
  • После чтение файла происходит сложение значений из файла, на выход неожидаемый результат, почуем?

    @cicatrix
    было бы большой ошибкой думать
    StreamReader по умолчанию открывает файл в кодировке UTF-8 и считает, что в одном символе 2 байта.
    Вам явно указывать кодировку файла в инициализации StreamReader.
    И вообще, хорошей практикой будет считать строку (ReadLine), потом уже производить её разбор.
    И, как я уже указал в комментарии, приведение Char к Int32 вернёт код символа, а не строковое значение.
    Для того, чтобы превратить символ "3" в число 3 надо пользоваться методом Parse.
    Ответ написан
    Комментировать
  • Как возвести число в отрицательную степень, не использую функцию Power?

    @cicatrix
    было бы большой ошибкой думать
    Эх, вспомнил школу. По-моему, это было на первом уроке по паскалю - возведение числа а в степень b:

    function MyPower(a,b:real):real;
    begin
          Result := exp(b*ln(a));
    end;
    Ответ написан