Ответы пользователя по тегу Windows Forms
  • Как реализовать браузер в desktop приложении?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    - ранее указанный CefSharp вероятно самый перспективный, учитывая тенденции на рынке браузеров
    - есть GeckoFx. Семплы под формс есть. Мне показалось порог вхождения ниже. Но (см выше) тенденции однако. А главное слишком редко обновляется. Сам фокс может успеть внести радикальные изменения в движок, пока проект выпустит обнову. Мне интересен тем, что накоплен приличный опыт переноса профилей фокса всего 7 или 8ю файлами
    - для потренироваться, новичкам вполне сгодятся WebBrowser/WebView (Forms/WPF). Зато «из коробки». Но это IE, увы. Есть еще WebView в UWP – это Edge, но там придется грызть XAML при чем все даже чуток мудренее чем просто в WPF. Но по большому счету и инфы навалом, и в магазине пачки демо приложений

    ps в закладках давно болтается еще и ChromiumFX ни чего не могу сказать о достоинствах и недостатках. но судя по датам обновлений, проект относительно активный, и не то что бы маргинальный
    Ответ написан
  • Как изменить элемент из другого класса?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - так и покажите где и как обявлен label2
    2 - и где, по отношению к ней, находится код, который пытается нзменить label2
    3 - приведите убедительные доказательства, что этот код кообще реально вызывается (да, и такие ошибки бывают. но тут достаточно break point в студии поставить)

    .. вам надо показать всю картину. по тому что по общему описанию, вы ловите проблему, которой действительно не должно быть в WinForms

    вольная фантазия - возможно вы повесили модификатор public на метод, который пытается изменить label2, но возможно умудрились label2 сделать недоступным. по дефолту визуального конструктора, он скоре всего так public, но может это вторичная фрма? которую вы всю всю сделали private?... (хотя тут и компилятор бы ругнулся..) тем не менее - без полной картины качественный ответ невозможн

    звиняйте экстрасенсы в отпуске (с) ))

    ps старый и слепой (((
    int score=0;
    label2.Text = "хоть что то";
    while (score <= 0) 
    {
                        score = textBox1.TextLength;
                        richTextBox1.Text += score;
                        if(score>0)
                        label2.Text = score.ToString();
    }


    это на 100% бесконечный цикл. он имеет шанс на выход, только в случае, если score имеет отрицательное значение. но...
    - мы имеем инициализацию int score=0;, мало того, изначальное инициализиреуем label2 не пустым значением, а это будет только подливать керосина в костер, но уже в теле цикла
    - далее бесконечно score = textBox1.TextLength; вот только это значение ни когда не может быть отрицательным (а судя по остальному коду цикла, даже вряд ли нулевым хоть когда либо)
    - и напомниню исловие цикла while (score <= 0) (то есть равенство нулю допустимо волею автора изначально) прервать эту вакханалию может только отрицтельное значение.. ну или break; по какому то осмысленному условию, которое реально может наступить в достаточно короткие сроки.. а не через годы, а то ведь бешатой собаке семь верст не круг (с)

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

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    если вы хотите работать с одними и теми же данными в разных формах, лучше что бы они существовали где то отдельно, возможно в качестве поля в главной форме, с типом:
    - массив для простого случая, далее по усложнению задачи
    - таблица данных https://docs.microsoft.com/ru-ru/dotnet/api/system...
    - база данных https://docs.microsoft.com/ru-ru/ef/

    а в гридах делать биндинг. тагда все экземпляры datagridview будут работать с одним источником, и даже отображать изменения, внесенные в другом гриде
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    https://metanit.com/sharp/entityframework/3.1.php
    Ответ написан
  • Есть ли замена Visual Studio для слабых ноутбуков на Windows 10?

    mindtester
    @mindtester Куратор тега Windows
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - ну по чесноку и винформы и впф, можно писать в редакторе. но для этого надо их знать существенно по лучше новичка (не верится? XAML - текстовка, и попробуйте вчитаться и осмыслить файлы форм, генереные дизайнером форм
    упорство и труд, все перетрут
    .. если сильно захотите)

    2 - лучший редактор на на замену VS - VS Code (если ваш ноут тянет Хром - потянет и VS Code upd если Хром уже тяжело - notepad++ для подсветки синтаксиса и голые SDK, уже можно творить)

    ps люди на F# пишут винформовские и WPF приложения.. как? ведь дизайнеры студии поддерживают только C# и VB ;))... просто - ручками. берут и пишут. погуглите, поищите на github

    .. ну а там глядишь, может и на апгрейд заработаете. хотя подработку можно найти не только в области ИТ. это же вопрос желания и упорства.. кто то упирается рогом, и покупает машину, или даже квартиру.. а тут ноут ;))
    Ответ написан
  • Как организовать взаимодейтсвие двух форм ввода данных с третьей формой-справочником?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    по фрагментам:
    1 - тут вы создаете форму в локальной переменной form и отображаете как диалог. модально кстати, а не модельно.. если слово смущает, просто нагуглите модальное окно ))
    2 и 3 - финт с var frm = this.Owner; избавляет от незнания переменной, указывающей на экземпляр класса. но именно тут и возникает ваша проблема

    решения:
    - попробуйте рассматривать переменные главного окна, как глобальные, по отношению ко всем порождаемым окнам/диалогам. тогда можно применить другой финт - описать в классе главного окна (здесь видимо frmLScheta) поля форм нужных типов (допустим frmSprStreet SprStreet). и пользоваться ими вместо локальных переменных. получится что то вроде
    var frm = (this.Owner as frmLScheta).SprStreet;
    но такой прием требует обязательной проверки на SprStreet на null
    - более классический прием состоит в создании своего конструктора для дочерних форм (да вообще чего угодно), куда можно передавать и нормально типизированное значение главной формы, и сколь угодное количество смежных форм. естественно в классе должны быть предусмотрены соответствующие типизированные поля, куда конструктор и сохраняет эти значения (указатели по существу). проверка на null так же обязательна. ее можно выполнять в конструкторе, но надежнее в каждом методе, где такой указатель используется.

    ps

    1 - слышали понятие best practices?.. так во у вас bad practices.. попробуйте открыть 2 экземпляра frmSprStreet и работать параллельно. ну и быстро все поймете
    2
    Ничего не понял
    выходит лукавите. поняли, но не очень удачно. при этом удаляете свой камент. да еще и медальку вешаете себе - тройное лукавство. фу
    Ответ написан
  • C# WindowsForm как вывести элементы из массива в TextBox без повторений?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    char[] m = default;
    // что означает вообще null
    // где то чем то заполняем m
    var m2 = m.Distinct();
    // m2 будет иметь тип IEnumerable<char> и содержать только уникальные элементы
    // если нужен массив, тогда так
    var m2 = m.Distinct().ToArray();
    // если нужен лист, тогда так
    var m2 = m.Distinct().ToList();
    // исходный m тоже может быть и List и IEnumerable, будет работать для любого варианта
    Ответ написан
  • Как перейти на папку выше?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    чуток по современнее будет так

    using System;
    using System.IO;
    
    namespace perentDir
    {
        class Program
        {
            static void Main(string[] args)
            {
                var x = Directory.GetCurrentDirectory();
                var y = Directory.GetParent(x);
                Console.WriteLine(x);
                Console.WriteLine(y);
            }
        }
    }
    Ответ написан
  • C# (winform) как засунуть async и await в мой код?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - совет - не дергайте сборщик мусора по мелочам. этим вы гарантированно ухудшаете время выполнения. в то же время он и сам великолепно справится, пока вы будете рассматривать результат

    2 - осваивайте binding к внешним объектам. Windows Forms DataGridView это умеет https://docs.microsoft.com/ru-ru/dotnet/framework/...

    в простейшем случае можете потренироваться на кошечках попробовать массивы/списки (а можно и Entity Framework подтянуть, там есть вариант БД "in memory". но только если есть данные загружаемые из внешних БД, или сохраняемые в БД.. хотя EF уже весь на async/await "из коробки")

    3 - binding из бавит вас от рукопашного создания/удаления строк DataGridView. это тяжеловестные операции, учитывая что речь о визуальных эелементах

    краткое резюме - binding к массивам/спискам/бд, а их обработка во внешних процессах, или PLINQ.. или async/await - что осилите
    Ответ написан
  • Как массово проверять данные с пользовательской формы?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - посмотрите события валидации - https://docs.microsoft.com/ru-ru/dotnet/api/system...
    2 - один обработчик события (метод) можно вешать на много контролов. это нормально
    Ответ написан
  • Как вводить в textbox только буквы?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    а еще лучше использовать специально заготовленные события текстбокса - валидация
    Ответ написан
  • Как сделать при нажатии на изображение в picturebox выделение какого-либо элемента?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    по существу - ни как.
    picturebox - это битмап. в нем нет ни каких "элементов"

    только если вы сами генерите picturebox, у вас есть:
    - возможность создать какую то координатную карту в процессе этой генерации
    - отловить координаты клика, и сопоставить их со своей картой

    иначе ни как

    ps или разбогатеть как гугл, завести такие же вычислительные мощности для распознавания "элементов" в картинках, нейронными сетями и... хотя, вам к тому моменту будет наверняка уже не до этого
    Ответ написан
  • Событие KeyPress у TextBox. Как сделать один формат для различных TextBox?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - https://duckduckgo.com/?q=winforms+TextBox+validat...
    2 - https://duckduckgo.com/?q=wpf+TextBox+validation&t...

    выбрать нужное upd и да, там не только числа вводить, можно задать форматы для только положительных чисел, количество знаков после запятой, денежных величин, даты и/или времени в нужном формате, емейлов, урлов, ФИО, и тд..
    для изучения
    самое то
    upd 2 чуть не забыл - один валидатор без проблем можно вешать на пачку однотипных полей ввода, практикуйтесь (изучите внимательнее окно свойства в дизайнере, если это винформы)
    Ответ написан
  • Как изменить значение переменной в ресурсах?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    использовать БД или конфигурационные файлы (в обоих случаях полезно задумываться о безопасности - использовать шифрование, хотя бы для защиты от прямого чтения)

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

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - не обязательно делать "логин" главной формой. можно стартовать главную форму скрытой, а форму логина дочерней, но показывать раньше, и дальше действовать в зависимости от успешности логина

    2 - конкретно в WinForms можно отрабатывать вообще разные формы последовательно

    using System;
    using System.Windows.Forms;
    
    namespace X
    {
        internal static partial class Y
        {
            /// <summary>
            /// Главная точка входа для приложения.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(A = new fmA());
                // bla-bla-bla with login
                Application.Run(B = new fmB());
            }
            internal static fmA A;
            internal static fmB B;
        }
    }


    3 - для WPF не подскажу, но наверняка оба подхода можно рассмотреть и пробовать искать аналогии

    ps для WinForms
    Как закрыть главную форму из дочерней?
    буквальный ответ - ни как, закрытие главной формы, это завершение Application.Run(A = new fmXXX()); и если вы не модифицирутете код Main- тогда это завершение программы
    Ответ написан
  • Ухудшится ли защита кода от декомпиляции при использовании WinForms?

    mindtester
    @mindtester
    учусь не реагировать на вопросы.. пока трудно.. ))
    при использовании MFC все равно ухудшиться (ну не так конечно - форм вообще элементарно декомпилируется) тем не менее - как только начинается работа с окнами, можно отлавливать хендлы и сообщения

    в частности такие программы у на порядок проще "ботизировать" к примеру. тем же AutoIt

    upd - за протектор ни чего конкретно не скажу. любой протектор значительно усиливает защиту. строго говоря, даже бесплатный дотфускатор в комплекте студии, защитит даже программу на c#/WinForms от школоты. от профессионалов нет, но что бы вами занались профессионалы, ваша программа/данные к которым она дает доступ, должны приобрести какую то значимость. либо головокружительный коммерческий успех (либо вы напишите очередной мега опасный вирус ;)))
    Ответ написан
  • Почему нету отчетов в visual studio 2015?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    а вы уверены что это не сторонняя библиотека компонентов?

    я вообще не припомню в формах такого стандартного компонента

    и если библиотечный - нужно просто уточнить что за библиотека, и подключить ее в проект студии 2015, другой вопрос - может потребоваться более свежая версия библиотеки, и бывают случаи когда разработчики не развивают библиотеки, то есть может оказаться, что совместимой версии не существует. но для начала надо просто выяснить - из какой библиотеки компонент?

    ps компонент "отчет" может казаться стандартным, если у вас вдруг у вас lightswitch проект, кажется там такое было, но это не формы, там все на silverlight основано. но и в этом случае не все просто - в 2015 это опциональный компонент студии редакции проф, в 2015 коммунити его можно поднять, доустановив OfficeDeveloperTools, но 99% что будут конфликты с Azure Tools, а выражается в том что проект невозможно опубликовать - и как разруливать, надо будет гуглить .. кстати, конвертация lightswitch проектов из 2012 в 2015 есть, но она косячит - проект может не собраться, а если даже соберется - попытки его развивать все равно вызывают косяки (это к тому что lightswitch проект в 2015 лучше пересоздавать с 0)

    .. для примера - в 2017 lightswitch вообще не существует, МС закрыл этот проект и не рекомендует его использовать

    но если точно формы - выясняйте что за библиотека
    Ответ написан
  • Как создать гистограмму в C# windows forms, чтобы переменные для построения брались из базы данных MC SQL?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    разбейте проблему на 2 части:

    - как взять данные из MS SQL (если уже есть пример
    Программа на C# берёт данные из БД и выводит их
    .. можно просто скопировать) .. или гугл в помощь..

    - как отобразить данные на гистограмме? - гугл в помощь.. в частности для WinForms есть компонент "из коробки" и даже тутор к нему
    Ответ написан
  • C#. Windows Forms или WPF? Что выбрать?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    1 - если смотреть в будущее (вин10) и метить на витрину магазина МС - еще лучше сразу UWP

    2 - но мордочки для винформ тоже есть:
    - https://github.com/Wagnerp/Krypton-NET-4.7
    - https://github.com/N-a-r-w-i-n/MetroSet-UI

    3 - если метить на трудоустройство в корпоративный сектор - все популярные библиотеки компонентов .net, типа DevExpress, Telerik, Syncfusion и тд - дают триалы, не грех поиграть (там и формы, и впф и увп, и веб..)

    отдельно про Syncfusion - у них есть хитрая лицензия для практически не ограниченного бесплатного использования, даже коммерческого в каких то пределах (но подробности уже у них на сайте ищите)

    ps

    если чисто для десктопа - формы+мордочки проще и мало в чем уступают, а работа с треем по дефолту доступна именно в формах

    минус и форм и впф - встроенный браузер - это IE (тут отвечал подробно - придется осваивать или CEF# или GeckoFX, новичку это будет сложно)

    ... а в UWP - уже Edge, там все гораздо веселее

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

    pps

    вот статья от крутого эксперта, первые два пункта как раз вам по теме почитать.. статья ооочень старая, но суть далеко не все "гуру" знают даже сегодня ;))
    Ответ написан
  • Какой пакет брать, для установки C# Windows Form(Visual Studio 2017 Community)?

    mindtester
    @mindtester Куратор тега C#
    учусь не реагировать на вопросы.. пока трудно.. ))
    да. для винформс выбор именно такой

    PS

    точнее именно что в "рамочке", все остальное "по вкусу", но для винформ на C# нужен именно пункт "классические приложения .NET" обязательно, и ни чего более. остальное это уже сами там смотрите..
    Ответ написан