Ответы пользователя по тегу Windows Forms
  • Почему счётчик таймера на windows forms увеличивается на 2, а не на 1?

    @cicatrix
    было бы большой ошибкой думать
    У тебя скорее всего две подписки на Tick оформлено.
    Вот эта строчка у тебя в конструкторе:
    timer1.Tick += timer1_Tick;
    И ещё точно такая же, скорее всего, в Form1.Designer.cs присутствует. Убери одну из них
    Ответ написан
    Комментировать
  • Как программно нажать на сочетание клавиш в C# Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    SendKeys здесь не поможет. Надо пользоваться API самой винды, посылать сообщение окну через SendMessage.
    Вот тут есть подробное описание
    https://dzone.com/articles/sending-keys-other-apps
    Ответ написан
    Комментировать
  • Почему при нажатии кнопки удаления выходит ошибка типа: "ошибка синтаксиса в инструкции from"?

    @cicatrix
    было бы большой ошибкой думать
    Это не код, это огромная дыра в безопасности!
    Вот, почитайте на досуге.
    Database - 'это название таблицы такое? И в ней есть поле с кириллическим названием Код?
    А в текстовое поле число вводится? А если текст ввести, что будет?
    А если я туда введу 1=1; DROP TABLE Database; что будет?
    Ответ написан
    3 комментария
  • Как удалить обработчик событий в Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    Назначение обработчиков событий в WF по умолчанию средой делается в методе InitializeComponent() - в конструкторе формы помещён его вызов. Из него убрать надо, а само тело метода просто удалить.
    Ответ написан
    Комментировать
  • Почему неправильно отображается текст в C# WF?

    @cicatrix
    было бы большой ошибкой думать
    сам файл я поменял кодировку на UTF-8

    Похоже, что нет. Или используемый на форме шрифт не поддерживает кириллицу.
    Ответ написан
  • Как реализовать движение рисунка С#?

    @cicatrix
    было бы большой ошибкой думать
    А что именно не работает-то?
    Методы исполняются синхронно, и пока весь цикл не закончится, картинка отображаться не будет... вернее, может и будет, но по желанию операционной системы.
    В тело цикла добавь Application.DoEvents(). В целом, криво, но для лабы сойдёт. Особенно, для такой, где анимацию в Windows Forms заставляют делать.
    Ответ написан
    Комментировать
  • WPF или Windows?

    @cicatrix
    было бы большой ошибкой думать
    И то, и другое - фреймворки для разработки GUI (Графического пользовательского интерфейса).
    И этими двумя выбор, в принципе, не ограничивается. Существуют и другие:
    Avalonia
    Qt
    wxWidgets
    Да и другие есть, кто-то больше, а кто-то меньше приспособлен для C#. В целом, даже на UnityEngine можно GUI сделать (да ещё какой!). Так же, к программе можно сделать и веб-интерфейс.

    Тут следует понять, что GUI - это оболочка. Сама по себе она должна отрисовать окошки, кнопочки, текстовые поля, списки и пр., но остальное всё должна делать программа, написанная разработчиком.
    Хорошей практикой вообще считается писать так, чтобы как можно меньше была привязка программной логики к графической оболочке. Сама программа может вообще быть скомпилирована в class library, а уж интерфейс потом к ней можно пристыковывать любой.

    Если ты новичок, то особо не заморачивайся с интерфейсами. Для начала научись самому языку, для обучения подойдёт и командная строка. Не стоит думать, что твоя первая программа будет пользоваться настолько большим спросом, что к ней вообще потребуется граф. интерфейс. Да, разумеется, изучать особенности той или иной граф. библиотеки придётся, но это потом. Сначала нужно освоить сам язык.

    Что проще сказать сложно. Мне вот проще WF, но исключительно потому, что это первое (и на тот момент - единственное, что вообще было доступно для C#), сейчас выбор богаче.
    Есть так называемый "синдром утёнка", обычно люди хвалят то, что увидели и освоили первым (так утёнок, якобы, считает первое увиденное им существо своей мамой). Поэтому я и говорю - не стоит акцентировать внимание на GUI, сам язык важнее.
    Ответ написан
    Комментировать
  • Как получить цвет пикселя по кординатам на Panel?

    @cicatrix
    было бы большой ошибкой думать
    Получаем картинку панели:
    private static Image PanelToBitmap(Control pnl) {
        var bmp = new Bitmap(pnl.Width, pnl.Height);
        pnl.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
        return bmp;
    }


    Получаем пиксель с картинки:
    Bitmap.GetPixel()
    Ответ написан
    Комментировать
  • Как мне переделать код на Windows forms чтобы он считал количество букв в каждом слове?

    @cicatrix
    было бы большой ошибкой думать
    Ну если в лоб делать так, как написано в условии, то:
    string input  = "Раз два три четыре пять, я иду искать";
    string[] words = input.Split(new char[] { ' ', ',', '.', '-', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
    foreach(var word in words) { Console.WriteLine($"{word}: длина {word.Length}"); }
    Ответ написан
  • Как можно выполнять действие каждый кадр, или при изменении размера окна Windows Forms?

    @cicatrix
    было бы большой ошибкой думать
    Установи свойство Dock в значение Fill или закрепи текстбокс при помощи свойства Anchor
    Ответ написан
    Комментировать
  • Как нарисовать сетку для игры?

    @cicatrix
    было бы большой ошибкой думать
    Либо рисовать, либо GridView
    Ответ написан
    Комментировать
  • Как в виндовс форм создать таблицу, как в диспетчере задач или HeidiSQL?

    @cicatrix
    было бы большой ошибкой думать
    В диспетчере задач обыкновенный ListView в режиме Details.
    Внизу, скорее всего, он же, только с OwnerDraw (режим, когда ячейки рисуешь сам).
    Ответ написан
    Комментировать
  • Как добавить данные в один exe с помощью другого exe?

    @cicatrix
    было бы большой ошибкой думать
    Для винды сохранение данных (когда программы работают не одновременно):
    1. Файловая система
    2. База данных
    3. Реестр (в винде)

    При одновременной работе (в винде) можно воспользоваться следующими каналами:
    1. Именованные каналы (Named pipes)
    2. Сообщения Windows (Messages)
    3. Сокет TCP/IP
    4. Разделяемая память
    Ответ написан
    Комментировать
  • Следует ли отключать генерацию событий для графических элементов?

    @cicatrix
    было бы большой ошибкой думать
    И label, и panel наследуют от класса Windows.Forms.Control, соответственно, являются "дочерними" окнами (window) по отношению к основному.
    Чтобы ответить на ваш вопрос, надо понимать, что "под капотом" представляет собой событие.
    При регистрации нового окна в системе, выделяется память под программный код (оконная процедура WNDPROC), обрабатывающий приходящие сообщения (Windows Message). Для определённых классов (форма) в него уже сгенерированы обработчики, отвечающие на базовые сообщения (перемещение окна, сворачивание, изменение размера, перерисовка и пр). Оконная процедура есть у всех окон.
    Когда вы пишете обработчик события, на самом деле вы передаёте адрес этого обработчика оконной процедуре окна, говоря, что если пришло какое-либо определённое сообщение (Window Message), необходимо выполнить программный код, который находится по такому-то адресу.
    Соответственно, если вы не написали обработчик события, то никакой доп. памяти системой не выделяется (не в курсе, правда, оптимизирует ли компилятор "пустые" обрабочики событий).

    2. "Вдруг" в компилируемом языке невозможно без чёрной магии и метапрограммирования. Весь ваш программный код компилируется и под него выделяется память при запуске приложения. А вот передать новый параметр оконной процедуре в процессе исполнения можно, подписываясь на то или иное сообщение, или отписываясь от него. Все зависимости от этого, под весь скомпилированный код операционной системой выделяется память.
    Ответ написан
    Комментировать
  • Событие что ты нажал на иконку приложения в панели задач?

    @cicatrix
    было бы большой ошибкой думать
    Клик по иконке в панели задач приводит к запуску приложения. Если ваше приложение уже запущено, запустится ещё одна копия.
    Если вы хотите, чтобы ваше приложение запускалось только единожды (в одном экземпляре), то есть несколько подходов - либо создавать в системе мьютекс, и удерживать его до выхода (при повторном запуске, если мьютекс занят, завершать приложение), вот здесь описано подобное решение. (Там же приведён код активации окна уже запущенного приложения, если оно свёрнуто).
    Альтернативно, можно смотреть список запущенных процессов, искать свой процесс, и выходить, если найден.
    Либо в качестве мьютекса можно использовать любой блокирруемый системный ресурс (например, файл), но это не правильно.
    Ещё можно использовать именованный канал (named pipe), но это более громоздкое решение, и его следует использовать только если вам нужно осуществлять коммуникации между несколькими копиями вашего приложения.
    Ответ написан
    4 комментария
  • Вызов функции Windows Forms вне класса Формы?

    @cicatrix
    было бы большой ошибкой думать
    Вот здесь ваша проблема подробно описана.
    Вкратце: для вызова метода формы из другого потока, необходимо вызывать её через механизм Invoke. Вот пример оттуда:
    public static void InvokeIfRequired(this ISynchronizeInvoke obj,
                                             MethodInvoker action)
    {
        if (obj.InvokeRequired) {
            var args = new object[0];
            obj.Invoke(action, args);
        } else {
            action();
        }
    }

    где action() - ваш метод
    Ответ написан
    Комментировать