Задать вопрос
Ответы пользователя по тегу C#
  • Нужно написать аналог regedit в Windows для курсовой на c++ или c# с графическим интерфейсом. С чего начать? Каие библиотеки и технологии посоветуете?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Совсем не обязательно икать прямые WinAPI вызовы для работы с реестром (так-то конечно лучше все таки изучить и понимать механику их работы — облегчает работу с реестром). В C# есть уже готовые обертки для работы с реестром:
    using Microsoft.Win32;
    И далее работаем с реестром.
    https://docs.microsoft.com/en-us/dotnet/csharp/pro...

    В данном случае все крайне просто: кидаете на форму в левой части контрол тип "дерево", а в правую часть контрол типа "таблица/список". И далее просто используете готовые обертки для заполнения контролов данными. Можно использовать как WinForms, так и WPF.
    Ответ написан
    2 комментария
  • Как облегчить написание простого ПО на С# с интеграцией AD?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Иметь гугл/StackOverflow под рукой — большинство проблем решаются именно там. Для облегчения ваших задач — идете на сайта nuget, вбиваете что вам надо и выбираете подходящую под ваши нужды/требования библиотеку. Рисование простейших элементов GUI легко делается в конструкторе VS.
    Ответ написан
    Комментировать
  • Как обмениваться данными с сервером, на приложении xamarin?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если кратко: точно так же как и в любом другом фреймворке/ЯП — подключиться к серверу и передать данные.
    Если чуть подробнее, то:
    1. Для начала изучить что такое сеть и как она работает (Сетевая модель OSI, уровни сети и вот это все).
    2. Каким образом осуществляется сетевое соединение — клиент, сервер, сокеты и прочее.
    3. Изучить какие сетевые протоколы бывают и зачем они вообще нужны.
    4. Изучить основные понятия в программировании и разработке ПО.
    5. Изучить HTTP, построение API, что такое фронт-энд, бэк-энд и т.п.
    6. Применить полученные знания на практике.
    Ответ написан
    4 комментария
  • Почему изображение моргает в pictureBox?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    namespace coordinates
    {
        class Example
        {
            public string Name;
            public Action MainFunc;
    
            public Example(string name, Action callback)
            {
                Name = name;
                MainFunc = callback;
            }
    
            public void Init()
            {
                MainFunc?.Invoke();
            }
        }
    }

    var r = new Example("Example name", () => Console.WriteLine("Example MainFunc"));
    Ответ написан
    Комментировать
  • Почему не открывается конструктор в Visual Studio?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Смотрите ошибки конструктора, возможно изменили код конструктора, что угодно может быть. Конструктор частенько бывает в ступоре из-за разного кода или положения элементов. Для простых форм — он отличен, но когда надо что-то нестандартное или сложное, то лучше ручками писать. Имеет смысл создать новую форму и в неё ручками потихоньку перенести код конструктора старой формы и смотреть на каком этапе конструктор ломается.
    Ответ написан
    Комментировать
  • Как разобрать ответ JSON в C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    https://app.quicktype.io/#r=json2csharp - вот, используйте для генерации парсеров JSON.
    Ответ написан
    Комментировать
  • Как правильно описать класс для библиотеки Newtonsoft.Json C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Элементарно: https://app.quicktype.io/#r=json2csharp - слева вставляете JSON, справа на выходе получаете готовый класс для парсинга. Удобнейший сервис.

    Пример:
    {
      "greeting": "Welcome to quicktype!",
      "instructions": [
        "Type or paste JSON here",
        "Or choose a sample above",
        "quicktype will generate code in your",
        "chosen language to parse the sample data"
      ]
    }

    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
    
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
        using J = Newtonsoft.Json.JsonPropertyAttribute;
        using R = Newtonsoft.Json.Required;
        using N = Newtonsoft.Json.NullValueHandling;
    
        public partial class Welcome
        {
            [J("greeting")]     public string Greeting { get; set; }      
            [J("instructions")] public string[] Instructions { get; set; }
        }
    
        public partial class Welcome
        {
            public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, QuickType.Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
        }
    
        internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters = {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    }


    Я конвертер выношу в отдельный класс и файл:
    using Newtonsoft.Json;
    
        /// <summary>
        /// Конвертер JSON 
        /// </summary>
        public static class Converter
        {
            /// <summary>
            /// Настройки конвертации JSON
            /// </summary>
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,     // Пропускаем аттрибуты
                DateParseHandling = DateParseHandling.None,                     // Выключаем парсинг дат
                NullValueHandling = NullValueHandling.Ignore                    // Пропускаем пустые значения 
                                                                                // (API-вызов при создании запроса 
                                                                                // сам заполняет нужные поля)
            };
        }


    А парсинг/конвертацию JSON выношу в отдельный класс, от которого уже наследую классы для парсинга данных:
    namespace Foo
    {
        /// <summary>
        /// Абстрактный класс - сетевое сообщение: парсинг и 
        /// генерация JSON из экземпляров наследуемого класса
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public abstract class APIMessage<T>
        {
            /// <summary>
            /// Конвертация в JSON
            /// </summary>
            /// <returns></returns>
            public string ToJson()
            {
                return JsonConvert.SerializeObject(this, Converter.Settings);
            }
    
            /// <summary>
            /// Парсинг JSON в указанный тип
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static T FromJson(string json)
            {
                try
                {
                    return JsonConvert.DeserializeObject<T>(json, Converter.Settings);
                }
                catch (Exception e)
                {                
                    throw new ServerConnectionException(
                        "Server response parse error!\nResponse type: <" + typeof(T).FullName
                        + ">\nError: " + e.Message
                    );
                }
            }
        }
    }


    Как-то так получается:
    public class Request : APIMessage<Request>
    {
        <описание JSON свойств>
    }
    Ответ написан
    3 комментария
  • Библиотека вместо selenium, есть ли?

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

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Делал такую систему. Реализуется элементарно: сервер, на нем веб-приложение, которое показывает меню с фотками блюд и кнопками заказа, в столах планшеты с NWJS, который показывает это самое меню и несет дополнительный функционал по управлению плашетом (яркость экрана, включено/выключено и т.п.), плюс отдельное веб-приложение для управления планшетами (добавить, удалить, переименовать, настроить и т.п.). Планшеты MS Surface были — не рекомендую, в винде регулярно что-то не так происходит и надо костыли вставлять. Удобнее и оптимальнее линукс использовать для клиентов. Сервер можно писать на чем угодно.

    Вот так выглядит клиент для планшетов: https://freelansim.ru/projects/105943
    Ответ написан
    Комментировать
  • Как правильно реализовать кнопку "запомнить" в программе?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Используйте стандартный механизм хранения настроек приложения:
    https://habr.com/post/271483/
    https://stackoverflow.com/questions/453161/best-pr...
    Ответ написан
    Комментировать
  • Получить текстовое представление формулы, записанной в коде, обратно в текст?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Что-то типа такого:
    public static void Main(string[] args)
    {
        var cube = new Formula<Func<int, int>>( (x) => x * x, "(x) => x * x" );
        Console.WriteLine(cube.Exec(3));
        Console.WriteLine(cube.Text);
    }
    
    public class Formula<T>
    {
        public readonly T Exec;
        public readonly string Text;
        public Formula(T action, string text)
        {
            Exec = action;
            Text = text;
        }                    
    }
    Ответ написан
  • Как работать с созданными объектами в коде?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Передавать выбранные объекты другим методам и функциям.
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Gameplay : MonoBehaviour {
    
        string Word;
        public GameObject PrefabCharCell;
        public GameObject tempCell;
        public Transform GridCellPos;
        
        void SomeMethod(GameObject tempCell){ 
    
        }
    
        void Start ()
        {
            Word = "Meet"; 
            foreach (char ch in Word.ToUpper().ToCharArray())
            {
                tempCell = Instantiate(PrefabCharCell);
                tempCell.transform.SetParent(GridCellPos,false);
                SomeMethod(tempCell);
            }  
        }
    }
    Ответ написан
    2 комментария
  • Может ли Awesomium конкурировать с Selenium?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Используйте nwjs. Awesomium практически не юзабелен — документации нет, заброшен.
    Ответ написан
    Комментировать
  • Можно ли увеличить скорость скрывания столбцов в DataGridView?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    myControl.SuspendLayout();
    ... меняем контент в myControl ...
    myControl.ResumeLayout(false);
    myControl.PerformLayout();


    UPD
    Есть еще один дополнительный флаг для формы, который может ускорить рендеринг:
    public partial class MainWindow : Form
        {
            /// <summary>
            /// Fix for slow UI rendering
            /// </summary>
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED   
                    return cp;
                }
            }
        }
    Ответ написан
  • Когда используете принудительную сборку мусора?

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

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если к программам на JAVA нет исходников — то самый простой способ через пайп/консоль. Если исходники есть — можно использовать любые механизмы межпроцессного взаимодействия.
    Ответ написан
    Комментировать
  • Как на c# отправить https GET или POST запрос, используя из параметров только url и raw(тело запроса)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Конечно можно:
    1. Берем из ссылки хост
    2. Получаем IP адрес
    3. По этому адресу открываем обычно соединение через обычный сокет
    4. Отправляем нужные данные через сокет
    5. Закрываем соединение
    Ответ написан
    4 комментария
  • Как преобразовать string выражение?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    мне нужно общее решение
    Введите выражение у = [*ожидание ввода выражения]
    Введите x = [*ввод x]
    Значение Выражения в точке X = [значение выражение в точке]

    1. Получить выражение
    2. Проверить корректность выражения
    3. Получить дополнительные данные
    4. Проверить корректность введенных данных
    5. Распарсить выражение
    6. Распарсить введенные данные
    7. Произвести вычисления выражения с учетом введенных ранее данных
    8. Показать результат вычисления
    Ответ написан
    Комментировать